diff options
author | Jinfeng Ni <jni@maprtech.com> | 2014-08-28 15:27:11 -0700 |
---|---|---|
committer | Jacques Nadeau <jacques@apache.org> | 2014-08-29 00:14:31 -0700 |
commit | 4dcac1909eb687d226136c5794b2cf0c07e5733a (patch) | |
tree | 85d7c71bafe6d07401068ed14c1c21f71a6cead9 /exec/java-exec/src | |
parent | f7d575b4d2dc9cd4375adca5d26b97b6084df3ec (diff) |
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.
Diffstat (limited to 'exec/java-exec/src')
2 files changed, 8 insertions, 1 deletions
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 @@ -123,6 +123,12 @@ public class TestComplexTypeReader extends BaseTestQuery{ } @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{ test(" select convert_to(types, 'JSON') from cp.`jsoninput/vvtypes.json`;"); |