Repository: incubator-drill
Updated Branches:
  refs/heads/DRILL-1459 [created] 5b61b573e


DRILL-1459: fix an issue that causes jvm to crash: fix field materialization to 
include child nodes during materialization; prevent RecordBatchLoader from 
creating multiple vectors for the same field; fix a test case;


Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/5b61b573
Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/5b61b573
Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/5b61b573

Branch: refs/heads/DRILL-1459
Commit: 5b61b573e5c3c088049b3d3e22327889b8e5f257
Parents: 63d3008
Author: Hanifi Gunes <hgu...@maprtech.com>
Authored: Thu Oct 2 20:44:04 2014 -0700
Committer: Parth Chandra <pchan...@maprtech.com>
Committed: Mon Oct 27 10:06:42 2014 -0700

----------------------------------------------------------------------
 .../apache/drill/exec/record/MaterializedField.java | 16 +++++++++++-----
 .../apache/drill/exec/vector/complex/MapVector.java |  2 +-
 .../exec/vector/complex/writer/TestJsonReader.java  |  3 ---
 3 files changed, 12 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/5b61b573/exec/java-exec/src/main/java/org/apache/drill/exec/record/MaterializedField.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/record/MaterializedField.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/record/MaterializedField.java
index 0ed74fb..b4da2b4 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/record/MaterializedField.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/record/MaterializedField.java
@@ -17,9 +17,11 @@
  */
 package org.apache.drill.exec.record;
 
-import java.util.List;
+import java.util.Collection;
 import java.util.Map;
+import java.util.Set;
 
+import com.google.common.collect.Sets;
 import org.apache.drill.common.expression.FieldReference;
 import org.apache.drill.common.expression.PathSegment;
 import org.apache.drill.common.expression.SchemaPath;
@@ -29,11 +31,11 @@ import org.apache.drill.common.types.Types;
 import org.apache.drill.exec.expr.TypeHelper;
 import org.apache.drill.exec.proto.UserBitShared.SerializedField;
 
-import com.google.common.collect.Lists;
 
 public class MaterializedField {
   private Key key;
-  private List<MaterializedField> children = Lists.newArrayList();
+  // use an ordered set as existing code relies on order (e,g. parquet writer)
+  private Set<MaterializedField> children = Sets.newLinkedHashSet();
 
   private MaterializedField(SchemaPath path, MajorType type) {
     super();
@@ -41,7 +43,11 @@ public class MaterializedField {
   }
 
   public static MaterializedField create(SerializedField serField){
-    return new MaterializedField(SchemaPath.create(serField.getNamePart()), 
serField.getMajorType());
+    MaterializedField field = new 
MaterializedField(SchemaPath.create(serField.getNamePart()), 
serField.getMajorType());
+    for (SerializedField sf:serField.getChildList()) {
+      field.addChild(MaterializedField.create(sf));
+    }
+    return field;
   }
 
   public SerializedField.Builder getAsBuilder(){
@@ -50,7 +56,7 @@ public class MaterializedField {
         .setNamePart(key.path.getAsNamePart());
   }
 
-  public List<MaterializedField> getChildren() {
+  public Collection<MaterializedField> getChildren() {
     return children;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/5b61b573/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/MapVector.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/MapVector.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/MapVector.java
index 3403fc3..1e4c8c4 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/MapVector.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/MapVector.java
@@ -327,6 +327,7 @@ public class MapVector extends AbstractContainerVector {
       if (v == null) {
         // if we arrive here, we didn't have a matching vector.
         v = TypeHelper.getNewVector(fieldDef, allocator);
+        put(fieldDef.getLastName(), v);
       }
       if (fmd.getValueCount() == 0) {
         v.clear();
@@ -334,7 +335,6 @@ public class MapVector extends AbstractContainerVector {
         v.load(fmd, buf.slice(bufOffset, fmd.getBufferLength()));
       }
       bufOffset += fmd.getBufferLength();
-      put(fieldDef.getLastName(), v);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/5b61b573/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestJsonReader.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestJsonReader.java
 
b/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestJsonReader.java
index e8f4331..f207bba 100644
--- 
a/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestJsonReader.java
+++ 
b/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestJsonReader.java
@@ -227,9 +227,6 @@ public class TestJsonReader extends BaseTestQuery {
   }
 
   private void testExistentColumns(RecordBatchLoader batchLoader, 
QueryResultBatch batch) throws SchemaChangeException {
-
-    assertTrue(batchLoader.load(batch.getHeader().getDef(), batch.getData()));
-
     VectorWrapper<?> vw = batchLoader.getValueAccessorById(
         RepeatedBigIntVector.class, //
         
batchLoader.getValueVectorId(SchemaPath.getCompoundPath("field_1")).getFieldIds()
 //

Reply via email to