Repository: spark
Updated Branches:
  refs/heads/master b9c835337 -> cfe1ba56e


[SPARK-12687] [SQL] Support from clause surrounded by `()`.

JIRA: https://issues.apache.org/jira/browse/SPARK-12687

Some queries such as `(select 1 as a) union (select 2 as a)` can't work. This 
patch fixes it.

Author: Liang-Chi Hsieh <[email protected]>

Closes #10660 from viirya/fix-union.


Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/cfe1ba56
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/cfe1ba56
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/cfe1ba56

Branch: refs/heads/master
Commit: cfe1ba56e4ab281a9e8eaf419fb7429f93c7a0ce
Parents: b9c8353
Author: Liang-Chi Hsieh <[email protected]>
Authored: Fri Jan 8 09:50:41 2016 -0800
Committer: Davies Liu <[email protected]>
Committed: Fri Jan 8 09:50:41 2016 -0800

----------------------------------------------------------------------
 .../sql/catalyst/parser/FromClauseParser.g      |  2 +-
 .../spark/sql/catalyst/parser/SparkSqlParser.g  | 21 +++++++++++++++++++-
 .../spark/sql/catalyst/CatalystQlSuite.scala    |  4 ++++
 3 files changed, 25 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/spark/blob/cfe1ba56/sql/catalyst/src/main/antlr3/org/apache/spark/sql/catalyst/parser/FromClauseParser.g
----------------------------------------------------------------------
diff --git 
a/sql/catalyst/src/main/antlr3/org/apache/spark/sql/catalyst/parser/FromClauseParser.g
 
b/sql/catalyst/src/main/antlr3/org/apache/spark/sql/catalyst/parser/FromClauseParser.g
index ba6cfc6..972c52e 100644
--- 
a/sql/catalyst/src/main/antlr3/org/apache/spark/sql/catalyst/parser/FromClauseParser.g
+++ 
b/sql/catalyst/src/main/antlr3/org/apache/spark/sql/catalyst/parser/FromClauseParser.g
@@ -151,8 +151,8 @@ fromSource
 @after { gParent.popMsg(state); }
     :
     (LPAREN KW_VALUES) => fromSource0
-    | (LPAREN) => LPAREN joinSource RPAREN -> joinSource
     | fromSource0
+    | (LPAREN joinSource) => LPAREN joinSource RPAREN -> joinSource
     ;
 
 

http://git-wip-us.apache.org/repos/asf/spark/blob/cfe1ba56/sql/catalyst/src/main/antlr3/org/apache/spark/sql/catalyst/parser/SparkSqlParser.g
----------------------------------------------------------------------
diff --git 
a/sql/catalyst/src/main/antlr3/org/apache/spark/sql/catalyst/parser/SparkSqlParser.g
 
b/sql/catalyst/src/main/antlr3/org/apache/spark/sql/catalyst/parser/SparkSqlParser.g
index cf8a565..b04bb67 100644
--- 
a/sql/catalyst/src/main/antlr3/org/apache/spark/sql/catalyst/parser/SparkSqlParser.g
+++ 
b/sql/catalyst/src/main/antlr3/org/apache/spark/sql/catalyst/parser/SparkSqlParser.g
@@ -2216,6 +2216,8 @@ regularBody[boolean topLevel]
 selectStatement[boolean topLevel]
    :
    (
+   (
+   LPAREN
    s=selectClause
    f=fromClause?
    w=whereClause?
@@ -2227,6 +2229,20 @@ selectStatement[boolean topLevel]
    sort=sortByClause?
    win=window_clause?
    l=limitClause?
+   RPAREN
+   |
+   s=selectClause
+   f=fromClause?
+   w=whereClause?
+   g=groupByClause?
+   h=havingClause?
+   o=orderByClause?
+   c=clusterByClause?
+   d=distributeByClause?
+   sort=sortByClause?
+   win=window_clause?
+   l=limitClause?
+   )
    -> ^(TOK_QUERY $f? ^(TOK_INSERT ^(TOK_DESTINATION ^(TOK_DIR TOK_TMP_FILE))
                      $s $w? $g? $h? $o? $c?
                      $d? $sort? $win? $l?))
@@ -2241,7 +2257,10 @@ selectStatement[boolean topLevel]
 
 setOpSelectStatement[CommonTree t, boolean topLevel]
    :
-   (u=setOperator b=simpleSelectStatement
+   ((
+    u=setOperator LPAREN b=simpleSelectStatement RPAREN
+    |
+    u=setOperator b=simpleSelectStatement)
    -> {$setOpSelectStatement.tree != null && 
$u.tree.getType()==SparkSqlParser.TOK_UNIONDISTINCT}?
       ^(TOK_QUERY
           ^(TOK_FROM

http://git-wip-us.apache.org/repos/asf/spark/blob/cfe1ba56/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/CatalystQlSuite.scala
----------------------------------------------------------------------
diff --git 
a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/CatalystQlSuite.scala
 
b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/CatalystQlSuite.scala
index 0fee97f..30978d9 100644
--- 
a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/CatalystQlSuite.scala
+++ 
b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/CatalystQlSuite.scala
@@ -28,5 +28,9 @@ class CatalystQlSuite extends PlanTest {
     paresr.createPlan("select * from t1 union select * from t2")
     paresr.createPlan("select * from t1 except select * from t2")
     paresr.createPlan("select * from t1 intersect select * from t2")
+    paresr.createPlan("(select * from t1) union all (select * from t2)")
+    paresr.createPlan("(select * from t1) union distinct (select * from t2)")
+    paresr.createPlan("(select * from t1) union (select * from t2)")
+    paresr.createPlan("select * from ((select * from t1) union (select * from 
t2)) t")
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to