18
18
package org .apache .spark .sql .catalyst .optimizer
19
19
20
20
import 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 }
22
22
import org .apache .spark .sql .catalyst .plans .logical ._
23
23
import org .apache .spark .sql .catalyst .plans .PlanTest
24
24
import org .apache .spark .sql .catalyst .rules ._
@@ -40,11 +40,22 @@ class BooleanSimplificationSuite extends PlanTest {
40
40
41
41
val testRelation = LocalRelation (' a .int, ' b .int, ' c .int, ' d .string)
42
42
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)
48
59
}
49
60
50
61
test(" a && a => a" ) {
0 commit comments