diff --git a/presto-main/src/main/java/com/facebook/presto/execution/ParameterExtractor.java b/presto-main/src/main/java/com/facebook/presto/execution/ParameterExtractor.java index 35610f5e4014c..8bf23c065ace7 100644 --- a/presto-main/src/main/java/com/facebook/presto/execution/ParameterExtractor.java +++ b/presto-main/src/main/java/com/facebook/presto/execution/ParameterExtractor.java @@ -14,6 +14,8 @@ package com.facebook.presto.execution; import com.facebook.presto.sql.tree.DefaultTraversalVisitor; +import com.facebook.presto.sql.tree.LambdaArgumentDeclaration; +import com.facebook.presto.sql.tree.LambdaExpression; import com.facebook.presto.sql.tree.Parameter; import com.facebook.presto.sql.tree.Statement; @@ -54,5 +56,15 @@ public Void visitParameter(Parameter node, Void context) parameters.add(node); return null; } + + @Override + protected Void visitLambdaExpression(LambdaExpression node, Void context) + { + process(node.getBody(), context); + for (LambdaArgumentDeclaration argument : node.getArguments()) { + process(argument, context); + } + return null; + } } } diff --git a/presto-spark-base/src/test/java/com/facebook/presto/spark/TestPrestoSparkAbstractTestQueries.java b/presto-spark-base/src/test/java/com/facebook/presto/spark/TestPrestoSparkAbstractTestQueries.java index 2a6ddef0ce594..3bfcc7b23f728 100644 --- a/presto-spark-base/src/test/java/com/facebook/presto/spark/TestPrestoSparkAbstractTestQueries.java +++ b/presto-spark-base/src/test/java/com/facebook/presto/spark/TestPrestoSparkAbstractTestQueries.java @@ -174,6 +174,12 @@ public void testPreparedStatementWithSubqueries() // prepared statement is not supported by Presto on Spark } + @Override + public void testExecuteWithParametersInLambda() + { + // prepared statement is not supported by Presto on Spark + } + @Override public void testExplainDdl() { diff --git a/presto-tests/src/main/java/com/facebook/presto/tests/AbstractTestQueries.java b/presto-tests/src/main/java/com/facebook/presto/tests/AbstractTestQueries.java index a58b684c4d9ad..5386fff37b5e2 100644 --- a/presto-tests/src/main/java/com/facebook/presto/tests/AbstractTestQueries.java +++ b/presto-tests/src/main/java/com/facebook/presto/tests/AbstractTestQueries.java @@ -4870,6 +4870,17 @@ public void testExecuteUsingWithSubquery() "SELECT 10 in (SELECT orderkey FROM orders)"); } + @Test + public void testExecuteWithParametersInLambda() + { + String query = "SELECT filter(array[1, 2, 3], x -> x > ?)"; + Session session = Session.builder(getSession()) + .addPreparedStatement("my_query", query) + .build(); + + assertQuery(session, "EXECUTE my_query USING 2", "SELECT array[3]"); + } + @Test public void testExecuteWithParametersInGroupBy() { @@ -5725,9 +5736,9 @@ public void testMapUnionSumOverflow() { assertQueryFails( "select y, map_union_sum(x) from (select 1 y, map(array['x', 'z', 'y'], cast(array[null,30,100] as array)) x " + - "union all select 1 y, map(array['x', 'y'], cast(array[1,100] as array))x) group by y", ".*Value 200 exceeds MAX_BYTE.*"); + "union all select 1 y, map(array['x', 'y'], cast(array[1,100] as array))x) group by y", ".*Value 200 exceeds MAX_BYTE.*"); assertQueryFails( "select y, map_union_sum(x) from (select 1 y, map(array['x', 'z', 'y'], cast(array[null,30, 32760] as array)) x " + - "union all select 1 y, map(array['x', 'y'], cast(array[1,100] as array))x) group by y", ".*Value 32860 exceeds MAX_SHORT.*"); + "union all select 1 y, map(array['x', 'y'], cast(array[1,100] as array))x) group by y", ".*Value 32860 exceeds MAX_SHORT.*"); } }