Repository: spark
Updated Branches:
  refs/heads/branch-1.6 8ac0ce6dd -> 10d513feb


[SPARK-14757] [SQL] Fix nullability bug in EqualNullSafe codegen

This patch fixes a null handling bug in EqualNullSafe's code generation.

Updated unit test so they would fail without the fix.

Closes #12628.

Author: Reynold Xin <[email protected]>
Author: Arash Nabili <[email protected]>

Closes #12799 from rxin/equalnullsafe.


Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/10d513fe
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/10d513fe
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/10d513fe

Branch: refs/heads/branch-1.6
Commit: 10d513feb4b657d62d576b39e97ad87a988a9e2a
Parents: 8ac0ce6
Author: Reynold Xin <[email protected]>
Authored: Fri Apr 29 22:26:12 2016 -0700
Committer: Davies Liu <[email protected]>
Committed: Fri Apr 29 22:28:34 2016 -0700

----------------------------------------------------------------------
 .../org/apache/spark/sql/catalyst/expressions/predicates.scala    | 2 +-
 .../apache/spark/sql/catalyst/expressions/PredicateSuite.scala    | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/spark/blob/10d513fe/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/predicates.scala
----------------------------------------------------------------------
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 304b438..77e8506 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
@@ -416,7 +416,7 @@ case class EqualNullSafe(left: Expression, right: 
Expression) extends BinaryComp
     ev.isNull = "false"
     eval1.code + eval2.code + s"""
         boolean ${ev.value} = (${eval1.isNull} && ${eval2.isNull}) ||
-           (!${eval1.isNull} && $equalCode);
+           (!${eval1.isNull} && !${eval2.isNull} && $equalCode);
       """
   }
 }

http://git-wip-us.apache.org/repos/asf/spark/blob/10d513fe/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/PredicateSuite.scala
----------------------------------------------------------------------
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 03e7611..b3f2069 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 = {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to