Repository: incubator-drill
Updated Branches:
  refs/heads/master 64e43d2b7 -> b094c4438


DRILL-1299: Enable short circuit evaluation for case expressions in the 
run-time generated code.


Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/fa3c8d52
Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/fa3c8d52
Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/fa3c8d52

Branch: refs/heads/master
Commit: fa3c8d52a9da0913cc734ff8d3f3968d0e25fab8
Parents: 64e43d2
Author: Jinfeng Ni <j...@maprtech.com>
Authored: Fri Aug 29 14:17:13 2014 -0700
Committer: Jacques Nadeau <jacq...@apache.org>
Committed: Fri Aug 29 17:51:47 2014 -0700

----------------------------------------------------------------------
 .../org/apache/drill/exec/expr/EvaluationVisitor.java     | 10 ++++++++++
 .../test/java/org/apache/drill/TestExampleQueries.java    |  4 ++++
 2 files changed, 14 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/fa3c8d52/exec/java-exec/src/main/java/org/apache/drill/exec/expr/EvaluationVisitor.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/EvaluationVisitor.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/EvaluationVisitor.java
index cf39246..de71eec 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/EvaluationVisitor.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/EvaluationVisitor.java
@@ -160,7 +160,12 @@ public class EvaluationVisitor {
         }
       }
 
+      generator.nestEvalBlock(jc._then());
+
       HoldingContainer thenExpr = c.expression.accept(this, generator);
+
+      generator.unNestEvalBlock();
+
       if (thenExpr.isOptional()) {
         JConditional newCond = 
jc._then()._if(thenExpr.getIsSet().ne(JExpr.lit(0)));
         JBlock b = newCond._then();
@@ -170,7 +175,12 @@ public class EvaluationVisitor {
         jc._then().assign(output.getHolder(), thenExpr.getHolder());
       }
 
+      generator.nestEvalBlock(jc._else());
+
       HoldingContainer elseExpr = ifExpr.elseExpression.accept(this, 
generator);
+
+      generator.unNestEvalBlock();
+
       if (elseExpr.isOptional()) {
         JConditional newCond = 
jc._else()._if(elseExpr.getIsSet().ne(JExpr.lit(0)));
         JBlock b = newCond._then();

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/fa3c8d52/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java 
b/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java
index 57d4043..58a1813 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java
@@ -471,4 +471,8 @@ public class TestExampleQueries extends BaseTestQuery{
     test("select t1.name, t1.kind, t2.n_nationkey from (select * from 
sys.options) t1 join (select * from cp.`tpch/nation.parquet`) t2 on t1.name = 
t2.n_name;");
   }
 
+  @Test
+  public void testCase() throws Exception {
+    test("select case when n_nationkey > 0 and n_nationkey < 2 then 
concat(n_name, '_abc') when n_nationkey >=2 and n_nationkey < 4 then '_EFG' 
else concat(n_name,'_XYZ') end from cp.`tpch/nation.parquet` ;");
+  }
 }

Reply via email to