[HUDI-4309] Spark3.2 custom parser should not throw exception (#5947)
This commit is contained in:
@@ -238,4 +238,16 @@ class TestTimeTravelTable extends HoodieSparkSqlTestBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test("Test Unsupported syntax can be parsed") {
|
||||||
|
if (HoodieSparkUtils.gteqSpark3_2) {
|
||||||
|
checkAnswer("select 1 distribute by 1")(Seq(1))
|
||||||
|
withTempDir { dir =>
|
||||||
|
val path = dir.toURI.getPath
|
||||||
|
spark.sql(s"insert overwrite local directory '$path' using parquet select 1")
|
||||||
|
// Requires enable hive support, so didn't test it
|
||||||
|
// spark.sql(s"insert overwrite local directory '$path' stored as orc select 1")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ import org.apache.spark.sql.catalyst.{FunctionIdentifier, TableIdentifier}
|
|||||||
import org.apache.spark.sql.types._
|
import org.apache.spark.sql.types._
|
||||||
import org.apache.spark.sql.{AnalysisException, SparkSession}
|
import org.apache.spark.sql.{AnalysisException, SparkSession}
|
||||||
|
|
||||||
|
import scala.util.control.NonFatal
|
||||||
|
|
||||||
class HoodieSpark3_2ExtendedSqlParser(session: SparkSession, delegate: ParserInterface)
|
class HoodieSpark3_2ExtendedSqlParser(session: SparkSession, delegate: ParserInterface)
|
||||||
extends ParserInterface with Logging {
|
extends ParserInterface with Logging {
|
||||||
|
|
||||||
@@ -39,10 +41,15 @@ class HoodieSpark3_2ExtendedSqlParser(session: SparkSession, delegate: ParserInt
|
|||||||
private lazy val builder = new HoodieSpark3_2ExtendedSqlAstBuilder(conf, delegate)
|
private lazy val builder = new HoodieSpark3_2ExtendedSqlAstBuilder(conf, delegate)
|
||||||
|
|
||||||
override def parsePlan(sqlText: String): LogicalPlan = parse(sqlText) { parser =>
|
override def parsePlan(sqlText: String): LogicalPlan = parse(sqlText) { parser =>
|
||||||
|
try {
|
||||||
builder.visit(parser.singleStatement()) match {
|
builder.visit(parser.singleStatement()) match {
|
||||||
case plan: LogicalPlan => plan
|
case plan: LogicalPlan => plan
|
||||||
case _=> delegate.parsePlan(sqlText)
|
case _=> delegate.parsePlan(sqlText)
|
||||||
}
|
}
|
||||||
|
} catch {
|
||||||
|
case NonFatal(_) =>
|
||||||
|
delegate.parsePlan(sqlText)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override def parseExpression(sqlText: String): Expression = delegate.parseExpression(sqlText)
|
override def parseExpression(sqlText: String): Expression = delegate.parseExpression(sqlText)
|
||||||
|
|||||||
Reference in New Issue
Block a user