This is an automated email from the ASF dual-hosted git repository.
szehon-ho pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg.git
The following commit(s) were added to refs/heads/main by this push:
new b9e84f0e26 Spark 4.2: Forward parseRoutineParam and parseQuery to the
delegate parser (#18702)
b9e84f0e26 is described below
commit b9e84f0e261382a0c5ab6d56ffe6e43858e8a442
Author: Anurag Mantripragada <[email protected]>
AuthorDate: Thu Oct 29 15:57:21 2026 -0700
Spark 4.2: Forward parseRoutineParam and parseQuery to the delegate parser
(#18702)
---
.../IcebergSparkSqlExtensionsParser.scala | 7 +++---
.../apache/iceberg/spark/TestExtendedParser.java | 27 ++++++++++++++++++++++
2 files changed, 31 insertions(+), 3 deletions(-)
diff --git
a/spark/v4.2/spark-extensions/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/IcebergSparkSqlExtensionsParser.scala
b/spark/v4.2/spark-extensions/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/IcebergSparkSqlExtensionsParser.scala
index 7c737f0513..55aeadc52b 100644
---
a/spark/v4.2/spark-extensions/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/IcebergSparkSqlExtensionsParser.scala
+++
b/spark/v4.2/spark-extensions/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/IcebergSparkSqlExtensionsParser.scala
@@ -110,8 +110,9 @@ class IcebergSparkSqlExtensionsParser(delegate:
ParserInterface)
}.asJava
}
- override def parseRoutineParam(sqlText: String): StructType =
- throw new UnsupportedOperationException()
+ override def parseRoutineParam(sqlText: String): StructType = {
+ delegate.parseRoutineParam(sqlText)
+ }
/**
* Parse a string to a LogicalPlan.
@@ -226,7 +227,7 @@ class IcebergSparkSqlExtensionsParser(delegate:
ParserInterface)
}
override def parseQuery(sqlText: String): LogicalPlan = {
- parsePlan(sqlText)
+ delegate.parseQuery(sqlText)
}
}
diff --git
a/spark/v4.2/spark-extensions/src/test/java/org/apache/iceberg/spark/TestExtendedParser.java
b/spark/v4.2/spark-extensions/src/test/java/org/apache/iceberg/spark/TestExtendedParser.java
index 36e7314473..c3791ac815 100644
---
a/spark/v4.2/spark-extensions/src/test/java/org/apache/iceberg/spark/TestExtendedParser.java
+++
b/spark/v4.2/spark-extensions/src/test/java/org/apache/iceberg/spark/TestExtendedParser.java
@@ -38,6 +38,7 @@ import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.catalyst.parser.AbstractSqlParser;
import org.apache.spark.sql.catalyst.parser.AstBuilder;
import org.apache.spark.sql.catalyst.parser.ParameterContext;
+import org.apache.spark.sql.catalyst.parser.ParseException;
import org.apache.spark.sql.catalyst.parser.ParserInterface;
import
org.apache.spark.sql.catalyst.parser.extensions.IcebergSparkSqlExtensionsParser;
import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan;
@@ -232,6 +233,32 @@ public class TestExtendedParser {
assertThat(rows.get(0).get(0)).isEqualTo(42);
}
+ @Test
+ public void parseQueryRejectsNonQuery() {
+ IcebergSparkSqlExtensionsParser parser = new
IcebergSparkSqlExtensionsParser(originalParser);
+
+ assertThatThrownBy(() -> parser.parseQuery("DROP VIEW v"))
+ .isInstanceOf(ParseException.class)
+ .hasMessageContaining("PARSE_SYNTAX_ERROR");
+ }
+
+ @Test
+ public void createSqlFunctionWithParameters() throws Exception {
+ IcebergSparkSqlExtensionsParser parser = new
IcebergSparkSqlExtensionsParser(originalParser);
+ setSessionStateParser(spark.sessionState(), parser);
+
+ try {
+ spark.sql("CREATE TEMPORARY FUNCTION f(a INT) RETURNS INT RETURN a");
+
+ List<Row> rows = spark.sql("SELECT f(1)").collectAsList();
+
+ assertThat(rows).hasSize(1);
+ assertThat(rows.get(0).get(0)).isEqualTo(1);
+ } finally {
+ spark.sql("DROP TEMPORARY FUNCTION IF EXISTS f");
+ }
+ }
+
private static void setSessionStateParser(Object sessionState,
ParserInterface parser)
throws Exception {
Class<?> clazz = sessionState.getClass();