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();

Reply via email to