DRILL-1006 : Fix case expression when conditions are expression of nullable types.
Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/c373a278 Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/c373a278 Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/c373a278 Branch: refs/heads/master Commit: c373a278f637235e989787517416f141d42b2d29 Parents: 4205780 Author: Jinfeng Ni <[email protected]> Authored: Tue Jun 17 13:12:05 2014 -0700 Committer: Jinfeng Ni <[email protected]> Committed: Wed Jun 18 07:14:10 2014 -0700 ---------------------------------------------------------------------- .../common/expression/visitors/ExpressionValidator.java | 6 +++--- .../org/apache/drill/exec/expr/EvaluationVisitor.java | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/c373a278/common/src/main/java/org/apache/drill/common/expression/visitors/ExpressionValidator.java ---------------------------------------------------------------------- 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 c8b7857..1bfb57d 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++; } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/c373a278/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 efc7259..d65e618 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()); }
