Repository: spark
Updated Branches:
  refs/heads/master eadc4c590 -> 1b3ce61ce


[SPARK-3906][SQL] Adds multiple join support for SQLContext

Author: Cheng Lian <[email protected]>

Closes #2767 from liancheng/multi-join and squashes the following commits:

9dc0d18 [Cheng Lian] Adds multiple join support for SQLContext


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

Branch: refs/heads/master
Commit: 1b3ce61ce9061719d8c28d621c3200e0bff3a4e9
Parents: eadc4c5
Author: Cheng Lian <[email protected]>
Authored: Mon Oct 20 15:29:54 2014 -0700
Committer: Michael Armbrust <[email protected]>
Committed: Mon Oct 20 15:29:54 2014 -0700

----------------------------------------------------------------------
 .../scala/org/apache/spark/sql/catalyst/SqlParser.scala  |  8 +++++---
 .../test/scala/org/apache/spark/sql/SQLQuerySuite.scala  | 11 +++++++++++
 2 files changed, 16 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/spark/blob/1b3ce61c/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/SqlParser.scala
----------------------------------------------------------------------
diff --git 
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/SqlParser.scala 
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/SqlParser.scala
index b4d606d..a277684 100755
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/SqlParser.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/SqlParser.scala
@@ -181,9 +181,11 @@ class SqlParser extends AbstractSparkSQLParser {
     )
 
   protected lazy val joinedRelation: Parser[LogicalPlan] =
-    relationFactor ~ joinType.? ~ (JOIN ~> relationFactor) ~ joinConditions.? 
^^ {
-      case r1 ~ jt ~ r2 ~ cond =>
-        Join(r1, r2, joinType = jt.getOrElse(Inner), cond)
+    relationFactor ~ rep1(joinType.? ~ (JOIN ~> relationFactor) ~ 
joinConditions.?) ^^ {
+      case r1 ~ joins =>
+        joins.foldLeft(r1) { case (lhs, jt ~ rhs ~ cond) =>
+          Join(lhs, rhs, joinType = jt.getOrElse(Inner), cond)
+        }
     }
 
   protected lazy val joinConditions: Parser[Expression] =

http://git-wip-us.apache.org/repos/asf/spark/blob/1b3ce61c/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala
----------------------------------------------------------------------
diff --git a/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala 
b/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala
index 15f6ba4..beb924f 100644
--- a/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala
+++ b/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala
@@ -720,4 +720,15 @@ class SQLQuerySuite extends QueryTest with 
BeforeAndAfterAll {
     checkAggregation("SELECT key + 2, COUNT(*) FROM testData GROUP BY key + 1")
     checkAggregation("SELECT key + 1 + 1, COUNT(*) FROM testData GROUP BY key 
+ 1", false)
   }
+
+  test("Multiple join") {
+    checkAnswer(
+      sql(
+        """SELECT a.key, b.key, c.key
+          |FROM testData a
+          |JOIN testData b ON a.key = b.key
+          |JOIN testData c ON a.key = c.key
+        """.stripMargin),
+      (1 to 100).map(i => Seq(i, i, i)))
+  }
 }


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

Reply via email to