use of org.apache.calcite.schema.FunctionParameter in project beam by apache.
the class UdafImpl method getParameters.
@Override
public List<FunctionParameter> getParameters() {
List<FunctionParameter> para = new ArrayList<>();
para.add(new FunctionParameter() {
@Override
public int getOrdinal() {
// up to one parameter is supported in UDAF.
return 0;
}
@Override
public String getName() {
// not used as Beam SQL uses its own execution engine
return null;
}
@Override
public RelDataType getType(RelDataTypeFactory typeFactory) {
Type inputType = getInputType();
if (inputType instanceof TypeVariable) {
throw new IllegalArgumentException("Unable to infer SQL type from type variable " + inputType + ". This usually means you are trying to use a generic type whose type information " + "is not known at runtime. You can wrap your CombineFn into typed subclass" + " by 'new TypedCombineFnDelegate<...>(combineFn) {}'");
}
return CalciteUtils.sqlTypeWithAutoCast(typeFactory, inputType);
}
@Override
public boolean isOptional() {
// not used as Beam SQL uses its own execution engine
return false;
}
});
return para;
}
use of org.apache.calcite.schema.FunctionParameter in project beam by apache.
the class LazyAggregateCombineFnTest method nonparameterizedGetUdafImpl_throwsIllegalStateException.
@Test
public void nonparameterizedGetUdafImpl_throwsIllegalStateException() {
LazyAggregateCombineFn<?, ?, ?> combiner = new LazyAggregateCombineFn<>(new NonParameterizedAggregateFn());
AggregateFunction aggregateFunction = combiner.getUdafImpl();
RelDataTypeFactory typeFactory = new JavaTypeFactoryImpl(RelDataTypeSystem.DEFAULT);
exceptions.expect(IllegalStateException.class);
List<FunctionParameter> params = aggregateFunction.getParameters();
params.get(0).getType(typeFactory);
}
use of org.apache.calcite.schema.FunctionParameter in project calcite by apache.
the class CalciteCatalogReader method toOp.
/**
* Converts a function to a {@link org.apache.calcite.sql.SqlOperator}.
*
* <p>The {@code typeFactory} argument is technical debt; see [CALCITE-2082]
* Remove RelDataTypeFactory argument from SqlUserDefinedAggFunction
* constructor.
*/
private static SqlOperator toOp(RelDataTypeFactory typeFactory, SqlIdentifier name, final Function function) {
List<RelDataType> argTypes = new ArrayList<>();
List<SqlTypeFamily> typeFamilies = new ArrayList<>();
for (FunctionParameter o : function.getParameters()) {
final RelDataType type = o.getType(typeFactory);
argTypes.add(type);
typeFamilies.add(Util.first(type.getSqlTypeName().getFamily(), SqlTypeFamily.ANY));
}
final Predicate<Integer> optional = new PredicateImpl<Integer>() {
public boolean test(Integer input) {
return function.getParameters().get(input).isOptional();
}
};
final FamilyOperandTypeChecker typeChecker = OperandTypes.family(typeFamilies, optional);
final List<RelDataType> paramTypes = toSql(typeFactory, argTypes);
if (function instanceof ScalarFunction) {
return new SqlUserDefinedFunction(name, infer((ScalarFunction) function), InferTypes.explicit(argTypes), typeChecker, paramTypes, function);
} else if (function instanceof AggregateFunction) {
return new SqlUserDefinedAggFunction(name, infer((AggregateFunction) function), InferTypes.explicit(argTypes), typeChecker, (AggregateFunction) function, false, false, typeFactory);
} else if (function instanceof TableMacro) {
return new SqlUserDefinedTableMacro(name, ReturnTypes.CURSOR, InferTypes.explicit(argTypes), typeChecker, paramTypes, (TableMacro) function);
} else if (function instanceof TableFunction) {
return new SqlUserDefinedTableFunction(name, ReturnTypes.CURSOR, InferTypes.explicit(argTypes), typeChecker, paramTypes, (TableFunction) function);
} else {
throw new AssertionError("unknown function type " + function);
}
}
use of org.apache.calcite.schema.FunctionParameter in project calcite by apache.
the class SqlUserDefinedAggFunction method getParamTypes.
@Override
public List<RelDataType> getParamTypes() {
List<RelDataType> argTypes = new ArrayList<>();
for (FunctionParameter o : function.getParameters()) {
final RelDataType type = o.getType(typeFactory);
argTypes.add(type);
}
return toSql(argTypes);
}
Aggregations