aboutsummaryrefslogtreecommitdiff
path: root/exec
diff options
context:
space:
mode:
authorJinfeng Ni <jni@maprtech.com>2014-08-29 14:17:13 -0700
committerJacques Nadeau <jacques@apache.org>2014-08-29 17:51:47 -0700
commitfa3c8d52a9da0913cc734ff8d3f3968d0e25fab8 (patch)
tree8e633019c5029e67f13d2b332ee1809569f755b3 /exec
parent64e43d2b770cb420b8f4fa9cf390b07efa5da44e (diff)
DRILL-1299: Enable short circuit evaluation for case expressions in the run-time generated code.
Diffstat (limited to 'exec')
-rw-r--r--exec/java-exec/src/main/java/org/apache/drill/exec/expr/EvaluationVisitor.java10
-rw-r--r--exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java4
2 files changed, 14 insertions, 0 deletions
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 cf3924640..de71eec0c 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();
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 57d4043c5..58a18137b 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` ;");
+ }
}