@Test public void testResolveFunctionWithVariableArity() { assertThatResolveFunction() .among( functionSignature("double", "double", "double"), functionSignature("decimal(p,s)").setVariableArity(true)) .forParameters("bigint", "bigint", "bigint") .returns(functionSignature("decimal(19,0)", "decimal(19,0)", "decimal(19,0)")); assertThatResolveFunction() .among( functionSignature("double", "double", "double"), functionSignature("bigint").setVariableArity(true)) .forParameters("bigint", "bigint", "bigint") .returns(functionSignature("bigint", "bigint", "bigint")); }
@Test public void testResolveFunctionWithVariableArity() { assertThatResolveFunction() .among( functionSignature("double", "double", "double"), functionSignature("decimal(p,s)").setVariableArity(true)) .forParameters("bigint", "bigint", "bigint") .returns(functionSignature("decimal(19,0)", "decimal(19,0)", "decimal(19,0)")); assertThatResolveFunction() .among( functionSignature("double", "double", "double"), functionSignature("bigint").setVariableArity(true)) .forParameters("bigint", "bigint", "bigint") .returns(functionSignature("bigint", "bigint", "bigint")); }
@Test public void testVarArgs() { Signature variableArityFunction = functionSignature() .returnType(parseTypeSignature(StandardTypes.BOOLEAN)) .argumentTypes(parseTypeSignature("T")) .typeVariableConstraints(ImmutableList.of(typeVariable("T"))) .setVariableArity(true) .build(); assertThat(variableArityFunction) .boundTo("bigint") .produces(new BoundVariables( ImmutableMap.of("T", type("bigint")), ImmutableMap.of())); assertThat(variableArityFunction) .boundTo("varchar") .produces(new BoundVariables( ImmutableMap.of("T", type("varchar")), ImmutableMap.of())); assertThat(variableArityFunction) .boundTo("bigint", "bigint") .produces(new BoundVariables( ImmutableMap.of("T", type("bigint")), ImmutableMap.of())); assertThat(variableArityFunction) .boundTo("bigint", "varchar") .withCoercion() .fails(); }
@Test public void testVarArgs() { Signature variableArityFunction = functionSignature() .returnType(parseTypeSignature(StandardTypes.BOOLEAN)) .argumentTypes(parseTypeSignature("T")) .typeVariableConstraints(ImmutableList.of(typeVariable("T"))) .setVariableArity(true) .build(); assertThat(variableArityFunction) .boundTo("bigint") .produces(new BoundVariables( ImmutableMap.of("T", type("bigint")), ImmutableMap.of())); assertThat(variableArityFunction) .boundTo("varchar") .produces(new BoundVariables( ImmutableMap.of("T", type("varchar")), ImmutableMap.of())); assertThat(variableArityFunction) .boundTo("bigint", "bigint") .produces(new BoundVariables( ImmutableMap.of("T", type("bigint")), ImmutableMap.of())); assertThat(variableArityFunction) .boundTo("bigint", "varchar") .withCoercion() .fails(); }
.argumentTypes(parseTypeSignature("T"), parseTypeSignature("function(T, T)")) .typeVariableConstraints(typeVariable("T")) .setVariableArity(true) .build(); assertThat(varargApply)
.argumentTypes(parseTypeSignature("T"), parseTypeSignature("function(T, T)")) .typeVariableConstraints(typeVariable("T")) .setVariableArity(true) .build(); assertThat(varargApply)