From fc5587e9d8f89bba27a87c2de26349e7d6744d88 Mon Sep 17 00:00:00 2001 From: Liang-Chi Hsieh Date: Fri, 8 Jan 2016 15:29:37 +0800 Subject: [PATCH 1/2] Support from clause surrounded by `()`. --- .../sql/catalyst/parser/FromClauseParser.g | 2 +- .../sql/catalyst/parser/SparkSqlParser.g | 21 ++++++++++++++++++- .../sql/hive/execution/HiveQuerySuite.scala | 15 +++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) 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 ba6cfc60f045f..972c52e3ffcec 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 ; 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 cf8a56566d32d..b04bb677774c5 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 diff --git a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveQuerySuite.scala b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveQuerySuite.scala index fa99289b41971..4527f8bb8bd0c 100644 --- a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveQuerySuite.scala +++ b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveQuerySuite.scala @@ -803,6 +803,21 @@ class HiveQuerySuite extends HiveComparisonTest with BeforeAndAfter { assertResult(Array(Row(1))) { sql("select 1 as a intersect select 1 as a").collect() } + assertResult(Array(Row(1))) { + sql("(select 1 as a) intersect (select 1 as a)").collect() + } + assertResult(Array(Row(1), Row(1))) { + sql("(select 1 as a) union all (select 1 as a)").collect() + } + assertResult(Array(Row(1))) { + sql("(select 1 as a) union distinct (select 1 as a)").collect() + } + assertResult(Array(Row(1))) { + sql("(select 1 as a) union (select 1 as a)").collect() + } + assertResult(Array(Row(1))) { + sql("select * from ((select 1 as a) union (select 1 as a)) t").collect() + } } test("SPARK-5383 alias for udfs with multi output columns") { From 9004df88adfdf3cce6f89cb408ada5c9b3dbbb2d Mon Sep 17 00:00:00 2001 From: Liang-Chi Hsieh Date: Fri, 8 Jan 2016 16:48:54 +0800 Subject: [PATCH 2/2] Move test cases. --- .../spark/sql/catalyst/CatalystQlSuite.scala | 4 ++++ .../spark/sql/hive/execution/HiveQuerySuite.scala | 15 --------------- 2 files changed, 4 insertions(+), 15 deletions(-) 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 0fee97fb0718c..30978d9b49e2b 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") } } diff --git a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveQuerySuite.scala b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveQuerySuite.scala index 4527f8bb8bd0c..fa99289b41971 100644 --- a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveQuerySuite.scala +++ b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveQuerySuite.scala @@ -803,21 +803,6 @@ class HiveQuerySuite extends HiveComparisonTest with BeforeAndAfter { assertResult(Array(Row(1))) { sql("select 1 as a intersect select 1 as a").collect() } - assertResult(Array(Row(1))) { - sql("(select 1 as a) intersect (select 1 as a)").collect() - } - assertResult(Array(Row(1), Row(1))) { - sql("(select 1 as a) union all (select 1 as a)").collect() - } - assertResult(Array(Row(1))) { - sql("(select 1 as a) union distinct (select 1 as a)").collect() - } - assertResult(Array(Row(1))) { - sql("(select 1 as a) union (select 1 as a)").collect() - } - assertResult(Array(Row(1))) { - sql("select * from ((select 1 as a) union (select 1 as a)) t").collect() - } } test("SPARK-5383 alias for udfs with multi output columns") {