use of io.prestosql.spi.function.ExternalFunctionInfo in project hetu-core by openlookeng.
the class TestMySqlRegisterRemoteUdf method testDefaults.
@Test
public void testDefaults() {
MysqlExternalFunctionHub externalFunctionHub = new MysqlExternalFunctionHub(new BaseJdbcConfig());
Set<ExternalFunctionInfo> externalFunctionInfo = externalFunctionHub.getExternalFunctions();
assertTrue(externalFunctionInfo.size() > 0);
List<ExternalFunctionInfo> functionList = externalFunctionInfo.stream().filter(x -> x.getFunctionName().get().equals("lower")).collect(Collectors.toList());
assertEquals(functionList.size(), 1);
ExternalFunctionInfo functionInfo = functionList.get(0);
assertEquals(functionInfo.getInputArgs().get(0), StandardTypes.VARCHAR);
assertEquals(functionInfo.getReturnType().get(), StandardTypes.VARCHAR);
assertTrue(functionInfo.isDeterministic());
assertFalse(functionInfo.isCalledOnNullInput());
}
use of io.prestosql.spi.function.ExternalFunctionInfo in project hetu-core by openlookeng.
the class ExternalFunctionsParser method parseExternalFunction.
public static Optional<SqlInvokedFunction> parseExternalFunction(ExternalFunctionInfo externalFunctionInfo, CatalogSchemaName catalogSchemaName, RoutineCharacteristics.Language language) {
Optional<String> functionName = externalFunctionInfo.getFunctionName();
Optional<String> description = externalFunctionInfo.getDescription();
List<String> inputArgs = externalFunctionInfo.getInputArgs();
Optional<String> returnType = externalFunctionInfo.getReturnType();
boolean deterministic = externalFunctionInfo.isDeterministic();
boolean calledOnNullInput = externalFunctionInfo.isCalledOnNullInput();
if (functionName.isPresent() && returnType.isPresent()) {
QualifiedObjectName qualifiedObjectName = new QualifiedObjectName(catalogSchemaName.getCatalogName(), catalogSchemaName.getSchemaName(), functionName.get());
List<Parameter> parameters = inputArgs.stream().map(str -> {
checkState(SUPPORTED_TYPE.contains(str), format("external function do not supported type: %s", str));
if (str.equals(StandardTypes.DECIMAL)) {
return new Parameter(getRandomString((inputArgs.size() / ALPHABET.length() + 1), ALPHABET), parseTypeSignature(str + "(p, s)", ImmutableSet.of("p", "s")));
} else if (str.equals(StandardTypes.CHAR) || str.equals(StandardTypes.VARCHAR)) {
return new Parameter(getRandomString((inputArgs.size() / ALPHABET.length() + 1), ALPHABET), parseTypeSignature(str + "(x)", ImmutableSet.of("x")));
} else {
return new Parameter(getRandomString((inputArgs.size() / ALPHABET.length() + 1), ALPHABET), parseTypeSignature(str));
}
}).collect(toImmutableList());
TypeSignature reType = parseTypeSignature(returnType.get());
String deter = deterministic ? "DETERMINISTIC" : "NOT_DETERMINISTIC";
String nullCallClause = calledOnNullInput ? "CALLED_ON_NULL_INPUT" : "RETURNS_NULL_ON_NULL_INPUT";
RoutineCharacteristics routineCharacteristics = RoutineCharacteristics.builder().setLanguage(new RoutineCharacteristics.Language(language.getLanguage())).setDeterminism(RoutineCharacteristics.Determinism.valueOf(deter)).setNullCallClause(RoutineCharacteristics.NullCallClause.valueOf(nullCallClause)).build();
SqlInvokedFunction sqlInvokedFunction = new SqlInvokedFunction(qualifiedObjectName, parameters, reType, description.orElse(""), routineCharacteristics, EXTERNAL_FUNCTION_BODY, ImmutableMap.of(), Optional.empty());
return Optional.of(sqlInvokedFunction);
}
return Optional.empty();
}
use of io.prestosql.spi.function.ExternalFunctionInfo in project hetu-core by openlookeng.
the class FunctionExtractor method extractExternalFunctions.
public static Set<SqlInvokedFunction> extractExternalFunctions(ExternalFunctionHub externalFunctionHub) {
RoutineCharacteristics.Language language = externalFunctionHub.getExternalFunctionLanguage();
Optional<CatalogSchemaName> catalogSchemaName = externalFunctionHub.getExternalFunctionCatalogSchemaName();
if (!catalogSchemaName.isPresent()) {
return Collections.emptySet();
}
ImmutableSet.Builder<SqlInvokedFunction> builder = new ImmutableSet.Builder<>();
for (ExternalFunctionInfo externalFunctionInfo : externalFunctionHub.getExternalFunctions()) {
Optional<SqlInvokedFunction> sqlInvokedFunctionOptional = ExternalFunctionsParser.parseExternalFunction(externalFunctionInfo, catalogSchemaName.get(), language);
sqlInvokedFunctionOptional.ifPresent(builder::add);
}
return builder.build();
}
use of io.prestosql.spi.function.ExternalFunctionInfo in project hetu-core by openlookeng.
the class TestMySqlRegisterRemoteUdf method testMultiParamsFunctions.
// test func defination with more than one params
@Test
public void testMultiParamsFunctions() {
MysqlExternalFunctionHub externalFunctionHub = new MysqlExternalFunctionHub(new BaseJdbcConfig());
Set<ExternalFunctionInfo> externalFunctionInfo = externalFunctionHub.getExternalFunctions();
assertTrue(externalFunctionInfo.size() > 0);
List<ExternalFunctionInfo> functionList = externalFunctionInfo.stream().filter(x -> x.getFunctionName().get().equals("abs")).collect(Collectors.toList());
assertEquals(functionList.size(), 2);
}
use of io.prestosql.spi.function.ExternalFunctionInfo in project hetu-core by openlookeng.
the class TestMySqlRegisterRemoteUdf method testOverloadFunctions.
// test over load function register
@Test
public void testOverloadFunctions() {
MysqlExternalFunctionHub externalFunctionHub = new MysqlExternalFunctionHub(new BaseJdbcConfig());
Set<ExternalFunctionInfo> externalFunctionInfo = externalFunctionHub.getExternalFunctions();
assertTrue(externalFunctionInfo.size() > 0);
List<ExternalFunctionInfo> functionList = externalFunctionInfo.stream().filter(x -> x.getFunctionName().get().equals("timestamp")).collect(Collectors.toList());
assertEquals(functionList.size(), 1);
ExternalFunctionInfo functionInfo = functionList.get(0);
List<String> inputArgs = functionInfo.getInputArgs();
assertEquals(inputArgs.size(), 2);
assertEquals(inputArgs.get(0), StandardTypes.TIMESTAMP);
assertEquals(inputArgs.get(1), StandardTypes.TIME);
assertEquals(functionInfo.getReturnType().get(), StandardTypes.TIMESTAMP);
assertTrue(functionInfo.isDeterministic());
assertFalse(functionInfo.isCalledOnNullInput());
}
Aggregations