Skip to content

Commit 588c151

Browse files
author
guoxiaolong
committed
[SPARK-26138][SQL] Push limit to the right side
1 parent a0b9cb4 commit 588c151

File tree

2 files changed

+4
-4
lines changed

2 files changed

+4
-4
lines changed

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ object LimitPushDown extends Rule[LogicalPlan] {
459459
val newJoin = joinType match {
460460
case RightOuter => join.copy(right = maybePushLocalLimit(exp, right))
461461
case LeftOuter => join.copy(left = maybePushLocalLimit(exp, left))
462-
case Cross => join.copy(left = maybePushLocalLimit(exp, left))
462+
case Cross => join.copy(left = maybePushLocalLimit(exp, left), right = maybePushLocalLimit(exp, right))
463463
case _ => join
464464
}
465465
LocalLimit(exp, newJoin)

sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/LimitPushdownSuite.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,21 +175,21 @@ class LimitPushdownSuite extends PlanTest {
175175
test("cross join") {
176176
val originalQuery = x.join(y, Cross).limit(1)
177177
val optimized = Optimize.execute(originalQuery.analyze)
178-
val correctAnswer = Limit(1, LocalLimit(1, x).join(y, Cross)).analyze
178+
val correctAnswer = Limit(1, LocalLimit(1, x).join(LocalLimit(1, y), Cross)).analyze
179179
comparePlans(optimized, correctAnswer)
180180
}
181181

182182
test("cross join and left sides are limited") {
183183
val originalQuery = x.limit(2).join(y, Cross).limit(1)
184184
val optimized = Optimize.execute(originalQuery.analyze)
185-
val correctAnswer = Limit(1, LocalLimit(1, x).join(y, Cross)).analyze
185+
val correctAnswer = Limit(1, LocalLimit(1, x).join(LocalLimit(1, y), Cross)).analyze
186186
comparePlans(optimized, correctAnswer)
187187
}
188188

189189
test("cross join and right sides are limited") {
190190
val originalQuery = x.join(y.limit(2), Cross).limit(1)
191191
val optimized = Optimize.execute(originalQuery.analyze)
192-
val correctAnswer = Limit(1, LocalLimit(1, x).join(Limit(2, y), Cross)).analyze
192+
val correctAnswer = Limit(1, LocalLimit(1, x).join(LocalLimit(1, y), Cross)).analyze
193193
comparePlans(optimized, correctAnswer)
194194
}
195195
}

0 commit comments

Comments
 (0)