This is an automated email from the ASF dual-hosted git repository.

jiayu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sedona.git


The following commit(s) were added to refs/heads/master by this push:
     new d2261e3e6 [SEDONA-636] Parser extension should fall back to delegated 
parser when parsing failed (#1547)
d2261e3e6 is described below

commit d2261e3e6b0717ddaa9104d85e548cdcc89de650
Author: Kristin Cowalcijk <[email protected]>
AuthorDate: Fri Aug 16 01:26:23 2024 +0800

    [SEDONA-636] Parser extension should fall back to delegated parser when 
parsing failed (#1547)
---
 docs/api/sql/Parameter.md                          |  4 ++++
 docs/tutorial/sql-pure-sql.md                      | 15 +++++++++++++
 .../org/apache/sedona/spark/SedonaContext.scala    |  4 +++-
 .../apache/sedona/sql/parser/SedonaSqlParser.scala | 16 +++++++++-----
 .../org/sedona/sql/parser/SedonaSqlParser.scala    | 16 +++++++++-----
 .../apache/sedona/sql/parser/SedonaSqlParser.scala | 16 +++++++++-----
 .../src/main/java/org/apache/sedona/Main.java      | 25 ----------------------
 .../apache/sedona/sql/parser/SedonaSqlParser.scala | 16 +++++++++-----
 .../apache/sedona/sql/parser/SedonaSqlParser.scala | 16 +++++++++-----
 .../apache/sedona/sql/parser/SedonaSqlParser.scala | 16 +++++++++-----
 10 files changed, 88 insertions(+), 56 deletions(-)

diff --git a/docs/api/sql/Parameter.md b/docs/api/sql/Parameter.md
index b84b7cdee..81decf608 100644
--- a/docs/api/sql/Parameter.md
+++ b/docs/api/sql/Parameter.md
@@ -63,3 +63,7 @@ sparkSession.conf.set("sedona.global.index","false")
                * all: Always optimize spatial join queries, even for 
equi-joins.
                * none: Disable optimization for spatial joins.
                * nonequi: Optimize spatial join queries that are not 
equi-joins.
+* spark.sedona.enableParserExtension
+       * Enable the parser extension to parse GEOMETRY data type in SQL DDL 
statements
+       * Default: true
+       * Possible values: true, false
diff --git a/docs/tutorial/sql-pure-sql.md b/docs/tutorial/sql-pure-sql.md
index dd95a26a5..833d8e385 100644
--- a/docs/tutorial/sql-pure-sql.md
+++ b/docs/tutorial/sql-pure-sql.md
@@ -74,3 +74,18 @@ WHERE ST_Contains(polygondata.polygonshape, 
pointdata.pointshape)
       AND ST_Contains(ST_PolygonFromEnvelope(1.0,101.0,501.0,601.0), 
polygondata.polygonshape)
 LIMIT 5;
 ```
+
+## `GEOMETRY` data type support
+
+Sedona has a Spark SQL parser extension to support `GEOMETRY` data type in DDL 
statements. For example, you can specify a schema with a geometry column when 
creating the table:
+
+```sql
+CREATE TABLE geom_table (id STRING, version INT, geometry GEOMETRY)
+USING geoparquet
+LOCATION '/path/to/geoparquet_geom_table';
+
+SELECT * FROM geom_table LIMIT 10;
+```
+
+The SQL parser extension is enabled by default. If you find it conflicting 
with other extensions and want to disable it,
+please specify `--conf spark.sedona.enableParserExtension=false` when starting 
`spark-sql`.
diff --git 
a/spark/common/src/main/scala/org/apache/sedona/spark/SedonaContext.scala 
b/spark/common/src/main/scala/org/apache/sedona/spark/SedonaContext.scala
index 692fe5f72..4c8fcab69 100644
--- a/spark/common/src/main/scala/org/apache/sedona/spark/SedonaContext.scala
+++ b/spark/common/src/main/scala/org/apache/sedona/spark/SedonaContext.scala
@@ -65,7 +65,9 @@ object SedonaContext {
     RasterRegistrator.registerAll(sparkSession)
     UdtRegistrator.registerAll()
     UdfRegistrator.registerAll(sparkSession)
-    ParserRegistrator.register(sparkSession)
+    if (sparkSession.conf.get("spark.sedona.enableParserExtension", 
"true").toBoolean) {
+      ParserRegistrator.register(sparkSession)
+    }
     sparkSession
   }
 
diff --git 
a/spark/spark-3.0/src/main/scala/org/apache/sedona/sql/parser/SedonaSqlParser.scala
 
b/spark/spark-3.0/src/main/scala/org/apache/sedona/sql/parser/SedonaSqlParser.scala
index 2d270eaa4..80653d40d 100644
--- 
a/spark/spark-3.0/src/main/scala/org/apache/sedona/sql/parser/SedonaSqlParser.scala
+++ 
b/spark/spark-3.0/src/main/scala/org/apache/sedona/sql/parser/SedonaSqlParser.scala
@@ -33,11 +33,17 @@ class SedonaSqlParser(conf: SQLConf, delegate: 
ParserInterface) extends SparkSql
    * @param sqlText
    * @return
    */
-  override def parsePlan(sqlText: String): LogicalPlan = parse(sqlText) { 
parser =>
-    parserBuilder.visit(parser.singleStatement()) match {
-      case plan: LogicalPlan => plan
-      case _ =>
+  override def parsePlan(sqlText: String): LogicalPlan =
+    try {
+      parse(sqlText) { parser =>
+        parserBuilder.visit(parser.singleStatement()) match {
+          case plan: LogicalPlan => plan
+          case _ =>
+            delegate.parsePlan(sqlText)
+        }
+      }
+    } catch {
+      case _: Exception =>
         delegate.parsePlan(sqlText)
     }
-  }
 }
diff --git 
a/spark/spark-3.1/src/main/scala/org/sedona/sql/parser/SedonaSqlParser.scala 
b/spark/spark-3.1/src/main/scala/org/sedona/sql/parser/SedonaSqlParser.scala
index 420949ab9..6c7041912 100644
--- a/spark/spark-3.1/src/main/scala/org/sedona/sql/parser/SedonaSqlParser.scala
+++ b/spark/spark-3.1/src/main/scala/org/sedona/sql/parser/SedonaSqlParser.scala
@@ -32,11 +32,17 @@ class SedonaSqlParser(delegate: ParserInterface) extends 
SparkSqlParser {
    * @param sqlText
    * @return
    */
-  override def parsePlan(sqlText: String): LogicalPlan = parse(sqlText) { 
parser =>
-    parserBuilder.visit(parser.singleStatement()) match {
-      case plan: LogicalPlan => plan
-      case _ =>
+  override def parsePlan(sqlText: String): LogicalPlan =
+    try {
+      parse(sqlText) { parser =>
+        parserBuilder.visit(parser.singleStatement()) match {
+          case plan: LogicalPlan => plan
+          case _ =>
+            delegate.parsePlan(sqlText)
+        }
+      }
+    } catch {
+      case _: Exception =>
         delegate.parsePlan(sqlText)
     }
-  }
 }
diff --git 
a/spark/spark-3.2/src/main/scala/org/apache/sedona/sql/parser/SedonaSqlParser.scala
 
b/spark/spark-3.2/src/main/scala/org/apache/sedona/sql/parser/SedonaSqlParser.scala
index 420949ab9..6c7041912 100644
--- 
a/spark/spark-3.2/src/main/scala/org/apache/sedona/sql/parser/SedonaSqlParser.scala
+++ 
b/spark/spark-3.2/src/main/scala/org/apache/sedona/sql/parser/SedonaSqlParser.scala
@@ -32,11 +32,17 @@ class SedonaSqlParser(delegate: ParserInterface) extends 
SparkSqlParser {
    * @param sqlText
    * @return
    */
-  override def parsePlan(sqlText: String): LogicalPlan = parse(sqlText) { 
parser =>
-    parserBuilder.visit(parser.singleStatement()) match {
-      case plan: LogicalPlan => plan
-      case _ =>
+  override def parsePlan(sqlText: String): LogicalPlan =
+    try {
+      parse(sqlText) { parser =>
+        parserBuilder.visit(parser.singleStatement()) match {
+          case plan: LogicalPlan => plan
+          case _ =>
+            delegate.parsePlan(sqlText)
+        }
+      }
+    } catch {
+      case _: Exception =>
         delegate.parsePlan(sqlText)
     }
-  }
 }
diff --git a/spark/spark-3.3/src/main/java/org/apache/sedona/Main.java 
b/spark/spark-3.3/src/main/java/org/apache/sedona/Main.java
deleted file mode 100644
index acb8e3005..000000000
--- a/spark/spark-3.3/src/main/java/org/apache/sedona/Main.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.sedona;
-
-public class Main {
-  public static void main(String[] args) {
-    System.out.println("Hello world!");
-  }
-}
diff --git 
a/spark/spark-3.3/src/main/scala/org/apache/sedona/sql/parser/SedonaSqlParser.scala
 
b/spark/spark-3.3/src/main/scala/org/apache/sedona/sql/parser/SedonaSqlParser.scala
index 420949ab9..6c7041912 100644
--- 
a/spark/spark-3.3/src/main/scala/org/apache/sedona/sql/parser/SedonaSqlParser.scala
+++ 
b/spark/spark-3.3/src/main/scala/org/apache/sedona/sql/parser/SedonaSqlParser.scala
@@ -32,11 +32,17 @@ class SedonaSqlParser(delegate: ParserInterface) extends 
SparkSqlParser {
    * @param sqlText
    * @return
    */
-  override def parsePlan(sqlText: String): LogicalPlan = parse(sqlText) { 
parser =>
-    parserBuilder.visit(parser.singleStatement()) match {
-      case plan: LogicalPlan => plan
-      case _ =>
+  override def parsePlan(sqlText: String): LogicalPlan =
+    try {
+      parse(sqlText) { parser =>
+        parserBuilder.visit(parser.singleStatement()) match {
+          case plan: LogicalPlan => plan
+          case _ =>
+            delegate.parsePlan(sqlText)
+        }
+      }
+    } catch {
+      case _: Exception =>
         delegate.parsePlan(sqlText)
     }
-  }
 }
diff --git 
a/spark/spark-3.4/src/main/scala/org/apache/sedona/sql/parser/SedonaSqlParser.scala
 
b/spark/spark-3.4/src/main/scala/org/apache/sedona/sql/parser/SedonaSqlParser.scala
index 420949ab9..6c7041912 100644
--- 
a/spark/spark-3.4/src/main/scala/org/apache/sedona/sql/parser/SedonaSqlParser.scala
+++ 
b/spark/spark-3.4/src/main/scala/org/apache/sedona/sql/parser/SedonaSqlParser.scala
@@ -32,11 +32,17 @@ class SedonaSqlParser(delegate: ParserInterface) extends 
SparkSqlParser {
    * @param sqlText
    * @return
    */
-  override def parsePlan(sqlText: String): LogicalPlan = parse(sqlText) { 
parser =>
-    parserBuilder.visit(parser.singleStatement()) match {
-      case plan: LogicalPlan => plan
-      case _ =>
+  override def parsePlan(sqlText: String): LogicalPlan =
+    try {
+      parse(sqlText) { parser =>
+        parserBuilder.visit(parser.singleStatement()) match {
+          case plan: LogicalPlan => plan
+          case _ =>
+            delegate.parsePlan(sqlText)
+        }
+      }
+    } catch {
+      case _: Exception =>
         delegate.parsePlan(sqlText)
     }
-  }
 }
diff --git 
a/spark/spark-3.5/src/main/scala/org/apache/sedona/sql/parser/SedonaSqlParser.scala
 
b/spark/spark-3.5/src/main/scala/org/apache/sedona/sql/parser/SedonaSqlParser.scala
index 420949ab9..6c7041912 100644
--- 
a/spark/spark-3.5/src/main/scala/org/apache/sedona/sql/parser/SedonaSqlParser.scala
+++ 
b/spark/spark-3.5/src/main/scala/org/apache/sedona/sql/parser/SedonaSqlParser.scala
@@ -32,11 +32,17 @@ class SedonaSqlParser(delegate: ParserInterface) extends 
SparkSqlParser {
    * @param sqlText
    * @return
    */
-  override def parsePlan(sqlText: String): LogicalPlan = parse(sqlText) { 
parser =>
-    parserBuilder.visit(parser.singleStatement()) match {
-      case plan: LogicalPlan => plan
-      case _ =>
+  override def parsePlan(sqlText: String): LogicalPlan =
+    try {
+      parse(sqlText) { parser =>
+        parserBuilder.visit(parser.singleStatement()) match {
+          case plan: LogicalPlan => plan
+          case _ =>
+            delegate.parsePlan(sqlText)
+        }
+      }
+    } catch {
+      case _: Exception =>
         delegate.parsePlan(sqlText)
     }
-  }
 }

Reply via email to