aboutsummaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
Diffstat (limited to 'sql')
-rwxr-xr-xsql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/SqlParser.scala8
-rw-r--r--sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala11
2 files changed, 16 insertions, 3 deletions
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 b4d606d37e..a277684f63 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] =
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 15f6ba4f72..beb924f171 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)))
+ }
}