Build the IfExpression correcty in ExpressionStringBuilder Use IntExpression instead of LongExpression for integers
Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/db0ff636 Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/db0ff636 Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/db0ff636 Branch: refs/heads/master Commit: db0ff6364ee3ff27f6fe4a9a506617ee47c88ae5 Parents: 6976f92 Author: Mehant Baid <[email protected]> Authored: Mon Mar 31 20:41:06 2014 -0700 Committer: Jacques Nadeau <[email protected]> Committed: Sat Apr 19 18:07:09 2014 -0700 ---------------------------------------------------------------------- .../expression/ExpressionStringBuilder.java | 3 +++ .../common/expression/ValueExpressions.java | 8 ++++++- .../sig/ConstantExpressionIdentifier.java | 1 - .../drill/exec/expr/EvaluationVisitor.java | 25 +++++++++++++++++++- .../drill/exec/fn/impl/TestMathFunctions.java | 5 ++-- 5 files changed, 37 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/db0ff636/common/src/main/java/org/apache/drill/common/expression/ExpressionStringBuilder.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/drill/common/expression/ExpressionStringBuilder.java b/common/src/main/java/org/apache/drill/common/expression/ExpressionStringBuilder.java index 4bbc09a..16b3f4d 100644 --- a/common/src/main/java/org/apache/drill/common/expression/ExpressionStringBuilder.java +++ b/common/src/main/java/org/apache/drill/common/expression/ExpressionStringBuilder.java @@ -75,6 +75,9 @@ public class ExpressionStringBuilder extends AbstractExprVisitor<Void, StringBui c.expression.accept(this, sb); sb.append(" ) "); } + sb.append(" else ("); + ifExpr.elseExpression.accept(this, sb); + sb.append(" ) "); sb.append(" end "); sb.append(" ) "); return null; http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/db0ff636/common/src/main/java/org/apache/drill/common/expression/ValueExpressions.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/drill/common/expression/ValueExpressions.java b/common/src/main/java/org/apache/drill/common/expression/ValueExpressions.java index 10cf152..4b83e7d 100644 --- a/common/src/main/java/org/apache/drill/common/expression/ValueExpressions.java +++ b/common/src/main/java/org/apache/drill/common/expression/ValueExpressions.java @@ -35,7 +35,7 @@ public class ValueExpressions { } public static LogicalExpression getInt(int i){ - return new LongExpression(i); + return new IntExpression(i, ExpressionPosition.UNKNOWN); } public static LogicalExpression getFloat8(double d){ @@ -76,6 +76,12 @@ public class ValueExpressions { public static LogicalExpression getNumericExpression(String s, ExpressionPosition ep) { try { + int a = Integer.parseInt(s); + return new IntExpression(a, ep); + } catch (Exception e) { + + } + try { long l = Long.parseLong(s); return new LongExpression(l, ep); } catch (Exception e) { http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/db0ff636/exec/java-exec/src/main/java/org/apache/drill/exec/compile/sig/ConstantExpressionIdentifier.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/compile/sig/ConstantExpressionIdentifier.java b/exec/java-exec/src/main/java/org/apache/drill/exec/compile/sig/ConstantExpressionIdentifier.java index b9a9ae2..2a87bab 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/compile/sig/ConstantExpressionIdentifier.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/compile/sig/ConstantExpressionIdentifier.java @@ -114,7 +114,6 @@ public class ConstantExpressionIdentifier implements ExprVisitor<Boolean, Identi @Override public Boolean visitIntConstant(ValueExpressions.IntExpression intExpr, IdentityHashMap<LogicalExpression, Object> value) throws RuntimeException { - value.put(intExpr, true); return true; } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/db0ff636/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 ac536e4..b7670ee 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 @@ -32,6 +32,7 @@ import org.apache.drill.common.expression.ValueExpressions; import org.apache.drill.common.expression.ValueExpressions.BooleanExpression; import org.apache.drill.common.expression.ValueExpressions.DoubleExpression; import org.apache.drill.common.expression.ValueExpressions.LongExpression; +import org.apache.drill.common.expression.ValueExpressions.IntExpression; import org.apache.drill.common.expression.ValueExpressions.DateExpression; import org.apache.drill.common.expression.ValueExpressions.IntervalYearExpression; import org.apache.drill.common.expression.ValueExpressions.IntervalDayExpression; @@ -140,7 +141,7 @@ public class EvaluationVisitor { if (HoldingContainer.isOptional()) { jc = conditionalBlock._if(HoldingContainer.getIsSet().cand(HoldingContainer.getValue())); } else { - jc = conditionalBlock._if(HoldingContainer.getValue()); + jc = conditionalBlock._if(HoldingContainer.getValue().eq(JExpr.lit(1))); } } else { if (HoldingContainer.isOptional()) { @@ -190,6 +191,13 @@ public class EvaluationVisitor { } @Override + public HoldingContainer visitIntConstant(IntExpression e, ClassGenerator<?> generator) throws RuntimeException { + HoldingContainer out = generator.declare(e.getMajorType()); + generator.getEvalBlock().assign(out.getValue(), JExpr.lit(e.getInt())); + return out; + } + + @Override public HoldingContainer visitDateConstant(DateExpression e, ClassGenerator<?> generator) throws RuntimeException { HoldingContainer out = generator.declare(e.getMajorType()); generator.getEvalBlock().assign(out.getValue(), JExpr.lit(e.getDate())); @@ -461,6 +469,21 @@ public class EvaluationVisitor { } @Override + public HoldingContainer visitIntConstant(IntExpression e, ClassGenerator<?> generator) throws RuntimeException { + if (constantBoundaries.contains(e)) { + generator.getMappingSet().enterConstant(); + HoldingContainer c = super.visitIntConstant(e, generator); + //generator.getMappingSet().exitConstant(); + //return c; + return renderConstantExpression(generator, c); + } else if (generator.getMappingSet().isWithinConstant()) { + return super.visitIntConstant(e, generator).setConstant(true); + } else { + return super.visitIntConstant(e, generator); + } + } + + @Override public HoldingContainer visitDateConstant(DateExpression e, ClassGenerator<?> generator) throws RuntimeException { if (constantBoundaries.contains(e)) { generator.getMappingSet().enterConstant(); http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/db0ff636/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestMathFunctions.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestMathFunctions.java b/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestMathFunctions.java index cc90f13..a23b31c 100644 --- a/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestMathFunctions.java +++ b/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestMathFunctions.java @@ -44,6 +44,7 @@ import org.apache.drill.exec.proto.ExecProtos.FragmentHandle; import org.apache.drill.exec.rpc.user.UserServer.UserClientConnection; import org.apache.drill.exec.server.DrillbitContext; import org.apache.drill.exec.vector.BigIntVector; +import org.apache.drill.exec.vector.IntVector; import org.apache.drill.exec.vector.Float8Vector; import org.junit.Test; @@ -77,9 +78,9 @@ public class TestMathFunctions { SimpleRootExec exec = new SimpleRootExec(ImplCreator.getExec(context, (FragmentRoot) plan.getSortedOperators(false).iterator().next())); while(exec.next()) { - BigIntVector intMulVector = exec.getValueVectorById(new SchemaPath("INTMUL", ExpressionPosition.UNKNOWN), BigIntVector.class); + IntVector intMulVector = exec.getValueVectorById(new SchemaPath("INTMUL", ExpressionPosition.UNKNOWN), IntVector.class); Float8Vector floatMulVector = exec.getValueVectorById(new SchemaPath("FLOATMUL", ExpressionPosition.UNKNOWN), Float8Vector.class); - BigIntVector intAddVector = exec.getValueVectorById(new SchemaPath("INTADD", ExpressionPosition.UNKNOWN), BigIntVector.class); + IntVector intAddVector = exec.getValueVectorById(new SchemaPath("INTADD", ExpressionPosition.UNKNOWN), IntVector.class); Float8Vector floatAddVector = exec.getValueVectorById(new SchemaPath("FLOATADD", ExpressionPosition.UNKNOWN), Float8Vector.class); assertEquals(exec.getRecordCount(), 1); assertEquals(intMulVector.getAccessor().get(0), 2);
