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.
Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/4dcac190 Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/4dcac190 Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/4dcac190 Branch: refs/heads/master Commit: 4dcac1909eb687d226136c5794b2cf0c07e5733a Parents: f7d575b Author: Jinfeng Ni <[email protected]> Authored: Thu Aug 28 15:27:11 2014 -0700 Committer: Jacques Nadeau <[email protected]> Committed: Fri Aug 29 00:14:31 2014 -0700 ---------------------------------------------------------------------- .../apache/drill/exec/vector/complex/RepeatedListVector.java | 3 ++- .../exec/vector/complex/writer/TestComplexTypeReader.java | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/4dcac190/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedListVector.java ---------------------------------------------------------------------- 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 00716cf..f903b0c 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; } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/4dcac190/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 be018a7..2e62897 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`;");
