aboutsummaryrefslogtreecommitdiff
path: root/sql/hive
diff options
context:
space:
mode:
authorLiang-Chi Hsieh <viirya@gmail.com>2015-02-06 12:13:44 -0800
committerMichael Armbrust <michael@databricks.com>2015-02-06 12:13:44 -0800
commitd433816157bb3ae1f0fbe44efec43a0c906d9f82 (patch)
treed80494e08a097eec0f50263e634b20acb88ad2ae /sql/hive
parent70e5b030a78ddfdcc8c9eee568009f277dee0872 (diff)
downloadspark-d433816157bb3ae1f0fbe44efec43a0c906d9f82.tar.gz
spark-d433816157bb3ae1f0fbe44efec43a0c906d9f82.tar.bz2
spark-d433816157bb3ae1f0fbe44efec43a0c906d9f82.zip
[SPARK-5650][SQL] Support optional 'FROM' clause
In Hive, 'FROM' clause is optional. This pr supports it. Author: Liang-Chi Hsieh <viirya@gmail.com> Closes #4426 from viirya/optional_from and squashes the following commits: fe81f31 [Liang-Chi Hsieh] Support optional 'FROM' clause.
Diffstat (limited to 'sql/hive')
-rw-r--r--sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveQl.scala19
-rw-r--r--sql/hive/src/test/resources/golden/no from clause-0-b42b408a87b258921240058f880a721a1
-rw-r--r--sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveQuerySuite.scala3
3 files changed, 18 insertions, 5 deletions
diff --git a/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveQl.scala b/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveQl.scala
index c19a091719..6265c61a1d 100644
--- a/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveQl.scala
+++ b/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveQl.scala
@@ -556,9 +556,14 @@ https://cwiki.apache.org/confluence/display/Hive/Enhanced+Aggregation%2C+Cube%2C
case Token("TOK_TRUNCATETABLE",
Token("TOK_TABLE_PARTITION",table)::Nil) => NativePlaceholder
- case Token("TOK_QUERY",
- Token("TOK_FROM", fromClause :: Nil) ::
- insertClauses) =>
+ case Token("TOK_QUERY", queryArgs)
+ if Seq("TOK_FROM", "TOK_INSERT").contains(queryArgs.head.getText) =>
+
+ val (fromClause: Option[ASTNode], insertClauses) = queryArgs match {
+ case Token("TOK_FROM", args: Seq[ASTNode]) :: insertClauses =>
+ (Some(args.head), insertClauses)
+ case Token("TOK_INSERT", _) :: Nil => (None, queryArgs)
+ }
// Return one query for each insert clause.
val queries = insertClauses.map { case Token("TOK_INSERT", singleInsert) =>
@@ -599,8 +604,12 @@ https://cwiki.apache.org/confluence/display/Hive/Enhanced+Aggregation%2C+Cube%2C
"TOK_LATERAL_VIEW"),
singleInsert)
}
-
- val relations = nodeToRelation(fromClause)
+
+ val relations = fromClause match {
+ case Some(f) => nodeToRelation(f)
+ case None => NoRelation
+ }
+
val withWhere = whereClause.map { whereNode =>
val Seq(whereExpr) = whereNode.getChildren.toSeq
Filter(nodeToExpr(whereExpr), relations)
diff --git a/sql/hive/src/test/resources/golden/no from clause-0-b42b408a87b258921240058f880a721a b/sql/hive/src/test/resources/golden/no from clause-0-b42b408a87b258921240058f880a721a
new file mode 100644
index 0000000000..390d344ecb
--- /dev/null
+++ b/sql/hive/src/test/resources/golden/no from clause-0-b42b408a87b258921240058f880a721a
@@ -0,0 +1 @@
+1 1 -1
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 bb73ff1ea7..d16a1e0b73 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
@@ -202,6 +202,9 @@ class HiveQuerySuite extends HiveComparisonTest with BeforeAndAfter {
createQueryTest("having no references",
"SELECT key FROM src GROUP BY key HAVING COUNT(*) > 1")
+ createQueryTest("no from clause",
+ "SELECT 1, +1, -1")
+
createQueryTest("boolean = number",
"""
|SELECT