You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by ma...@apache.org on 2014/12/17 06:18:54 UTC
spark git commit: [SPARK-4744] [SQL] Short circuit evaluation for AND
& OR in CodeGen
Repository: spark
Updated Branches:
refs/heads/master 3b395e105 -> 0aa834ade
[SPARK-4744] [SQL] Short circuit evaluation for AND & OR in CodeGen
Author: Cheng Hao <ha...@intel.com>
Closes #3606 from chenghao-intel/codegen_short_circuit and squashes the following commits:
f466303 [Cheng Hao] short circuit for AND & OR
Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/0aa834ad
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/0aa834ad
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/0aa834ad
Branch: refs/heads/master
Commit: 0aa834adeaf4e31d63198e4197dc592790d3d0cc
Parents: 3b395e1
Author: Cheng Hao <ha...@intel.com>
Authored: Tue Dec 16 21:18:39 2014 -0800
Committer: Michael Armbrust <mi...@databricks.com>
Committed: Tue Dec 16 21:18:39 2014 -0800
----------------------------------------------------------------------
.../expressions/codegen/CodeGenerator.scala | 38 ++++++++++----------
1 file changed, 19 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/spark/blob/0aa834ad/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodeGenerator.scala
----------------------------------------------------------------------
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodeGenerator.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodeGenerator.scala
index ab71e15..48727d5 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodeGenerator.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodeGenerator.scala
@@ -314,20 +314,20 @@ abstract class CodeGenerator[InType <: AnyRef, OutType <: AnyRef] extends Loggin
val eval1 = expressionEvaluator(e1)
val eval2 = expressionEvaluator(e2)
- eval1.code ++ eval2.code ++
q"""
+ ..${eval1.code}
var $nullTerm = false
var $primitiveTerm: ${termForType(BooleanType)} = false
- if ((!${eval1.nullTerm} && !${eval1.primitiveTerm}) ||
- (!${eval2.nullTerm} && !${eval2.primitiveTerm})) {
- $nullTerm = false
- $primitiveTerm = false
- } else if (${eval1.nullTerm} || ${eval2.nullTerm} ) {
- $nullTerm = true
+ if (!${eval1.nullTerm} && ${eval1.primitiveTerm} == false) {
} else {
- $nullTerm = false
- $primitiveTerm = true
+ ..${eval2.code}
+ if (!${eval2.nullTerm} && ${eval2.primitiveTerm} == false) {
+ } else if (!${eval1.nullTerm} && !${eval2.nullTerm}) {
+ $primitiveTerm = true
+ } else {
+ $nullTerm = true
+ }
}
""".children
@@ -335,20 +335,22 @@ abstract class CodeGenerator[InType <: AnyRef, OutType <: AnyRef] extends Loggin
val eval1 = expressionEvaluator(e1)
val eval2 = expressionEvaluator(e2)
- eval1.code ++ eval2.code ++
q"""
+ ..${eval1.code}
var $nullTerm = false
var $primitiveTerm: ${termForType(BooleanType)} = false
- if ((!${eval1.nullTerm} && ${eval1.primitiveTerm}) ||
- (!${eval2.nullTerm} && ${eval2.primitiveTerm})) {
- $nullTerm = false
+ if (!${eval1.nullTerm} && ${eval1.primitiveTerm}) {
$primitiveTerm = true
- } else if (${eval1.nullTerm} || ${eval2.nullTerm} ) {
- $nullTerm = true
} else {
- $nullTerm = false
- $primitiveTerm = false
+ ..${eval2.code}
+ if (!${eval2.nullTerm} && ${eval2.primitiveTerm}) {
+ $primitiveTerm = true
+ } else if (!${eval1.nullTerm} && !${eval2.nullTerm}) {
+ $primitiveTerm = false
+ } else {
+ $nullTerm = true
+ }
}
""".children
@@ -373,7 +375,6 @@ abstract class CodeGenerator[InType <: AnyRef, OutType <: AnyRef] extends Loggin
} else if (${eval2.primitiveTerm} == 0)
$nullTerm = true
else {
- $nullTerm = false
$primitiveTerm = ${eval1.primitiveTerm} / ${eval2.primitiveTerm}
}
""".children
@@ -494,7 +495,6 @@ abstract class CodeGenerator[InType <: AnyRef, OutType <: AnyRef] extends Loggin
$nullTerm = ${eval1.nullTerm}
$primitiveTerm = ${eval1.primitiveTerm}
} else {
- $nullTerm = false
if (${eval1.primitiveTerm} > ${eval2.primitiveTerm}) {
$primitiveTerm = ${eval1.primitiveTerm}
} else {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org