use of org.apache.flink.table.functions.FunctionDefinition in project flink by apache.
the class FilterUtils method binaryFilterApplies.
@SuppressWarnings({ "unchecked", "rawtypes" })
private static boolean binaryFilterApplies(CallExpression binExpr, Function<String, Comparable<?>> getter) {
List<Expression> children = binExpr.getChildren();
Preconditions.checkArgument(children.size() == 2);
Comparable lhsValue = getValue(children.get(0), getter);
Comparable rhsValue = getValue(children.get(1), getter);
FunctionDefinition functionDefinition = binExpr.getFunctionDefinition();
if (BuiltInFunctionDefinitions.GREATER_THAN.equals(functionDefinition)) {
return lhsValue.compareTo(rhsValue) > 0;
} else if (BuiltInFunctionDefinitions.LESS_THAN.equals(functionDefinition)) {
return lhsValue.compareTo(rhsValue) < 0;
} else if (BuiltInFunctionDefinitions.GREATER_THAN_OR_EQUAL.equals(functionDefinition)) {
return lhsValue.compareTo(rhsValue) >= 0;
} else if (BuiltInFunctionDefinitions.LESS_THAN_OR_EQUAL.equals(functionDefinition)) {
return lhsValue.compareTo(rhsValue) <= 0;
} else if (BuiltInFunctionDefinitions.EQUALS.equals(functionDefinition)) {
return lhsValue.compareTo(rhsValue) == 0;
} else if (BuiltInFunctionDefinitions.NOT_EQUALS.equals(functionDefinition)) {
return lhsValue.compareTo(rhsValue) != 0;
} else {
throw new UnsupportedOperationException("Unsupported operator: " + functionDefinition);
}
}
use of org.apache.flink.table.functions.FunctionDefinition in project flink by apache.
the class FunctionCatalogOperatorTable method convertToSqlFunction.
private Optional<SqlFunction> convertToSqlFunction(@Nullable SqlFunctionCategory category, ContextResolvedFunction resolvedFunction) {
final FunctionDefinition definition = resolvedFunction.getDefinition();
final FunctionIdentifier identifier = resolvedFunction.getIdentifier().orElse(null);
// legacy
if (definition instanceof AggregateFunctionDefinition) {
AggregateFunctionDefinition def = (AggregateFunctionDefinition) definition;
if (isHiveFunc(def.getAggregateFunction())) {
return Optional.of(new HiveAggSqlFunction(identifier, def.getAggregateFunction(), typeFactory));
} else {
return convertAggregateFunction(identifier, (AggregateFunctionDefinition) definition);
}
} else if (definition instanceof ScalarFunctionDefinition) {
ScalarFunctionDefinition def = (ScalarFunctionDefinition) definition;
return convertScalarFunction(identifier, def);
} else if (definition instanceof TableFunctionDefinition && category != null && category.isTableFunction()) {
TableFunctionDefinition def = (TableFunctionDefinition) definition;
if (isHiveFunc(def.getTableFunction())) {
DataType returnType = fromLegacyInfoToDataType(new GenericTypeInfo<>(Row.class));
return Optional.of(new HiveTableSqlFunction(identifier, def.getTableFunction(), returnType, typeFactory, new DeferredTypeFlinkTableFunction(def.getTableFunction(), returnType), HiveTableSqlFunction.operandTypeChecker(identifier.toString(), def.getTableFunction())));
} else {
return convertTableFunction(identifier, (TableFunctionDefinition) definition);
}
}
// new stack
return convertToBridgingSqlFunction(category, resolvedFunction);
}
use of org.apache.flink.table.functions.FunctionDefinition in project flink by apache.
the class FunctionCatalogOperatorTable method convertToBridgingSqlFunction.
private Optional<SqlFunction> convertToBridgingSqlFunction(@Nullable SqlFunctionCategory category, ContextResolvedFunction resolvedFunction) {
final FunctionDefinition definition = resolvedFunction.getDefinition();
if (!verifyFunctionKind(category, resolvedFunction)) {
return Optional.empty();
}
final TypeInference typeInference;
try {
typeInference = definition.getTypeInference(dataTypeFactory);
} catch (Throwable t) {
throw new ValidationException(String.format("An error occurred in the type inference logic of function '%s'.", resolvedFunction), t);
}
if (typeInference.getOutputTypeStrategy() == TypeStrategies.MISSING) {
return Optional.empty();
}
final SqlFunction function;
if (definition.getKind() == FunctionKind.AGGREGATE || definition.getKind() == FunctionKind.TABLE_AGGREGATE) {
function = BridgingSqlAggFunction.of(dataTypeFactory, typeFactory, SqlKind.OTHER_FUNCTION, resolvedFunction, typeInference);
} else {
function = BridgingSqlFunction.of(dataTypeFactory, typeFactory, SqlKind.OTHER_FUNCTION, resolvedFunction, typeInference);
}
return Optional.of(function);
}
Aggregations