Skip to content

Commit a08f09c

Browse files
fix bug in or/and short-circuit evaluation
1 parent af2236b commit a08f09c

File tree

1 file changed

+17
-13
lines changed
  • sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions

1 file changed

+17
-13
lines changed

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

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -98,16 +98,18 @@ case class And(left: Expression, right: Expression) extends BinaryPredicate {
9898

9999
override def eval(input: Row): Any = {
100100
val l = left.eval(input)
101-
if(l == null) {
102-
null
103-
} else if(l == false) {
104-
false
101+
if(l == false) {
102+
false
105103
} else {
106104
val r = right.eval(input)
107-
if(r == null) {
108-
null
105+
if(r == false) {
106+
false
109107
} else {
110-
r
108+
if(l != null && r != null) {
109+
true
110+
} else {
111+
null
112+
}
111113
}
112114
}
113115
}
@@ -118,16 +120,18 @@ case class Or(left: Expression, right: Expression) extends BinaryPredicate {
118120

119121
override def eval(input: Row): Any = {
120122
val l = left.eval(input)
121-
if(l == null) {
122-
null
123-
} else if(l == true) {
123+
if(l == true) {
124124
true
125125
} else {
126126
val r = right.eval(input)
127-
if(r == null) {
128-
null
127+
if(r == true) {
128+
true
129129
} else {
130-
r
130+
if(l != null && r != null) {
131+
false
132+
} else {
133+
null
134+
}
131135
}
132136
}
133137
}

0 commit comments

Comments
 (0)