Skip to content

Commit 644f688

Browse files
committed
SPARK-6489: explode optimize add project child plan in unittest
1 parent 376d332 commit 644f688

File tree

3 files changed

+18
-7
lines changed

3 files changed

+18
-7
lines changed

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -171,10 +171,13 @@ object ColumnPruning extends Rule[LogicalPlan] {
171171

172172
Project(substitutedProjection, child)
173173

174-
case gen@Generate(generator: Explode, isJoin, isOuter, alias, child) =>
174+
case gen@Generate(_: Explode, _, _, _, c) =>
175175
val allReferences = gen.references ++ gen.parentReferences
176-
val pruneProject = prunedChild(child, allReferences)
177-
Generate(generator, isJoin, isOuter, alias, pruneProject)
176+
if ((c.outputSet -- allReferences.filter(c.outputSet.contains)).nonEmpty) {
177+
gen.copy(child = Project(allReferences.filter(c.outputSet.contains).toSeq, c))
178+
} else {
179+
gen
180+
}
178181

179182
// Eliminate no-op Projects
180183
case Project(projectList, child) if child.output == projectList => child

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,7 @@ class FilterPushdownSuite extends PlanTest {
460460
val correctAnswer = {
461461
testRelationWithArrayType
462462
.where(('b >= 5) && ('a > 6))
463+
.select('c_arr)
463464
.generate(Explode(Seq("c"), 'c_arr), true, false, Some("arr")).analyze
464465
}
465466

@@ -477,6 +478,7 @@ class FilterPushdownSuite extends PlanTest {
477478
val referenceResult = {
478479
testRelationWithArrayType
479480
.where('b >= 5)
481+
.select('c_arr)
480482
.generate(generator, true, false, Some("arr"))
481483
.where('c > 6).analyze
482484
}
@@ -502,7 +504,12 @@ class FilterPushdownSuite extends PlanTest {
502504
.where(('c > 6) || ('b > 5)).analyze
503505
}
504506
val optimized = Optimize(originalQuery)
505-
506-
comparePlans(optimized, originalQuery)
507+
val correctAnswer = {
508+
testRelationWithArrayType
509+
.select('c_arr,'b)
510+
.generate(Explode(Seq("c"), 'c_arr), true, false, Some("arr"))
511+
.where(('c > 6) || ('b > 5)).analyze
512+
}
513+
comparePlans(optimized, correctAnswer)
507514
}
508515
}

sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/PruningSuite.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,10 @@ class PruningSuite extends HiveComparisonTest with BeforeAndAfter {
9494
Seq.empty)
9595

9696
createPruningTest("Column pruning - outer explode with limit",
97-
"SELECT name FROM person LATERAL VIEW OUTER explode(data) outd AS d limit 3",
97+
"SELECT name FROM person LATERAL VIEW OUTER explode(data) outd AS d" +
98+
" where name < \"C\" limit 3",
9899
Seq("name"),
99-
Seq("data","name"),
100+
Seq("data", "name"),
100101
Seq.empty)
101102

102103

0 commit comments

Comments
 (0)