You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@drill.apache.org by ja...@apache.org on 2014/04/20 03:18:22 UTC

[14/51] [abbrv] git commit: Build the IfExpression correcty in ExpressionStringBuilder Use IntExpression instead of LongExpression for integers

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 <me...@gmail.com>
Authored: Mon Mar 31 20:41:06 2014 -0700
Committer: Jacques Nadeau <ja...@apache.org>
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);