From a08f09cabe7c2fe49ce8289c4c9b05ecab3870f7 Mon Sep 17 00:00:00 2001 From: Cheng Hao Date: Tue, 22 Apr 2014 10:42:59 +0800 Subject: [PATCH] fix bug in or/and short-circuit evaluation --- .../sql/catalyst/expressions/predicates.scala | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 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 27758b0add46..4f8d22e71c44 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 @@ -98,16 +98,18 @@ case class And(left: Expression, right: Expression) extends BinaryPredicate { override def eval(input: Row): Any = { val l = left.eval(input) - if(l == null) { - null - } else if(l == false) { - false + if(l == false) { + false } else { val r = right.eval(input) - if(r == null) { - null + if(r == false) { + false } else { - r + if(l != null && r != null) { + true + } else { + null + } } } } @@ -118,16 +120,18 @@ case class Or(left: Expression, right: Expression) extends BinaryPredicate { override def eval(input: Row): Any = { val l = left.eval(input) - if(l == null) { - null - } else if(l == true) { + if(l == true) { true } else { val r = right.eval(input) - if(r == null) { - null + if(r == true) { + true } else { - r + if(l != null && r != null) { + false + } else { + null + } } } }