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

Reply via email to