Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package com.facebook.presto.type;
 
 
 
 import java.util.List;
 import java.util.Set;
 
 import static com.facebook.presto.spi.type.BigintType.BIGINT;
 import static com.facebook.presto.spi.type.BooleanType.BOOLEAN;
 import static com.facebook.presto.spi.type.DateType.DATE;
 import static com.facebook.presto.spi.type.DoubleType.DOUBLE;
 import static com.facebook.presto.spi.type.HyperLogLogType.HYPER_LOG_LOG;
 import static com.facebook.presto.spi.type.IntervalDayTimeType.INTERVAL_DAY_TIME;
 import static com.facebook.presto.spi.type.IntervalYearMonthType.INTERVAL_YEAR_MONTH;
 import static com.facebook.presto.spi.type.TimeType.TIME;
 import static com.facebook.presto.spi.type.TimeWithTimeZoneType.TIME_WITH_TIME_ZONE;
 import static com.facebook.presto.spi.type.TimestampType.TIMESTAMP;
 import static com.facebook.presto.spi.type.TimestampWithTimeZoneType.TIMESTAMP_WITH_TIME_ZONE;
 import static com.facebook.presto.spi.type.VarbinaryType.VARBINARY;
 import static com.facebook.presto.spi.type.VarcharType.VARCHAR;
 import static com.facebook.presto.type.ArrayParametricType.ARRAY;
 import static com.facebook.presto.type.ColorType.COLOR;
 import static com.facebook.presto.type.JsonPathType.JSON_PATH;
 import static com.facebook.presto.type.JsonType.JSON;
 import static com.facebook.presto.type.LikePatternType.LIKE_PATTERN;
 import static com.facebook.presto.type.MapParametricType.MAP;
 import static com.facebook.presto.type.RegexpType.REGEXP;
 import static com.facebook.presto.type.RowParametricType.ROW;
 import static com.facebook.presto.type.UnknownType.UNKNOWN;
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 
 public final class TypeRegistry
         implements TypeManager
 {
     private final ConcurrentMap<TypeSignatureTypetypes = new ConcurrentHashMap<>();
     private final ConcurrentMap<StringParametricTypeparametricTypes = new ConcurrentHashMap<>();
 
     public TypeRegistry()
     {
         this(ImmutableSet.<Type>of());
     }
 
     @Inject
     public TypeRegistry(Set<Typetypes)
     {
         checkNotNull(types"types is null");
 
         // Manually register UNKNOWN type without a verifyTypeClass call since it is a special type that can not be used by functions
         this..put(.getTypeSignature(), );
 
         // always add the built-in types; Presto will not function without these
         addType();
         addType();
         addType();
         addType();
         addType();
         addType();
         addType();
         addType();
         addType();
         addType();
         addType();
         addType();
         addType();
         addType();
         addType();
         addType();
         addType();
         addParametricType();
         addParametricType();
         addParametricType();
 
        for (Type type : types) {
            addType(type);
        }
    }
    @Override
    public Type getType(TypeSignature signature)
    {
        Type type = .get(signature);
        if (type == null) {
            return instantiateParametricType(signature);
        }
        return type;
    }
    @Override
    public Type getParameterizedType(String baseTypeNameList<TypeSignaturetypeParametersList<ObjectliteralParameters)
    {
        return getType(new TypeSignature(baseTypeNametypeParametersliteralParameters));
    }
    private Type instantiateParametricType(TypeSignature signature)
    {
        ImmutableList.Builder<TypeparameterTypes = ImmutableList.builder();
        for (TypeSignature parameter : signature.getParameters()) {
            Type parameterType = getType(parameter);
            if (parameterType == null) {
                return null;
            }
            parameterTypes.add(parameterType);
        }
        ParametricType parametricType = .get(signature.getBase().toLowerCase(.));
        if (parametricType == null) {
            return null;
        }
        Type instantiatedType = parametricType.createType(parameterTypes.build(), signature.getLiteralParameters());
        checkState(instantiatedType.getTypeSignature().equals(signature), "Instantiated parametric type name (%s) does not match expected name (%s)"instantiatedTypesignature);
        return instantiatedType;
    }
    @Override
    public List<TypegetTypes()
    {
        return ImmutableList.copyOf(.values());
    }
    public void addType(Type type)
    {
        verifyTypeClass(type);
        Type existingType = .putIfAbsent(type.getTypeSignature(), type);
        checkState(existingType == null || existingType.equals(type), "Type %s is already registered"type);
    }
    public void addParametricType(ParametricType parametricType)
    {
        String name = parametricType.getName().toLowerCase(.);
        checkArgument(!.containsKey(name), "Parametric type already registered: %s"name);
        .putIfAbsent(nameparametricType);
    }
    public static void verifyTypeClass(Type type)
    {
        checkNotNull(type"type is null");
    }
New to GrepCode? Check out our FAQ X