This is an automated email from the ASF dual-hosted git repository.
nicholasjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-paimon.git
The following commit(s) were added to refs/heads/master by this push:
new 14cce8847 [spark] Fix PaimonParseException compatibility with spark3.3
(#2849)
14cce8847 is described below
commit 14cce88475fe21f30fa63172d17ae0fda760146c
Author: Zouxxyy <[email protected]>
AuthorDate: Tue Feb 6 14:01:18 2024 +0800
[spark] Fix PaimonParseException compatibility with spark3.3 (#2849)
---
.../paimon/spark/procedure/ProcedureTest.scala} | 17 +----------------
.../extensions/PaimonSparkSqlExtensionsParser.scala | 19 +++++--------------
.../extensions/PaimonSqlExtensionsAstBuilder.scala | 2 --
.../paimon/spark/procedure/ProcedureTestBase.scala | 14 +++++++++++++-
4 files changed, 19 insertions(+), 33 deletions(-)
diff --git
a/paimon-spark/paimon-spark-common/src/test/scala/org/apache/paimon/spark/procedure/ProcedureTestBase.scala
b/paimon-spark/paimon-spark-3.4/src/test/scala/org/apache/paimon/spark/procedure/ProcedureTest.scala
similarity index 60%
copy from
paimon-spark/paimon-spark-common/src/test/scala/org/apache/paimon/spark/procedure/ProcedureTestBase.scala
copy to
paimon-spark/paimon-spark-3.4/src/test/scala/org/apache/paimon/spark/procedure/ProcedureTest.scala
index 9dd7124b9..2d582c5ac 100644
---
a/paimon-spark/paimon-spark-common/src/test/scala/org/apache/paimon/spark/procedure/ProcedureTestBase.scala
+++
b/paimon-spark/paimon-spark-3.4/src/test/scala/org/apache/paimon/spark/procedure/ProcedureTest.scala
@@ -17,19 +17,4 @@
*/
package org.apache.paimon.spark.procedure
-import org.apache.paimon.spark.PaimonSparkTestBase
-import org.apache.paimon.spark.analysis.NoSuchProcedureException
-
-import org.assertj.core.api.Assertions.assertThatThrownBy
-
-abstract class ProcedureTestBase extends PaimonSparkTestBase {
-
- test(s"test call unknown procedure") {
- spark.sql(s"""
- |CREATE TABLE T (id INT, name STRING, dt STRING)
- |""".stripMargin)
-
- assertThatThrownBy(() => spark.sql("CALL unknown_procedure(table =>
'test.T')"))
- .isInstanceOf(classOf[NoSuchProcedureException])
- }
-}
+class ProcedureTest extends ProcedureTestBase {}
diff --git
a/paimon-spark/paimon-spark-common/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/PaimonSparkSqlExtensionsParser.scala
b/paimon-spark/paimon-spark-common/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/PaimonSparkSqlExtensionsParser.scala
index f42cbab55..188917330 100644
---
a/paimon-spark/paimon-spark-common/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/PaimonSparkSqlExtensionsParser.scala
+++
b/paimon-spark/paimon-spark-common/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/PaimonSparkSqlExtensionsParser.scala
@@ -28,7 +28,6 @@ import org.apache.spark.sql.catalyst.expressions.Expression
import org.apache.spark.sql.catalyst.parser.{ParseException, ParserInterface}
import
org.apache.spark.sql.catalyst.parser.extensions.PaimonSqlExtensionsParser.{NonReservedContext,
QuotedIdentifierContext}
import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan
-import org.apache.spark.sql.catalyst.trees.Origin
import org.apache.spark.sql.internal.VariableSubstitution
import org.apache.spark.sql.types.{DataType, StructType}
@@ -220,23 +219,15 @@ case object PaimonParseErrorListener extends
BaseErrorListener {
}
/**
- * Copied from Apache Spark A [[ParseException]] is an [[AnalysisException]]
that is thrown during
- * the parse process. It contains fields and an extended error message that
make reporting and
- * diagnosing errors easier.
+ * Copied from Apache Spark [[ParseException]], it contains fields and an
extended error message
+ * that make reporting and diagnosing errors easier.
*/
class PaimonParseException(
val command: Option[String],
message: String,
- val start: Origin,
- val stop: Origin)
- extends AnalysisException(message, start.line, start.startPosition) {
-
- def this(message: String, ctx: ParserRuleContext) =
- this(
- Option(PaimonParserUtils.command(ctx)),
- message,
- PaimonParserUtils.position(ctx.getStart),
- PaimonParserUtils.position(ctx.getStop))
+ start: Origin,
+ stop: Origin)
+ extends Exception {
override def getMessage: String = {
val builder = new StringBuilder
diff --git
a/paimon-spark/paimon-spark-common/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/PaimonSqlExtensionsAstBuilder.scala
b/paimon-spark/paimon-spark-common/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/PaimonSqlExtensionsAstBuilder.scala
index bb8fd9a33..ff6b15d2c 100644
---
a/paimon-spark/paimon-spark-common/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/PaimonSqlExtensionsAstBuilder.scala
+++
b/paimon-spark/paimon-spark-common/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/PaimonSqlExtensionsAstBuilder.scala
@@ -23,14 +23,12 @@ import
org.apache.paimon.spark.catalyst.plans.logical.{PaimonCallArgument, Paimo
import org.antlr.v4.runtime._
import org.antlr.v4.runtime.misc.Interval
import org.antlr.v4.runtime.tree.{ParseTree, TerminalNode}
-import org.apache.spark.QueryContext
import org.apache.spark.internal.Logging
import org.apache.spark.sql.catalyst.expressions.Expression
import org.apache.spark.sql.catalyst.parser.ParserInterface
import
org.apache.spark.sql.catalyst.parser.extensions.PaimonParserUtils.withOrigin
import
org.apache.spark.sql.catalyst.parser.extensions.PaimonSqlExtensionsParser._
import org.apache.spark.sql.catalyst.plans.logical._
-import org.apache.spark.sql.catalyst.trees.SQLQueryContext
import scala.collection.JavaConverters._
diff --git
a/paimon-spark/paimon-spark-common/src/test/scala/org/apache/paimon/spark/procedure/ProcedureTestBase.scala
b/paimon-spark/paimon-spark-common/src/test/scala/org/apache/paimon/spark/procedure/ProcedureTestBase.scala
index 9dd7124b9..8d1717cb0 100644
---
a/paimon-spark/paimon-spark-common/src/test/scala/org/apache/paimon/spark/procedure/ProcedureTestBase.scala
+++
b/paimon-spark/paimon-spark-common/src/test/scala/org/apache/paimon/spark/procedure/ProcedureTestBase.scala
@@ -20,6 +20,7 @@ package org.apache.paimon.spark.procedure
import org.apache.paimon.spark.PaimonSparkTestBase
import org.apache.paimon.spark.analysis.NoSuchProcedureException
+import org.apache.spark.sql.catalyst.parser.extensions.PaimonParseException
import org.assertj.core.api.Assertions.assertThatThrownBy
abstract class ProcedureTestBase extends PaimonSparkTestBase {
@@ -29,7 +30,18 @@ abstract class ProcedureTestBase extends PaimonSparkTestBase
{
|CREATE TABLE T (id INT, name STRING, dt STRING)
|""".stripMargin)
- assertThatThrownBy(() => spark.sql("CALL unknown_procedure(table =>
'test.T')"))
+ assertThatThrownBy(() => spark.sql("CALL sys.unknown_procedure(table =>
'test.T')"))
.isInstanceOf(classOf[NoSuchProcedureException])
}
+
+ test(s"test parse exception") {
+ spark.sql(s"""
+ |CREATE TABLE T (id INT, name STRING, dt STRING)
+ |""".stripMargin)
+
+ // Using Chinese comma to simulate parser exception
+ assertThatThrownBy(
+ () => spark.sql("CALL sys.expire_snapshots(table => 'test.T',retain_max
=> 1)"))
+ .isInstanceOf(classOf[PaimonParseException])
+ }
}