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`;"); + } + }