Skip to content

Commit d6a1294

Browse files
pdabre12Pratik Joseph Dabre
authored and
Pratik Joseph Dabre
committed
Use built-in functions in function invoker
1 parent b175123 commit d6a1294

File tree

4 files changed

+9
-4
lines changed

4 files changed

+9
-4
lines changed

presto-function-namespace-managers-common/src/main/java/com/facebook/presto/functionNamespace/AbstractSqlInvokedFunctionNamespaceManager.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,7 @@ protected ScalarFunctionImplementation sqlInvokedFunctionToImplementation(SqlInv
323323
FunctionImplementationType implementationType = getFunctionImplementationType(function);
324324
switch (implementationType) {
325325
case SQL:
326+
case CPP:
326327
return new SqlInvokedScalarFunctionImplementation(function.getBody());
327328
case THRIFT:
328329
case GRPC:
@@ -332,8 +333,6 @@ protected ScalarFunctionImplementation sqlInvokedFunctionToImplementation(SqlInv
332333
case JAVA:
333334
throw new IllegalStateException(
334335
format("SqlInvokedFunction %s has BUILTIN implementation type but %s cannot manage BUILTIN functions", function.getSignature().getName(), this.getClass()));
335-
case CPP:
336-
throw new IllegalStateException("Presto coordinator can not resolve implementation of CPP UDF functions");
337336
default:
338337
throw new IllegalStateException(format("Unknown function implementation type: %s", implementationType));
339338
}

presto-main/src/main/java/com/facebook/presto/sql/planner/LiteralInterpreter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
*/
1414
package com.facebook.presto.sql.planner;
1515

16+
import com.facebook.presto.common.QualifiedObjectName;
1617
import com.facebook.presto.common.function.SqlFunctionProperties;
1718
import com.facebook.presto.common.type.BigintType;
1819
import com.facebook.presto.common.type.BooleanType;
@@ -73,6 +74,7 @@
7374
import static com.facebook.presto.common.type.JsonType.JSON;
7475
import static com.facebook.presto.common.type.TypeSignature.parseTypeSignature;
7576
import static com.facebook.presto.common.type.VarcharType.VARCHAR;
77+
import static com.facebook.presto.metadata.BuiltInTypeAndFunctionNamespaceManager.JAVA_BUILTIN_NAMESPACE;
7678
import static com.facebook.presto.metadata.CastType.CAST;
7779
import static com.facebook.presto.spi.StandardErrorCode.GENERIC_USER_ERROR;
7880
import static com.facebook.presto.sql.analyzer.SemanticErrorCode.INVALID_LITERAL;
@@ -252,7 +254,7 @@ protected Object visitGenericLiteral(GenericLiteral node, ConnectorSession sessi
252254
}
253255

254256
if (JSON.equals(type)) {
255-
FunctionHandle functionHandle = metadata.getFunctionAndTypeManager().lookupFunction("json_parse", fromTypes(VARCHAR));
257+
FunctionHandle functionHandle = metadata.getFunctionAndTypeManager().lookupFunction(QualifiedObjectName.valueOf(JAVA_BUILTIN_NAMESPACE, "json_parse"), fromTypes(VARCHAR));
256258
return functionInvoker.invoke(functionHandle, session.getSqlFunctionProperties(), ImmutableList.of(utf8Slice(node.getValue())));
257259
}
258260

presto-main/src/main/java/com/facebook/presto/sql/planner/RowExpressionInterpreter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
import com.facebook.airlift.json.JsonCodec;
1717
import com.facebook.presto.client.FailureInfo;
18+
import com.facebook.presto.common.QualifiedObjectName;
1819
import com.facebook.presto.common.block.BlockBuilder;
1920
import com.facebook.presto.common.block.RowBlockBuilder;
2021
import com.facebook.presto.common.function.OperatorType;
@@ -71,6 +72,7 @@
7172
import static com.facebook.presto.common.type.VarcharType.VARCHAR;
7273
import static com.facebook.presto.common.type.VarcharType.createVarcharType;
7374
import static com.facebook.presto.expressions.DynamicFilters.isDynamicFilter;
75+
import static com.facebook.presto.metadata.BuiltInTypeAndFunctionNamespaceManager.JAVA_BUILTIN_NAMESPACE;
7476
import static com.facebook.presto.metadata.CastType.CAST;
7577
import static com.facebook.presto.metadata.CastType.JSON_TO_ARRAY_CAST;
7678
import static com.facebook.presto.metadata.CastType.JSON_TO_MAP_CAST;
@@ -721,7 +723,7 @@ private RowExpression createFailureFunction(RuntimeException exception, Type typ
721723
requireNonNull(exception, "Exception is null");
722724

723725
String failureInfo = JsonCodec.jsonCodec(FailureInfo.class).toJson(Failures.toFailure(exception).toFailureInfo());
724-
FunctionHandle jsonParse = functionAndTypeManager.lookupFunction("json_parse", fromTypes(VARCHAR));
726+
FunctionHandle jsonParse = functionAndTypeManager.lookupFunction(QualifiedObjectName.valueOf(JAVA_BUILTIN_NAMESPACE, "json_parse"), fromTypes(VARCHAR));
725727
Object json = functionInvoker.invoke(jsonParse, session.getSqlFunctionProperties(), utf8Slice(failureInfo));
726728
FunctionHandle cast = functionAndTypeManager.lookupCast(CAST, UNKNOWN, type);
727729
if (exception instanceof PrestoException) {

presto-native-sidecar-plugin/src/test/java/com/facebook/presto/sidecar/TestNativeSidecarPlugin.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,8 @@ public void testWindowFunctions()
184184
assertQuery("SELECT min(orderkey) OVER (PARTITION BY orderdate ORDER BY orderdate, totalprice) FROM orders");
185185
assertQuery("SELECT sum(rn) FROM (SELECT row_number() over() rn, * from orders) WHERE rn = 10");
186186
assertQuery("SELECT * FROM (SELECT row_number() over(partition by orderstatus order by orderkey) rn, * from orders) WHERE rn = 1");
187+
assertQuery("SELECT first_value(orderdate) OVER (PARTITION BY orderkey ORDER BY totalprice RANGE BETWEEN 5 PRECEDING AND CURRENT ROW) FROM orders");
188+
assertQuery("SELECT lead(orderkey, 5) OVER (PARTITION BY custkey, orderdate ORDER BY totalprice desc ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) FROM orders");
187189
}
188190

189191
@Test

0 commit comments

Comments
 (0)