DRILL-1250 : Fix compilation error in generated code when Drill evaluates an 
expression that returns a repeated scalar value.


Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/8c665257
Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/8c665257
Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/8c665257

Branch: refs/heads/master
Commit: 8c66525735d011c763a4ed913d46e07cd60aea23
Parents: 49d238e
Author: Jinfeng Ni <j...@maprtech.com>
Authored: Tue Aug 5 13:13:52 2014 -0700
Committer: Jacques Nadeau <jacq...@apache.org>
Committed: Wed Aug 6 17:30:50 2014 -0700

----------------------------------------------------------------------
 .../java/org/apache/drill/exec/expr/EvaluationVisitor.java     | 6 +++---
 .../exec/vector/complex/writer/TestComplexTypeReader.java      | 6 ++++++
 2 files changed, 9 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/8c665257/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 73ce45e..caf9179 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
@@ -265,14 +265,14 @@ public class EvaluationVisitor {
 
       final LogicalExpression child = e.getChild();
       final HoldingContainer inputContainer = child.accept(this, generator);
-      final boolean complex = Types.isComplex(inputContainer.getMajorType());
-      final boolean repeated = Types.isRepeated(inputContainer.getMajorType());
 
       JBlock block = generator.getEvalBlock();
       JExpression outIndex = generator.getMappingSet().getValueWriteIndex();
       JVar vv = 
generator.declareVectorValueSetupAndMember(generator.getMappingSet().getOutgoing(),
 e.getFieldId());
 
-      if (complex || repeated) {
+      // Only when the input is a reader, use writer interface to copy value.
+      // Otherwise, input is a holder and we use vv mutator to set value.
+      if (inputContainer.isReader()) {
         JType writerImpl = generator.getModel()._ref(
             TypeHelper.getWriterImpl(inputContainer.getMinorType(), 
inputContainer.getMajorType().getMode()));
         JType writerIFace = generator.getModel()._ref(

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/8c665257/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestComplexTypeReader.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestComplexTypeReader.java
 
b/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestComplexTypeReader.java
index e459c4c..be018a7 100644
--- 
a/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestComplexTypeReader.java
+++ 
b/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestComplexTypeReader.java
@@ -171,4 +171,10 @@ public class TestComplexTypeReader extends BaseTestQuery{
     test("  select types[1].minor[0].valueholder from 
cp.`jsoninput/vvtypes.json`;");
   }
 
+  @Test  // DRILL-1250
+  //repeated scalar values evaluation.
+  public void test_repeatedList() throws Exception{
+    test("select l, l from cp.`jsoninput/input2.json`;");
+  }
+
 }

Reply via email to