From 4dcac1909eb687d226136c5794b2cf0c07e5733a Mon Sep 17 00:00:00 2001 From: Jinfeng Ni Date: Thu, 28 Aug 2014 15:27:11 -0700 Subject: DRILL-1265: Drill may incorrectly return null when evaluates an expression of repeated list. The fix is to correctly set offsets vectors for repeated list vector. --- .../org/apache/drill/exec/vector/complex/RepeatedListVector.java | 3 ++- .../drill/exec/vector/complex/writer/TestComplexTypeReader.java | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'exec/java-exec/src') diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedListVector.java b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedListVector.java index 00716cf0b..f903b0ca4 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedListVector.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedListVector.java @@ -324,8 +324,9 @@ public class RepeatedListVector extends AbstractContainerVector implements Repea for(int i = holder.start; i < holder.end; i++, newIndex++){ if(!vectorTransfer.copyValueSafe(i, newIndex)) return false; } - if(!this.to.offsets.getMutator().setSafe(to, newIndex)) return false; + if(!this.to.offsets.getMutator().setSafe(to + 1, newIndex)) return false; + this.to.lastSet++; return true; } 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 be018a73b..2e6289762 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 @@ -122,6 +122,12 @@ public class TestComplexTypeReader extends BaseTestQuery{ test("select rl[0][1000] from cp.`jsoninput/input2.json`;"); } + @Test + //repeated list. The repeated list is asked for twice, hence requires copying (evaluation in ProjectRecordBatch) + public void testZ4() throws Exception{ + test("select rl, rl from cp.`jsoninput/input2.json`;"); + } + @Test //repeated map --> Json. It will go beyond the buffer of size 256 allocated in setup. public void testA0() throws Exception{ -- cgit v1.2.3