Skip to content

Commit ae3b284

Browse files
committed
fix
1 parent 871d29f commit ae3b284

File tree

3 files changed

+12
-30
lines changed

3 files changed

+12
-30
lines changed

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -475,8 +475,6 @@ object SimplifyConditionals extends Rule[LogicalPlan] with PredicateHelper {
475475
case If(TrueLiteral, trueValue, _) => trueValue
476476
case If(FalseLiteral, _, falseValue) => falseValue
477477
case If(Literal(null, _), _, falseValue) => falseValue
478-
case If(_, TrueLiteral, TrueLiteral) => TrueLiteral
479-
case If(_, FalseLiteral, FalseLiteral) => FalseLiteral
480478
case If(cond, TrueLiteral, FalseLiteral) => cond
481479
case If(cond, FalseLiteral, TrueLiteral) => Not(cond)
482480
case If(cond, trueValue, falseValue)
@@ -486,10 +484,6 @@ object SimplifyConditionals extends Rule[LogicalPlan] with PredicateHelper {
486484
case If(cond, FalseLiteral, l @ Literal(null, _)) if !cond.nullable => And(Not(cond), l)
487485
case If(cond, TrueLiteral, l @ Literal(null, _)) if !cond.nullable => Or(cond, l)
488486

489-
case CaseWhen(branches, Some(TrueLiteral))
490-
if branches.forall(_._2 == TrueLiteral) => TrueLiteral
491-
case CaseWhen(branches, Some(FalseLiteral))
492-
if branches.forall(_._2 == FalseLiteral) => FalseLiteral
493487
case CaseWhen(Seq((cond, TrueLiteral)), Some(FalseLiteral)) => cond
494488
case CaseWhen(Seq((cond, FalseLiteral)), Some(TrueLiteral)) => Not(cond)
495489

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ class PushFoldableIntoBranchesSuite
6868
assert(!nonDeterministic.deterministic)
6969
assertEquivalent(EqualTo(nonDeterministic, Literal(2)),
7070
GreaterThanOrEqual(Rand(1), Literal(0.5)))
71-
assertEquivalent(EqualTo(nonDeterministic, Literal(3)), FalseLiteral)
71+
assertEquivalent(EqualTo(nonDeterministic, Literal(3)),
72+
If(LessThan(Rand(1), Literal(0.5)), FalseLiteral, FalseLiteral))
7273

7374
// Handle Null values.
7475
assertEquivalent(
@@ -141,7 +142,8 @@ class PushFoldableIntoBranchesSuite
141142
assert(!nonDeterministic.deterministic)
142143
assertEquivalent(EqualTo(nonDeterministic, Literal(2)),
143144
GreaterThanOrEqual(Rand(1), Literal(0.5)))
144-
assertEquivalent(EqualTo(nonDeterministic, Literal(3)), FalseLiteral)
145+
assertEquivalent(EqualTo(nonDeterministic, Literal(3)),
146+
CaseWhen(Seq((LessThan(Rand(1), Literal(0.5)), FalseLiteral)), Some(FalseLiteral)))
145147

146148
// Handle Null values.
147149
assertEquivalent(
@@ -268,9 +270,10 @@ class PushFoldableIntoBranchesSuite
268270
}
269271
}
270272

271-
test("SPARK-33884: simplify conditional if all branches are foldable boolean type") {
272-
assertEquivalent(EqualTo(
273-
CaseWhen(Seq((IsNull('a), Literal(0)), (IsNull('b), Literal(1))), Literal(2)), Literal(3)),
274-
FalseLiteral)
273+
test("SPARK-33884: simplify CaseWhen clauses with (true and false) and (false and true)") {
274+
assertEquivalent(
275+
EqualTo(CaseWhen(Seq(('a > 10, Literal(0))), Literal(1)), Literal(0)), 'a > 10)
276+
assertEquivalent(
277+
EqualTo(CaseWhen(Seq(('a > 10, Literal(0))), Literal(1)), Literal(1)), 'a <= 10)
275278
}
276279
}

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

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -207,10 +207,6 @@ class SimplifyConditionalSuite extends PlanTest with ExpressionEvalHelper with P
207207
assertEquivalent(
208208
If(IsNotNull(UnresolvedAttribute("a")), FalseLiteral, TrueLiteral),
209209
IsNull(UnresolvedAttribute("a")))
210-
assertEquivalent(
211-
If(IsNotNull(UnresolvedAttribute("a")), TrueLiteral, TrueLiteral), TrueLiteral)
212-
assertEquivalent(
213-
If(IsNotNull(UnresolvedAttribute("a")), FalseLiteral, FalseLiteral), FalseLiteral)
214210

215211
assertEquivalent(
216212
If(GreaterThan(Rand(0), UnresolvedAttribute("a")), TrueLiteral, FalseLiteral),
@@ -228,21 +224,10 @@ class SimplifyConditionalSuite extends PlanTest with ExpressionEvalHelper with P
228224
}
229225
}
230226

231-
test("SPARK-33884: simplify conditional if all branches are foldable boolean type") {
232-
Seq(IsNull('a), GreaterThan(Rand(0), 1)).foreach { condition =>
233-
assertEquivalent(CaseWhen(Seq((condition, FalseLiteral)), FalseLiteral), FalseLiteral)
234-
assertEquivalent(CaseWhen(Seq((condition, TrueLiteral)), TrueLiteral), TrueLiteral)
235-
assertEquivalent(
236-
CaseWhen(Seq((condition, FalseLiteral), (IsNull('b), FalseLiteral)), FalseLiteral),
237-
FalseLiteral)
238-
assertEquivalent(
239-
CaseWhen(Seq((condition, TrueLiteral), (IsNull('b), TrueLiteral)), TrueLiteral),
240-
TrueLiteral)
227+
test("SPARK-33884: simplify CaseWhen clauses with (true and false) and (false and true)") {
228+
Seq(IsNull('a), GreaterThan(Rand(0), 1.0)).foreach { cond =>
229+
assertEquivalent(CaseWhen(Seq((cond, TrueLiteral)), FalseLiteral), cond)
241230
}
242-
243-
assertEquivalent(CaseWhen(Seq((IsNull('a), TrueLiteral)), FalseLiteral), IsNull('a))
244-
assertEquivalent(CaseWhen(Seq((GreaterThan(Rand(0), 1.0), TrueLiteral)), FalseLiteral),
245-
GreaterThan(Rand(0), 1.0))
246231
assertEquivalent(CaseWhen(Seq((IsNull('a), FalseLiteral)), TrueLiteral), IsNotNull('a))
247232
assertEquivalent(CaseWhen(Seq((GreaterThan(Rand(0), 1.0), FalseLiteral)), TrueLiteral),
248233
LessThanOrEqual(Rand(0), 1.0))

0 commit comments

Comments
 (0)