1818package org .apache .spark .sql .catalyst .optimizer
1919
2020import org .apache .spark .sql .catalyst .analysis .EliminateAnalysisOperators
21- import org .apache .spark .sql .catalyst .expressions .{Literal , Expression }
21+ import org .apache .spark .sql .catalyst .expressions .{Or , And , Literal , Expression }
2222import org .apache .spark .sql .catalyst .plans .logical ._
2323import org .apache .spark .sql .catalyst .plans .PlanTest
2424import org .apache .spark .sql .catalyst .rules ._
@@ -40,11 +40,22 @@ class BooleanSimplificationSuite extends PlanTest {
4040
4141 val testRelation = LocalRelation (' a .int, ' b .int, ' c .int, ' d .string)
4242
43- def checkCondition (originCondition : Expression , optimizedCondition : Expression ): Unit = {
44- val originQuery = testRelation.where(originCondition).analyze
45- val optimized = Optimize (originQuery)
46- val expected = testRelation.where(optimizedCondition).analyze
47- comparePlans(optimized, expected)
43+ def compareConditions (e1 : Expression , e2 : Expression ): Boolean = (e1, e2) match {
44+ case (And (l1, l2), And (r1, r2)) =>
45+ compareConditions(l1, r1) && compareConditions(l2, r2) ||
46+ compareConditions(l1, r2) && compareConditions(l2, r1)
47+
48+ case (Or (l1, l2), Or (r1, r2)) =>
49+ compareConditions(l1, r1) && compareConditions(l2, r2) ||
50+ compareConditions(l1, r2) && compareConditions(l2, r1)
51+
52+ case (l, r) => l == r
53+ }
54+
55+ def checkCondition (input : Expression , expected : Expression ): Unit = {
56+ val plan = testRelation.where(input).analyze
57+ val actual = Optimize (plan).expressions.head
58+ compareConditions(actual, expected)
4859 }
4960
5061 test(" a && a => a" ) {
0 commit comments