aboutsummaryrefslogtreecommitdiff
path: root/sql/catalyst/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'sql/catalyst/src/test')
-rw-r--r--sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/OuterJoinEliminationSuite.scala39
1 files changed, 39 insertions, 0 deletions
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/OuterJoinEliminationSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/OuterJoinEliminationSuite.scala
index 41754adef4..c168a55e40 100644
--- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/OuterJoinEliminationSuite.scala
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/OuterJoinEliminationSuite.scala
@@ -20,6 +20,7 @@ package org.apache.spark.sql.catalyst.optimizer
import org.apache.spark.sql.catalyst.analysis.EliminateSubqueryAliases
import org.apache.spark.sql.catalyst.dsl.expressions._
import org.apache.spark.sql.catalyst.dsl.plans._
+import org.apache.spark.sql.catalyst.expressions.{Coalesce, IsNotNull}
import org.apache.spark.sql.catalyst.plans._
import org.apache.spark.sql.catalyst.plans.logical._
import org.apache.spark.sql.catalyst.rules._
@@ -192,4 +193,42 @@ class OuterJoinEliminationSuite extends PlanTest {
comparePlans(optimized, correctAnswer)
}
+
+ test("joins: no outer join elimination if the filter is not NULL eliminated") {
+ val x = testRelation.subquery('x)
+ val y = testRelation1.subquery('y)
+
+ val originalQuery =
+ x.join(y, FullOuter, Option("x.a".attr === "y.d".attr))
+ .where(Coalesce("y.e".attr :: "x.a".attr :: Nil))
+
+ val optimized = Optimize.execute(originalQuery.analyze)
+
+ val left = testRelation
+ val right = testRelation1
+ val correctAnswer =
+ left.join(right, FullOuter, Option("a".attr === "d".attr))
+ .where(Coalesce("e".attr :: "a".attr :: Nil)).analyze
+
+ comparePlans(optimized, correctAnswer)
+ }
+
+ test("joins: no outer join elimination if the filter's constraints are not NULL eliminated") {
+ val x = testRelation.subquery('x)
+ val y = testRelation1.subquery('y)
+
+ val originalQuery =
+ x.join(y, FullOuter, Option("x.a".attr === "y.d".attr))
+ .where(IsNotNull(Coalesce("y.e".attr :: "x.a".attr :: Nil)))
+
+ val optimized = Optimize.execute(originalQuery.analyze)
+
+ val left = testRelation
+ val right = testRelation1
+ val correctAnswer =
+ left.join(right, FullOuter, Option("a".attr === "d".attr))
+ .where(IsNotNull(Coalesce("e".attr :: "a".attr :: Nil))).analyze
+
+ comparePlans(optimized, correctAnswer)
+ }
}