aboutsummaryrefslogtreecommitdiff
path: root/sql/catalyst/src
diff options
context:
space:
mode:
authorReynold Xin <rxin@databricks.com>2016-04-29 22:26:12 -0700
committerDavies Liu <davies.liu@gmail.com>2016-04-29 22:26:12 -0700
commit7945f9f6d431453a192bea66f66fec813913e4c8 (patch)
treed6fbaa6fdca7a2571133359d5ec04860473b617f /sql/catalyst/src
parent90fa2c6e7f4893af51e0cfb6dc162b828ea55995 (diff)
downloadspark-7945f9f6d431453a192bea66f66fec813913e4c8.tar.gz
spark-7945f9f6d431453a192bea66f66fec813913e4c8.tar.bz2
spark-7945f9f6d431453a192bea66f66fec813913e4c8.zip
[SPARK-14757] [SQL] Fix nullability bug in EqualNullSafe codegen
## What changes were proposed in this pull request? This patch fixes a null handling bug in EqualNullSafe's code generation. ## How was this patch tested? Updated unit test so they would fail without the fix. Closes #12628. Author: Reynold Xin <rxin@databricks.com> Author: Arash Nabili <arash@levyx.com> Closes #12799 from rxin/equalnullsafe.
Diffstat (limited to 'sql/catalyst/src')
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/predicates.scala2
-rw-r--r--sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/PredicateSuite.scala3
2 files changed, 3 insertions, 2 deletions
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/predicates.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/predicates.scala
index 057c6545ef..8a6cf53782 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/predicates.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/predicates.scala
@@ -467,7 +467,7 @@ case class EqualNullSafe(left: Expression, right: Expression) extends BinaryComp
val equalCode = ctx.genEqual(left.dataType, eval1.value, eval2.value)
ev.copy(code = eval1.code + eval2.code + s"""
boolean ${ev.value} = (${eval1.isNull} && ${eval2.isNull}) ||
- (!${eval1.isNull} && $equalCode);""", isNull = "false")
+ (!${eval1.isNull} && !${eval2.isNull} && $equalCode);""", isNull = "false")
}
}
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/PredicateSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/PredicateSuite.scala
index 03e7611fce..b3f20692b2 100644
--- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/PredicateSuite.scala
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/PredicateSuite.scala
@@ -273,7 +273,8 @@ class PredicateSuite extends SparkFunSuite with ExpressionEvalHelper {
}
test("BinaryComparison: null test") {
- val normalInt = Literal(1)
+ // Use -1 (default value for codegen) which can trigger some weird bugs, e.g. SPARK-14757
+ val normalInt = Literal(-1)
val nullInt = Literal.create(null, IntegerType)
def nullTest(op: (Expression, Expression) => Expression): Unit = {