magicLiteralFunction, BoundVariables.builder() .setTypeVariable("T", parameterType) .setTypeVariable("R", type) .build(), 1);
TypeSignatureParameter typeSignatureParameter = parameters.get(i); if (typeSignatureParameter.getKind() == ParameterKind.VARIABLE) { if (bindings.containsLongVariable(typeSignatureParameter.getVariable())) { originalTypeTypeParametersBuilder.add(TypeSignatureParameter.of(bindings.getLongVariable(typeSignatureParameter.getVariable()))); if (typeSignatureParameter.getKind() == ParameterKind.VARIABLE) { String variableName = typeSignatureParameter.getVariable(); if (!bindings.containsLongVariable(variableName) || !bindings.getLongVariable(variableName).equals(commonSuperLongLiteral)) { bindings.setLongVariable(variableName, commonSuperLongLiteral); result = SolverReturnStatus.CHANGED;
@Override public SolverReturnStatus update(BoundVariables.Builder bindings) { if (!bindings.containsTypeVariable(typeParameter)) { if (!satisfiesConstraints(actualType)) { return SolverReturnStatus.UNSOLVABLE; } bindings.setTypeVariable(typeParameter, actualType); return SolverReturnStatus.CHANGED; } Type originalType = bindings.getTypeVariable(typeParameter); Optional<Type> commonSuperType = typeManager.getCommonSuperType(originalType, actualType); if (!commonSuperType.isPresent()) { return SolverReturnStatus.UNSOLVABLE; } if (!satisfiesConstraints(commonSuperType.get())) { // This check must not be skipped even if commonSuperType is equal to originalType return SolverReturnStatus.UNSOLVABLE; } if (commonSuperType.get().equals(originalType)) { return SolverReturnStatus.UNCHANGED_SATISFIED; } bindings.setTypeVariable(typeParameter, commonSuperType.get()); return SolverReturnStatus.CHANGED; }
.boundTo("integer", "function(integer,varchar)", "function(varchar,double)") .produces(BoundVariables.builder() .setTypeVariable("T", INTEGER) .setTypeVariable("U", VARCHAR) .setTypeVariable("V", DOUBLE) .build()); assertThat(applyTwice) .boundTo( new TypeSignatureProvider(functionArgumentTypes -> TypeSignature.parseTypeSignature("function(varchar,double)"))) .produces(BoundVariables.builder() .setTypeVariable("T", INTEGER) .setTypeVariable("U", VARCHAR) .setTypeVariable("V", DOUBLE) .build()); assertThat(applyTwice) .boundTo( .boundTo("array(integer)", "function(integer, array(integer))") .produces(BoundVariables.builder() .setTypeVariable("T", INTEGER) .build()); .boundTo("integer", "function(integer, integer)", "function(integer, integer)", "function(integer, integer)") .produces(BoundVariables.builder() .setTypeVariable("T", INTEGER) .build()); assertThat(varargApply) .boundTo("integer", "function(integer, integer)", "function(integer, double)", "function(double, double)")
.boundTo("integer", "function(integer,varchar)", "function(varchar,double)") .produces(BoundVariables.builder() .setTypeVariable("T", INTEGER) .setTypeVariable("U", VARCHAR) .setTypeVariable("V", DOUBLE) .build()); assertThat(applyTwice) .boundTo( new TypeSignatureProvider(functionArgumentTypes -> TypeSignature.parseTypeSignature("function(varchar,double)"))) .produces(BoundVariables.builder() .setTypeVariable("T", INTEGER) .setTypeVariable("U", VARCHAR) .setTypeVariable("V", DOUBLE) .build()); assertThat(applyTwice) .boundTo( .boundTo("array(integer)", "function(integer, array(integer))") .produces(BoundVariables.builder() .setTypeVariable("T", INTEGER) .build()); .boundTo("integer", "function(integer, integer)", "function(integer, integer)", "function(integer, integer)") .produces(BoundVariables.builder() .setTypeVariable("T", INTEGER) .build()); assertThat(varargApply) .boundTo("integer", "function(integer, integer)", "function(integer, double)", "function(double, double)")
magicLiteralFunction, BoundVariables.builder() .setTypeVariable("T", parameterType) .setTypeVariable("R", type) .build(), 1);
TypeSignatureParameter typeSignatureParameter = parameters.get(i); if (typeSignatureParameter.getKind() == ParameterKind.VARIABLE) { if (bindings.containsLongVariable(typeSignatureParameter.getVariable())) { originalTypeTypeParametersBuilder.add(TypeSignatureParameter.of(bindings.getLongVariable(typeSignatureParameter.getVariable()))); if (typeSignatureParameter.getKind() == ParameterKind.VARIABLE) { String variableName = typeSignatureParameter.getVariable(); if (!bindings.containsLongVariable(variableName) || !bindings.getLongVariable(variableName).equals(commonSuperLongLiteral)) { bindings.setLongVariable(variableName, commonSuperLongLiteral); result = SolverReturnStatus.CHANGED;
BoundVariables.builder().setTypeVariable("T", DoubleType.DOUBLE).build(), 1, new TypeRegistry(),
BoundVariables.builder().setTypeVariable("T1", DoubleType.DOUBLE).setTypeVariable("T2", DoubleType.DOUBLE).build(), 1, new TypeRegistry(),
assertTrue(implementation.getInputParameterMetadataTypes().equals(expectedMetadataTypes)); InternalAggregationFunction specialized = aggregation1.specialize(BoundVariables.builder().build(), 1, new TypeRegistry(), null); assertEquals(specialized.getFinalType(), DoubleType.DOUBLE); assertTrue(specialized.isDecomposable());
InternalAggregationFunction specialized = aggregation.specialize( BoundVariables.builder() .setLongVariable("x", 17L) .setLongVariable("y", 13L) .setLongVariable("z", 30L) .build(), 2, typeRegistry, functionRegistry); assertEquals(specialized.getFinalType(), VarcharType.createVarcharType(30)); assertTrue(specialized.isDecomposable());
assertTrue(implementation.getInputParameterMetadataTypes().equals(expectedMetadataTypes)); InternalAggregationFunction specialized = aggregation1.specialize(BoundVariables.builder().build(), 1, new TypeRegistry(), null); assertEquals(specialized.getFinalType(), DoubleType.DOUBLE); assertTrue(specialized.isDecomposable());
InternalAggregationFunction specialized = aggregation.specialize(BoundVariables.builder().setTypeVariable("T", DoubleType.DOUBLE).build(), 1, typeRegistry, functionRegistry); assertEquals(specialized.getFinalType(), DoubleType.DOUBLE); assertTrue(specialized.isDecomposable());
BoundVariables boundVariables = boundVariablesBuilder.build(); if (!allTypeVariablesBound(boundVariables)) { return Optional.empty();
InternalAggregationFunction specialized = aggregation.specialize( BoundVariables.builder() .setLongVariable("x", 17L) .setLongVariable("y", 13L) .setLongVariable("z", 30L) .build(), 2, typeRegistry, functionRegistry); assertEquals(specialized.getFinalType(), VarcharType.createVarcharType(30)); assertTrue(specialized.isDecomposable());
BoundVariables boundVariables = boundVariablesBuilder.build(); if (!allTypeVariablesBound(boundVariables)) { return Optional.empty();
InternalAggregationFunction specialized = aggregation.specialize(BoundVariables.builder().setTypeVariable("T", DoubleType.DOUBLE).build(), 1, typeRegistry, functionRegistry); assertEquals(specialized.getFinalType(), DoubleType.DOUBLE); assertTrue(specialized.isDecomposable());
InternalAggregationFunction specialized = aggregation.specialize(BoundVariables.builder().setLongVariable("x", 17L).build(), 1, typeRegistry, functionRegistry); assertEquals(specialized.getFinalType(), VarcharType.createVarcharType(17)); assertTrue(specialized.isDecomposable());
BoundVariables.builder().setTypeVariable("T", DoubleType.DOUBLE).build(), 1, new TypeRegistry(),
InternalAggregationFunction specialized = aggregation.specialize(BoundVariables.builder().build(), 1, typeRegistry, functionRegistry); assertEquals(specialized.getFinalType(), DoubleType.DOUBLE); assertTrue(specialized.isDecomposable());