diff options
author | Jinfeng Ni <jni@maprtech.com> | 2014-06-17 13:12:05 -0700 |
---|---|---|
committer | Jinfeng Ni <jni@maprtech.com> | 2014-06-18 07:14:10 -0700 |
commit | c373a278f637235e989787517416f141d42b2d29 (patch) | |
tree | 050ae74bef85fe1edcfba93362856a1689081e68 | |
parent | 42057800b1f2a4f1bdf771760c9c33a822fc435b (diff) |
DRILL-1006 : Fix case expression when conditions are expression of nullable types.
-rw-r--r-- | common/src/main/java/org/apache/drill/common/expression/visitors/ExpressionValidator.java | 6 | ||||
-rw-r--r-- | exec/java-exec/src/main/java/org/apache/drill/exec/expr/EvaluationVisitor.java | 10 |
2 files changed, 8 insertions, 8 deletions
diff --git a/common/src/main/java/org/apache/drill/common/expression/visitors/ExpressionValidator.java b/common/src/main/java/org/apache/drill/common/expression/visitors/ExpressionValidator.java index c8b78575c..1bfb57d56 100644 --- a/common/src/main/java/org/apache/drill/common/expression/visitors/ExpressionValidator.java +++ b/common/src/main/java/org/apache/drill/common/expression/visitors/ExpressionValidator.java @@ -78,14 +78,14 @@ public class ExpressionValidator implements ExprVisitor<Void, ErrorCollector, Ru int i = 0; for (IfCondition c : ifExpr.conditions) { MajorType mt = c.condition.getMajorType(); - if (mt.getMode() != DataMode.REQUIRED || mt.getMinorType() != MinorType.BIT) { + if ( mt.getMinorType() != MinorType.BIT) { errors .addGeneralError( c.condition.getPosition(), String .format( - "Failure composing If Expression. All conditions must return a required value and be of type boolean. Condition %d was DatMode %s and Type %s.", - i, mt.getMode(), mt.getMinorType())); + "Failure composing If Expression. All conditions must return a boolean type. Condition %d was of Type %s.", + i, mt.getMinorType())); } i++; } 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 efc725909..d65e61891 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 @@ -159,15 +159,15 @@ public class EvaluationVisitor { HoldingContainer holdingContainer = c.condition.accept(this, generator); if (jc == null) { if (holdingContainer.isOptional()) { - jc = conditionalBlock._if(holdingContainer.getIsSet().cand(holdingContainer.getValue())); + jc = conditionalBlock._if(holdingContainer.getIsSet().eq(JExpr.lit(1)).cand(holdingContainer.getValue().eq(JExpr.lit(1)))); } else { jc = conditionalBlock._if(holdingContainer.getValue().eq(JExpr.lit(1))); } } else { if (holdingContainer.isOptional()) { - jc = jc._else()._if(holdingContainer.getIsSet().cand(holdingContainer.getValue())); + jc = jc._else()._if(holdingContainer.getIsSet().eq(JExpr.lit(1)).cand(holdingContainer.getValue().eq(JExpr.lit(1)))); } else { - jc = jc._else()._if(holdingContainer.getValue()); + jc = jc._else()._if(holdingContainer.getValue().eq(JExpr.lit(1))); } } @@ -176,7 +176,7 @@ public class EvaluationVisitor { JConditional newCond = jc._then()._if(thenExpr.getIsSet().ne(JExpr.lit(0))); JBlock b = newCond._then(); b.assign(output.getHolder(), thenExpr.getHolder()); - b.assign(output.getIsSet(), thenExpr.getIsSet()); + //b.assign(output.getIsSet(), thenExpr.getIsSet()); } else { jc._then().assign(output.getHolder(), thenExpr.getHolder()); } @@ -188,7 +188,7 @@ public class EvaluationVisitor { JConditional newCond = jc._else()._if(elseExpr.getIsSet().ne(JExpr.lit(0))); JBlock b = newCond._then(); b.assign(output.getHolder(), elseExpr.getHolder()); - b.assign(output.getIsSet(), elseExpr.getIsSet()); + //b.assign(output.getIsSet(), elseExpr.getIsSet()); } else { jc._else().assign(output.getHolder(), elseExpr.getHolder()); } |