private static boolean isTypeWithLiteralParameters(TypeSignature typeSignature) { return typeSignature.getParameters().stream() .map(TypeSignatureParameter::getKind) .allMatch(kind -> kind == ParameterKind.LONG || kind == ParameterKind.VARIABLE); }
private static boolean isTypeWithLiteralParameters(TypeSignature typeSignature) { return typeSignature.getParameters().stream() .map(TypeSignatureParameter::getKind) .allMatch(kind -> kind == ParameterKind.LONG || kind == ParameterKind.VARIABLE); }
private boolean isImplicitRowType(Type type) { return type.getTypeSignature().getParameters() .stream() .map(TypeSignatureParameter::getNamedTypeSignature) .map(NamedTypeSignature::getName) .filter(Optional::isPresent) .map(Optional::get) .allMatch(name -> name.startsWith(implicitPrefix)); }
static void checkTypeParameters(TypeSignature typeSignature, Set<String> typeParameterNames, AnnotatedElement element) { // Check recursively if `typeSignature` contains something like `T<bigint>` if (typeParameterNames.contains(typeSignature.getBase())) { checkArgument(typeSignature.getParameters().isEmpty(), "Expected type parameter not to take parameters, but got %s on method [%s]", typeSignature.getBase(), element); return; } for (TypeSignatureParameter parameter : typeSignature.getParameters()) { Optional<TypeSignature> childTypeSignature = parameter.getTypeSignatureOrNamedTypeSignature(); if (childTypeSignature.isPresent()) { checkTypeParameters(childTypeSignature.get(), typeParameterNames, element); } } }
public static TypeSignature applyBoundVariables(TypeSignature typeSignature, BoundVariables boundVariables) { String baseType = typeSignature.getBase(); if (boundVariables.containsTypeVariable(baseType)) { checkState(typeSignature.getParameters().isEmpty(), "Type parameters cannot have parameters"); return boundVariables.getTypeVariable(baseType).getTypeSignature(); } List<TypeSignatureParameter> parameters = typeSignature.getParameters().stream() .map(typeSignatureParameter -> applyBoundVariables(typeSignatureParameter, boundVariables)) .collect(toList()); return new TypeSignature(baseType, parameters); }
static void checkTypeParameters(TypeSignature typeSignature, Set<String> typeParameterNames, AnnotatedElement element) { // Check recursively if `typeSignature` contains something like `T<bigint>` if (typeParameterNames.contains(typeSignature.getBase())) { checkArgument(typeSignature.getParameters().isEmpty(), "Expected type parameter not to take parameters, but got %s on method [%s]", typeSignature.getBase(), element); return; } for (TypeSignatureParameter parameter : typeSignature.getParameters()) { Optional<TypeSignature> childTypeSignature = parameter.getTypeSignatureOrNamedTypeSignature(); if (childTypeSignature.isPresent()) { checkTypeParameters(childTypeSignature.get(), typeParameterNames, element); } } }
private Type instantiateParametricType(TypeSignature signature) { List<TypeParameter> parameters = new ArrayList<>(); for (TypeSignatureParameter parameter : signature.getParameters()) { TypeParameter typeParameter = TypeParameter.of(parameter, this); parameters.add(typeParameter); } ParametricType parametricType = parametricTypes.get(signature.getBase().toLowerCase(Locale.ENGLISH)); if (parametricType == null) { throw new IllegalArgumentException("Unknown type " + signature); } Type instantiatedType = parametricType.createType(this, parameters); // TODO: reimplement this check? Currently "varchar(Integer.MAX_VALUE)" fails with "varchar" //checkState(instantiatedType.equalsSignature(signature), "Instantiated parametric type name (%s) does not match expected name (%s)", instantiatedType, signature); return instantiatedType; }
public static TypeSignature applyBoundVariables(TypeSignature typeSignature, BoundVariables boundVariables) { String baseType = typeSignature.getBase(); if (boundVariables.containsTypeVariable(baseType)) { checkState(typeSignature.getParameters().isEmpty(), "Type parameters cannot have parameters"); return boundVariables.getTypeVariable(baseType).getTypeSignature(); } List<TypeSignatureParameter> parameters = typeSignature.getParameters().stream() .map(typeSignatureParameter -> applyBoundVariables(typeSignatureParameter, boundVariables)) .collect(toList()); return new TypeSignature(baseType, parameters); }
private static ClientTypeSignature toClientTypeSignature(TypeSignature signature) { return new ClientTypeSignature(signature.getBase(), signature.getParameters().stream() .map(Query::toClientTypeSignatureParameter) .collect(toImmutableList())); }
private static ClientTypeSignature toClientTypeSignature(TypeSignature signature) { return new ClientTypeSignature(signature.getBase(), signature.getParameters().stream() .map(Query::toClientTypeSignatureParameter) .collect(toImmutableList())); }
@Test public void parseSignatureWithLiterals() { TypeSignature result = parseTypeSignature("decimal(X,42)", ImmutableSet.of("X")); assertEquals(result.getParameters().size(), 2); assertEquals(result.getParameters().get(0).isVariable(), true); assertEquals(result.getParameters().get(1).isLongLiteral(), true); }
@Test public void parseSignatureWithLiterals() { TypeSignature result = parseTypeSignature("decimal(X,42)", ImmutableSet.of("X")); assertEquals(result.getParameters().size(), 2); assertEquals(result.getParameters().get(0).isVariable(), true); assertEquals(result.getParameters().get(1).isLongLiteral(), true); }
private static void assertSignature( String typeName, String base, List<String> parameters, String expectedTypeName) { TypeSignature signature = parseTypeSignature(typeName); assertEquals(signature.getBase(), base); assertEquals(signature.getParameters().size(), parameters.size()); for (int i = 0; i < signature.getParameters().size(); i++) { assertEquals(signature.getParameters().get(i).toString(), parameters.get(i)); } assertEquals(signature.toString(), expectedTypeName); }
private static void assertSignature( String typeName, String base, List<String> parameters, String expectedTypeName) { TypeSignature signature = parseTypeSignature(typeName); assertEquals(signature.getBase(), base); assertEquals(signature.getParameters().size(), parameters.size()); for (int i = 0; i < signature.getParameters().size(); i++) { assertEquals(signature.getParameters().get(i).toString(), parameters.get(i)); } assertEquals(signature.toString(), expectedTypeName); }
private static ClientTypeSignature toClientTypeSignature(TypeSignature signature) { return new ClientTypeSignature(signature.getBase(), signature.getParameters().stream() .map(TestFixJsonDataUtils::toClientTypeSignatureParameter) .collect(toImmutableList())); }
private static ClientTypeSignature toClientTypeSignature(TypeSignature signature) { return new ClientTypeSignature(signature.getBase(), signature.getParameters().stream() .map(TestFixJsonDataUtils::toClientTypeSignatureParameter) .collect(toImmutableList())); }
@Test public void testRowTypeLookup() { functionAssertions.getMetadata().getType(parseTypeSignature("row(a bigint)")); Type type = functionAssertions.getMetadata().getType(parseTypeSignature("row(b bigint)")); assertEquals(type.getTypeSignature().getParameters().size(), 1); assertEquals(type.getTypeSignature().getParameters().get(0).getNamedTypeSignature().getName().get(), "b"); }
@Test public void testRowTypeLookup() { functionAssertions.getMetadata().getType(parseTypeSignature("row(a bigint)")); Type type = functionAssertions.getMetadata().getType(parseTypeSignature("row(b bigint)")); assertEquals(type.getTypeSignature().getParameters().size(), 1); assertEquals(type.getTypeSignature().getParameters().get(0).getNamedTypeSignature().getName().get(), "b"); }
@Test public void testTypeSignatureRoundTrip() { TypeManager typeManager = new TypeRegistry(); TypeSignature typeSignature = new TypeSignature( ROW, TypeSignatureParameter.of(new NamedTypeSignature(Optional.of(new RowFieldName("col1", false)), new TypeSignature(BIGINT))), TypeSignatureParameter.of(new NamedTypeSignature(Optional.of(new RowFieldName("col2", true)), new TypeSignature(DOUBLE)))); List<TypeParameter> parameters = typeSignature.getParameters().stream() .map(parameter -> TypeParameter.of(parameter, typeManager)) .collect(Collectors.toList()); Type rowType = RowParametricType.ROW.createType(typeManager, parameters); assertEquals(rowType.getTypeSignature(), typeSignature); } }
@Test public void testTypeSignatureRoundTrip() { TypeManager typeManager = new TypeRegistry(); TypeSignature typeSignature = new TypeSignature( ROW, TypeSignatureParameter.of(new NamedTypeSignature(Optional.of(new RowFieldName("col1", false)), new TypeSignature(BIGINT))), TypeSignatureParameter.of(new NamedTypeSignature(Optional.of(new RowFieldName("col2", true)), new TypeSignature(DOUBLE)))); List<TypeParameter> parameters = typeSignature.getParameters().stream() .map(parameter -> TypeParameter.of(parameter, typeManager)) .collect(Collectors.toList()); Type rowType = RowParametricType.ROW.createType(typeManager, parameters); assertEquals(rowType.getTypeSignature(), typeSignature); } }