You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by hg...@apache.org on 2015/06/16 01:11:09 UTC

drill git commit: DRILL-2997: Remove references to groupCount from SerializedField

Repository: drill
Updated Branches:
  refs/heads/master 288c95223 -> 68c933c75


DRILL-2997: Remove references to groupCount from SerializedField


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

Branch: refs/heads/master
Commit: 68c933c75f3832abd5a56d31937c45d3087cee47
Parents: 288c952
Author: Hanifi Gunes <hg...@maprtech.com>
Authored: Mon Jun 8 16:47:45 2015 -0700
Committer: Hanifi Gunes <hg...@maprtech.com>
Committed: Mon Jun 15 16:14:52 2015 -0700

----------------------------------------------------------------------
 .../codegen/templates/RepeatedValueVectors.java |  35 +--
 .../templates/VariableLengthVectors.java        |   5 +-
 .../drill/exec/record/RecordBatchLoader.java    |   2 +-
 .../drill/exec/vector/BaseValueVector.java      |   2 +-
 .../exec/vector/complex/AbstractMapVector.java  |   8 +-
 .../vector/complex/BaseRepeatedValueVector.java |  26 +-
 .../drill/exec/vector/complex/MapVector.java    |  24 +-
 .../complex/RepeatedFixedWidthVectorLike.java   |  16 -
 .../exec/vector/complex/RepeatedListVector.java |  45 +--
 .../exec/vector/complex/RepeatedMapVector.java  |  71 +++--
 .../RepeatedVariableWidthVectorLike.java        |  12 -
 .../apache/drill/exec/expr/ExpressionTest.java  |   8 +-
 .../vector/complex/TestEmptyPopulation.java     |   2 +-
 .../fn/TestJsonReaderWithSparseFiles.java       |   2 +-
 .../drill/exec/proto/SchemaUserBitShared.java   |  13 +-
 .../apache/drill/exec/proto/UserBitShared.java  | 301 +++++++------------
 .../drill/exec/proto/beans/SerializedField.java |  28 +-
 protocol/src/main/protobuf/UserBitShared.proto  |   1 -
 18 files changed, 209 insertions(+), 392 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/68c933c7/exec/java-exec/src/main/codegen/templates/RepeatedValueVectors.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/codegen/templates/RepeatedValueVectors.java b/exec/java-exec/src/main/codegen/templates/RepeatedValueVectors.java
index 12dce25..6431d88 100644
--- a/exec/java-exec/src/main/codegen/templates/RepeatedValueVectors.java
+++ b/exec/java-exec/src/main/codegen/templates/RepeatedValueVectors.java
@@ -228,23 +228,7 @@ public final class Repeated${minor.class}Vector extends BaseRepeatedValueVector
     offsets.zeroVector();
     mutator.reset();
   }
-  
-  @Override
-  public int load(int dataBytes, int valueCount, int innerValueCount, DrillBuf buf){
-    clear();
-    int loaded = 0;
-    loaded += offsets.load(valueCount+1, buf.slice(loaded, buf.capacity() - loaded));
-    loaded += values.load(dataBytes + 4*(innerValueCount + 1), innerValueCount, buf.slice(loaded, buf.capacity() - loaded));
-    return loaded;
-  }
-  
-  @Override
-  public void load(SerializedField metadata, DrillBuf buffer) {
-    assert this.field.matches(metadata) : String.format("The field %s doesn't match the provided metadata %s.", this.field, metadata);
-    int loaded = load(metadata.getVarByteLength(), metadata.getGroupCount(), metadata.getValueCount(), buffer);
-    assert metadata.getBufferLength() == loaded : String.format("Expected to load %d bytes but actually loaded %d bytes", metadata.getBufferLength(), loaded);
-  }
-  
+
   public int getByteCapacity(){
     return values.getByteCapacity();
   }
@@ -255,7 +239,7 @@ public final class Repeated${minor.class}Vector extends BaseRepeatedValueVector
     clear();
     /* boolean to keep track if all the memory allocation were successful
      * Used in the case of composite vectors when we need to allocate multiple
-     * buffers for multiple vectors. If one of the allocations failed we need to
+     * buffers for multiple vectors. If one of the allocations failed we need to//
      * clear all the memory that we allocated
      */
     boolean success = false;
@@ -269,21 +253,6 @@ public final class Repeated${minor.class}Vector extends BaseRepeatedValueVector
     offsets.zeroVector();
     mutator.reset();
   }
-  
-  public int load(int valueCount, int innerValueCount, DrillBuf buf){
-    clear();
-    int loaded = 0;
-    loaded += offsets.load(valueCount+1, buf.slice(loaded, buf.capacity() - loaded));
-    loaded += values.load(innerValueCount, buf.slice(loaded, buf.capacity() - loaded));
-    return loaded;
-  }
-  
-  @Override
-  public void load(SerializedField metadata, DrillBuf buffer) {
-    assert this.field.matches(metadata);
-    int loaded = load(metadata.getGroupCount(), metadata.getValueCount(), buffer);
-    assert metadata.getBufferLength() == loaded;
-  }
   </#if>
 
 

http://git-wip-us.apache.org/repos/asf/drill/blob/68c933c7/exec/java-exec/src/main/codegen/templates/VariableLengthVectors.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/codegen/templates/VariableLengthVectors.java b/exec/java-exec/src/main/codegen/templates/VariableLengthVectors.java
index bd41e10..50ae770 100644
--- a/exec/java-exec/src/main/codegen/templates/VariableLengthVectors.java
+++ b/exec/java-exec/src/main/codegen/templates/VariableLengthVectors.java
@@ -57,6 +57,9 @@ public final class ${minor.class}Vector extends BaseDataValueVector implements V
   private static final int INITIAL_BYTE_COUNT = 4096 * DEFAULT_RECORD_BYTE_COUNT;
   private static final int MIN_BYTE_COUNT = 4096;
 
+  public final static String OFFSETS_VECTOR_NAME = "offsets";
+  private final static MaterializedField offsetsField =
+    MaterializedField.create(OFFSETS_VECTOR_NAME, Types.required(MinorType.UINT4));
   private final UInt${type.width}Vector offsetVector;
   private final FieldReader reader = new ${minor.class}ReaderImpl(${minor.class}Vector.this);
 
@@ -71,7 +74,7 @@ public final class ${minor.class}Vector extends BaseDataValueVector implements V
 
   public ${minor.class}Vector(MaterializedField field, BufferAllocator allocator) {
     super(field, allocator);
-    this.offsetVector = new UInt${type.width}Vector(null, allocator);
+    this.offsetVector = new UInt${type.width}Vector(offsetsField, allocator);
     this.oAccessor = offsetVector.getAccessor();
     this.accessor = new Accessor();
     this.mutator = new Mutator();

http://git-wip-us.apache.org/repos/asf/drill/blob/68c933c7/exec/java-exec/src/main/java/org/apache/drill/exec/record/RecordBatchLoader.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/record/RecordBatchLoader.java b/exec/java-exec/src/main/java/org/apache/drill/exec/record/RecordBatchLoader.java
index de6f665..8e3b9e5 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/record/RecordBatchLoader.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/record/RecordBatchLoader.java
@@ -93,7 +93,7 @@ public class RecordBatchLoader implements VectorAccessible, Iterable<VectorWrapp
           vector = TypeHelper.getNewVector(fieldDef, allocator);
         }
 
-        if (field.getValueCount() == 0 && (!field.hasGroupCount() || field.getGroupCount() == 0)) {
+        if (field.getValueCount() == 0) {
           AllocationHelper.allocate(vector, 0, 0, 0);
         } else {
           vector.load(field, buf.slice(bufOffset, field.getBufferLength()));

http://git-wip-us.apache.org/repos/asf/drill/blob/68c933c7/exec/java-exec/src/main/java/org/apache/drill/exec/vector/BaseValueVector.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/BaseValueVector.java b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/BaseValueVector.java
index ec409a3..8129668 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/BaseValueVector.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/BaseValueVector.java
@@ -35,7 +35,7 @@ public abstract class BaseValueVector implements ValueVector {
   public static final int INITIAL_VALUE_ALLOCATION = 4096;
 
   protected BaseValueVector(MaterializedField field, BufferAllocator allocator) {
-    this.field = field;
+    this.field = Preconditions.checkNotNull(field, "field cannot be null");
     this.allocator = Preconditions.checkNotNull(allocator, "allocator cannot be null");
   }
 

http://git-wip-us.apache.org/repos/asf/drill/blob/68c933c7/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/AbstractMapVector.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/AbstractMapVector.java b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/AbstractMapVector.java
index af364bd..1df4b81 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/AbstractMapVector.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/AbstractMapVector.java
@@ -44,9 +44,11 @@ public abstract class AbstractMapVector extends AbstractContainerVector {
     super(field, allocator, callBack);
     // create the hierarchy of the child vectors based on the materialized field
     for (MaterializedField child : field.getChildren()) {
-      String fieldName = child.getLastName();
-      ValueVector  v = TypeHelper.getNewVector(child, allocator, callBack);
-      putVector(fieldName, v);
+      if (!child.equals(BaseRepeatedValueVector.OFFSETS_FIELD)) {
+        String fieldName = child.getLastName();
+        ValueVector v = TypeHelper.getNewVector(child, allocator, callBack);
+        putVector(fieldName, v);
+      }
     }
   }
 

http://git-wip-us.apache.org/repos/asf/drill/blob/68c933c7/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/BaseRepeatedValueVector.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/BaseRepeatedValueVector.java b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/BaseRepeatedValueVector.java
index f292e4c..9bf6d85 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/BaseRepeatedValueVector.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/BaseRepeatedValueVector.java
@@ -40,10 +40,10 @@ import org.apache.drill.exec.vector.ZeroVector;
 public abstract class BaseRepeatedValueVector extends BaseValueVector implements RepeatedValueVector {
 
   public final static ValueVector DEFAULT_DATA_VECTOR = ZeroVector.INSTANCE;
-  public final static String OFFSETS_VECTOR_NAME = "offsets";
-  public final static String DATA_VECTOR_NAME = "data";
+  public final static String OFFSETS_VECTOR_NAME = "$offsets$";
+  public final static String DATA_VECTOR_NAME = "$data$";
 
-  private final static MaterializedField offsetsField =
+  public final static MaterializedField OFFSETS_FIELD =
       MaterializedField.create(OFFSETS_VECTOR_NAME, Types.required(TypeProtos.MinorType.UINT4));
 
   protected final UInt4Vector offsets;
@@ -55,7 +55,7 @@ public abstract class BaseRepeatedValueVector extends BaseValueVector implements
 
   protected BaseRepeatedValueVector(MaterializedField field, BufferAllocator allocator, ValueVector vector) {
     super(field, allocator);
-    this.offsets = new UInt4Vector(offsetsField, allocator);
+    this.offsets = new UInt4Vector(OFFSETS_FIELD, allocator);
     this.vector = Preconditions.checkNotNull(vector, "data vector cannot be null");
   }
 
@@ -110,8 +110,7 @@ public abstract class BaseRepeatedValueVector extends BaseValueVector implements
   @Override
   protected UserBitShared.SerializedField.Builder getMetadataBuilder() {
     return super.getMetadataBuilder()
-        .setGroupCount(getAccessor().getValueCount())
-        .setValueCount(getAccessor().getInnerValueCount())
+        .addChild(offsets.getMetadata())
         .addChild(vector.getMetadata());
   }
 
@@ -147,6 +146,21 @@ public abstract class BaseRepeatedValueVector extends BaseValueVector implements
     return buffers;
   }
 
+  @Override
+  public void load(UserBitShared.SerializedField metadata, DrillBuf buffer) {
+    final UserBitShared.SerializedField offsetMetadata = metadata.getChild(0);
+    offsets.load(offsetMetadata, buffer);
+
+    final UserBitShared.SerializedField vectorMetadata = metadata.getChild(1);
+    if (getDataVector() == DEFAULT_DATA_VECTOR) {
+      addOrGetVector(VectorDescriptor.create(vectorMetadata.getMajorType()));
+    }
+
+    final int offsetLength = offsetMetadata.getBufferLength();
+    final int vectorLength = vectorMetadata.getBufferLength();
+    vector.load(vectorMetadata, buffer.slice(offsetLength, vectorLength));
+  }
+
   /**
    * Returns 1 if inner vector is explicitly set via #addOrGetVector else 0
    *

http://git-wip-us.apache.org/repos/asf/drill/blob/68c933c7/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 d0f38c2..3032aac 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
@@ -245,28 +245,28 @@ public class MapVector extends AbstractMapVector {
 
   @Override
   public void load(SerializedField metadata, DrillBuf buf) {
-    List<SerializedField> fields = metadata.getChildList();
+    final List<SerializedField> fields = metadata.getChildList();
     valueCount = metadata.getValueCount();
 
     int bufOffset = 0;
-    for (SerializedField fmd : fields) {
-      MaterializedField fieldDef = MaterializedField.create(fmd);
+    for (final SerializedField child : fields) {
+      final MaterializedField fieldDef = MaterializedField.create(child);
 
-      ValueVector v = getChild(fieldDef.getLastName());
-      if (v == null) {
+      ValueVector vector = getChild(fieldDef.getLastName());
+      if (vector == null) {
         // if we arrive here, we didn't have a matching vector.
-        v = TypeHelper.getNewVector(fieldDef, allocator);
-        putChild(fieldDef.getLastName(), v);
+        vector = TypeHelper.getNewVector(fieldDef, allocator);
+        putChild(fieldDef.getLastName(), vector);
       }
-      if (fmd.getValueCount() == 0 && (!fmd.hasGroupCount() || fmd.getGroupCount() == 0)) {
-        v.clear();
+      if (child.getValueCount() == 0) {
+        vector.clear();
       } else {
-        v.load(fmd, buf.slice(bufOffset, fmd.getBufferLength()));
+        vector.load(child, buf.slice(bufOffset, child.getBufferLength()));
       }
-      bufOffset += fmd.getBufferLength();
+      bufOffset += child.getBufferLength();
     }
 
-    Preconditions.checkArgument(bufOffset == buf.capacity());
+    assert bufOffset == buf.capacity();
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/drill/blob/68c933c7/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedFixedWidthVectorLike.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedFixedWidthVectorLike.java b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedFixedWidthVectorLike.java
index fb7ed2a..a6967f3 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedFixedWidthVectorLike.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedFixedWidthVectorLike.java
@@ -17,8 +17,6 @@
  */
 package org.apache.drill.exec.vector.complex;
 
-import io.netty.buffer.DrillBuf;
-
 /**
  * A {@link org.apache.drill.exec.vector.ValueVector} mix-in that can be used in conjunction with
  * {@link RepeatedValueVector} subtypes.
@@ -39,18 +37,4 @@ public interface RepeatedFixedWidthVectorLike {
    * @param buf Incoming buffer.
    * @return The number of bytes of the buffer that were consumed.
    */
-  int load(int valueCount, int innerValueCount, DrillBuf buf);
-
-//  public interface RepeatedAccessor extends Accessor {
-//    public int getGroupCount();
-//    public int getValueCount();
-//    public int getGroupSizeAtIndex(int index);
-//    public ValueVector getAllChildValues();
-//  }
-//
-//  public interface RepeatedMutator extends Mutator {
-//    public void setValueCounts(int parentValueCount, int childValueCount);
-//    public void setRepetitionAtIndexSafe(int index, int repetitionCount);
-//    public BaseDataValueVector getDataVector();
-//  }
 }

http://git-wip-us.apache.org/repos/asf/drill/blob/68c933c7/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 f6d3d88..f538399 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
@@ -18,6 +18,7 @@
 package org.apache.drill.exec.vector.complex;
 
 import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
 import io.netty.buffer.DrillBuf;
 
 import java.util.Collection;
@@ -187,11 +188,6 @@ public class RepeatedListVector extends AbstractContainerVector
     }
 
     @Override
-    protected SerializedField.Builder getMetadataBuilder() {
-      return super.getMetadataBuilder();
-    }
-
-    @Override
     public TransferPair getTransferPair(FieldReference ref) {
       return makeTransferPair(new DelegateRepeatedVector(ref, allocator));
     }
@@ -216,23 +212,6 @@ public class RepeatedListVector extends AbstractContainerVector
       throw new UnsupportedOperationException();
     }
 
-    @Override
-    public void load(SerializedField metadata, DrillBuf buffer) {
-      //TODO(DRILL-2997): get rid of the notion of "group count" completely
-      final int valueCount = metadata.getGroupCount();
-      final int bufOffset = offsets.load(valueCount + 1, buffer);
-      final SerializedField childField = metadata.getChildList().get(0);
-      if (getDataVector() == DEFAULT_DATA_VECTOR) {
-        addOrGetVector(VectorDescriptor.create(childField.getMajorType()));
-      }
-
-      if (childField.getValueCount() == 0) {
-        vector.clear();
-      } else {
-        vector.load(childField, buffer.slice(bufOffset, childField.getBufferLength()));
-      }
-    }
-
     public void copyFromSafe(int fromIndex, int thisIndex, DelegateRepeatedVector from) {
       if(ephPair == null || ephPair.target != from) {
         ephPair = DelegateTransferPair.class.cast(from.makeTransferPair(this));
@@ -282,13 +261,13 @@ public class RepeatedListVector extends AbstractContainerVector
     super(field, allocator, callBack);
     this.delegate = Preconditions.checkNotNull(delegate);
 
-    final Collection<MaterializedField> children = field.getChildren();
+    final List<MaterializedField> children = Lists.newArrayList(field.getChildren());
     final int childSize = children.size();
-    // repeated list vector cannot have more than one child
-    assert childSize < 2;
-    final boolean hasChild = childSize == 1;
+    assert childSize < 3;
+    final boolean hasChild = childSize > 0;
     if (hasChild) {
-      final MaterializedField child = children.iterator().next();
+      // the last field is data field
+      final MaterializedField child = children.get(childSize-1);
       addOrGetVector(VectorDescriptor.create(child));
     }
   }
@@ -431,11 +410,6 @@ public class RepeatedListVector extends AbstractContainerVector
   }
 
   @Override
-  public int load(int valueCount, int innerValueCount, DrillBuf buf) {
-    throw new UnsupportedOperationException();
-  }
-
-  @Override
   public VectorWithOrdinal getChildVectorWithOrdinal(String name) {
     if (name != null) {
       return null;
@@ -443,15 +417,8 @@ public class RepeatedListVector extends AbstractContainerVector
     return new VectorWithOrdinal(delegate.getDataVector(), 0);
   }
 
-
   public void copyFromSafe(int fromIndex, int thisIndex, RepeatedListVector from) {
     delegate.copyFromSafe(fromIndex, thisIndex, from.delegate);
   }
 
-
-//  protected void setVector(ValueVector newVector) {
-//    vector = Preconditions.checkNotNull(newVector);
-//    getField().addChild(newVector.getField());
-//  }
-
 }

http://git-wip-us.apache.org/repos/asf/drill/blob/68c933c7/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedMapVector.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedMapVector.java b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedMapVector.java
index 4617ede..97f5b39 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedMapVector.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedMapVector.java
@@ -68,7 +68,7 @@ public class RepeatedMapVector extends AbstractMapVector implements RepeatedValu
 
   public RepeatedMapVector(MaterializedField field, BufferAllocator allocator, CallBack callBack){
     super(field, allocator, callBack);
-    this.offsets = new UInt4Vector(null, allocator);
+    this.offsets = new UInt4Vector(BaseRepeatedValueVector.OFFSETS_FIELD, allocator);
     this.emptyPopulator = new EmptyValuePopulator(offsets);
   }
 
@@ -433,43 +433,43 @@ public class RepeatedMapVector extends AbstractMapVector implements RepeatedValu
 
 
   @Override
-  public void load(SerializedField metadata, DrillBuf buf) {
-    List<SerializedField> fields = metadata.getChildList();
-
-    int bufOffset = offsets.load(metadata.getGroupCount()+1, buf);
-
-    for (SerializedField fmd : fields) {
-      MaterializedField fieldDef = MaterializedField.create(fmd);
-      ValueVector v = getChild(fieldDef.getLastName());
-      if (v == null) {
+  public void load(SerializedField metadata, DrillBuf buffer) {
+    final List<SerializedField> children = metadata.getChildList();
+
+    final SerializedField offsetField = children.get(0);
+    offsets.load(offsetField, buffer);
+    int bufOffset = offsetField.getBufferLength();
+
+    for (int i=1; i<children.size(); i++) {
+      final SerializedField child = children.get(i);
+      final MaterializedField fieldDef = MaterializedField.create(child);
+      ValueVector vector = getChild(fieldDef.getLastName());
+      if (vector == null) {
         // if we arrive here, we didn't have a matching vector.
-        v = TypeHelper.getNewVector(fieldDef, allocator);
-        putChild(fieldDef.getLastName(), v);
-      }
-      if (fmd.getValueCount() == 0 && (!fmd.hasGroupCount() || fmd.getGroupCount() == 0)) {
-        v.clear();
-      } else {
-        v.load(fmd, buf.slice(bufOffset, fmd.getBufferLength()));
+        vector = TypeHelper.getNewVector(fieldDef, allocator);
+        putChild(fieldDef.getLastName(), vector);
       }
-      bufOffset += fmd.getBufferLength();
+      final int vectorLength = child.getBufferLength();
+      vector.load(child, buffer.slice(bufOffset, vectorLength));
+      bufOffset += vectorLength;
     }
 
-    Preconditions.checkArgument(bufOffset == buf.capacity());
+    assert bufOffset == buffer.capacity();
   }
 
 
   @Override
   public SerializedField getMetadata() {
-    SerializedField.Builder b = getField() //
+    SerializedField.Builder builder = getField() //
         .getAsBuilder() //
         .setBufferLength(getBufferSize()) //
-        .setGroupCount(accessor.getValueCount())
         // while we don't need to actually read this on load, we need it to make sure we don't skip deserialization of this vector
-        .setValueCount(accessor.getInnerValueCount());
-    for (ValueVector v : getChildren()) {
-      b.addChild(v.getMetadata());
+        .setValueCount(accessor.getValueCount());
+    builder.addChild(offsets.getMetadata());
+    for (final ValueVector child : getChildren()) {
+      builder.addChild(child.getMetadata());
     }
-    return b.build();
+    return builder.build();
   }
 
   @Override
@@ -481,21 +481,23 @@ public class RepeatedMapVector extends AbstractMapVector implements RepeatedValu
 
     @Override
     public Object getObject(int index) {
-      List<Object> l = new JsonStringArrayList();
+      final List<Object> list = new JsonStringArrayList();
       int end = offsets.getAccessor().get(index+1);
       String fieldName;
       for (int i =  offsets.getAccessor().get(index); i < end; i++) {
         Map<String, Object> vv = Maps.newLinkedHashMap();
         for (MaterializedField field:getField().getChildren()) {
-          fieldName = field.getLastName();
-          Object value = getChild(fieldName).getAccessor().getObject(i);
-          if (value != null) {
-            vv.put(fieldName, value);
+          if (!field.equals(BaseRepeatedValueVector.OFFSETS_FIELD)) {
+            fieldName = field.getLastName();
+            final Object value = getChild(fieldName).getAccessor().getObject(i);
+            if (value != null) {
+              vv.put(fieldName, value);
+            }
           }
         }
-        l.add(vv);
+        list.add(vv);
       }
-      return l;
+      return list;
     }
 
     @Override
@@ -595,9 +597,4 @@ public class RepeatedMapVector extends AbstractMapVector implements RepeatedValu
       vector.clear();
     }
   }
-
-  @Override
-  public int load(int valueCount, int innerValueCount, DrillBuf buf) {
-    throw new UnsupportedOperationException();
-  }
 }

http://git-wip-us.apache.org/repos/asf/drill/blob/68c933c7/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedVariableWidthVectorLike.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedVariableWidthVectorLike.java b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedVariableWidthVectorLike.java
index c57143e..67954e7 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedVariableWidthVectorLike.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedVariableWidthVectorLike.java
@@ -17,8 +17,6 @@
  */
 package org.apache.drill.exec.vector.complex;
 
-import io.netty.buffer.DrillBuf;
-
 public interface RepeatedVariableWidthVectorLike {
   /**
    * Allocate a new memory space for this vector.  Must be called prior to using the ValueVector.
@@ -34,14 +32,4 @@ public interface RepeatedVariableWidthVectorLike {
    * @return
    */
   int getByteCapacity();
-
-  /**
-   * Load the records in the provided buffer based on the given number of values.
-   * @param dataBytes   The number of bytes associated with the data array.
-   * @param parentValueCount   Number of separate repeating groupings.
-   * @param childValueCount   Number of supported values in the vector.
-   * @param buf Incoming buffer.
-   * @return The number of bytes of the buffer that were consumed.
-   */
-  int load(int dataBytes, int parentValueCount, int childValueCount, DrillBuf buf);
 }

http://git-wip-us.apache.org/repos/asf/drill/blob/68c933c7/exec/java-exec/src/test/java/org/apache/drill/exec/expr/ExpressionTest.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/expr/ExpressionTest.java b/exec/java-exec/src/test/java/org/apache/drill/exec/expr/ExpressionTest.java
index 239a099..5e50189 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/expr/ExpressionTest.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/expr/ExpressionTest.java
@@ -36,6 +36,8 @@ import org.apache.drill.common.expression.SchemaPath;
 import org.apache.drill.common.expression.parser.ExprLexer;
 import org.apache.drill.common.expression.parser.ExprParser;
 import org.apache.drill.common.expression.parser.ExprParser.parse_return;
+import org.apache.drill.common.types.MajorType;
+import org.apache.drill.common.types.TypeProtos;
 import org.apache.drill.common.types.TypeProtos.MinorType;
 import org.apache.drill.common.types.Types;
 import org.apache.drill.exec.ExecTest;
@@ -43,6 +45,7 @@ import org.apache.drill.exec.expr.fn.FunctionImplementationRegistry;
 import org.apache.drill.exec.memory.BufferAllocator;
 import org.apache.drill.exec.memory.TopLevelAllocator;
 import org.apache.drill.exec.physical.impl.project.Projector;
+import org.apache.drill.exec.record.MaterializedField;
 import org.apache.drill.exec.record.RecordBatch;
 import org.apache.drill.exec.record.TypedFieldId;
 import org.apache.drill.exec.record.VectorWrapper;
@@ -73,7 +76,8 @@ public class ExpressionTest extends ExecTest {
 
   @Test
   public void testSpecial(final @Injectable RecordBatch batch, @Injectable ValueVector vector) throws Exception {
-    final TypedFieldId tfid = new TypedFieldId(Types.optional(MinorType.INT), false, 0);
+    final TypeProtos.MajorType type = Types.optional(MinorType.INT);
+    final TypedFieldId tfid = new TypedFieldId(type, false, 0);
 
     new NonStrictExpectations() {
       @NonStrict VectorWrapper<?> wrapper;
@@ -83,7 +87,7 @@ public class ExpressionTest extends ExecTest {
         batch.getValueAccessorById(IntVector.class, tfid.getFieldIds());
         result = wrapper;
         wrapper.getValueVector();
-        result = new IntVector(null, new TopLevelAllocator(0));
+        result = new IntVector(MaterializedField.create("result", type), new TopLevelAllocator(0));
       }
 
     };

http://git-wip-us.apache.org/repos/asf/drill/blob/68c933c7/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/TestEmptyPopulation.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/TestEmptyPopulation.java b/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/TestEmptyPopulation.java
index 06a73e2..f7f2706 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/TestEmptyPopulation.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/TestEmptyPopulation.java
@@ -41,7 +41,7 @@ public class TestEmptyPopulation extends BaseTestQuery {
 
   @Before
   public void initialize() {
-    offsets = new UInt4Vector(null, allocator);
+    offsets = new UInt4Vector(BaseRepeatedValueVector.OFFSETS_FIELD, allocator);
     offsets.allocateNewSafe();
     accessor = offsets.getAccessor();
     mutator = offsets.getMutator();

http://git-wip-us.apache.org/repos/asf/drill/blob/68c933c7/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/fn/TestJsonReaderWithSparseFiles.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/fn/TestJsonReaderWithSparseFiles.java b/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/fn/TestJsonReaderWithSparseFiles.java
index 544b962..808d98c 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/fn/TestJsonReaderWithSparseFiles.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/fn/TestJsonReaderWithSparseFiles.java
@@ -30,7 +30,7 @@ import org.apache.drill.exec.vector.ValueVector;
 import org.junit.Test;
 
 public class TestJsonReaderWithSparseFiles extends BaseTestQuery {
-  private static interface Function<T> {
+  private interface Function<T> {
     void apply(T param);
   }
 

http://git-wip-us.apache.org/repos/asf/drill/blob/68c933c7/protocol/src/main/java/org/apache/drill/exec/proto/SchemaUserBitShared.java
----------------------------------------------------------------------
diff --git a/protocol/src/main/java/org/apache/drill/exec/proto/SchemaUserBitShared.java b/protocol/src/main/java/org/apache/drill/exec/proto/SchemaUserBitShared.java
index bee2a3d..8c0b66a 100644
--- a/protocol/src/main/java/org/apache/drill/exec/proto/SchemaUserBitShared.java
+++ b/protocol/src/main/java/org/apache/drill/exec/proto/SchemaUserBitShared.java
@@ -1090,10 +1090,8 @@ public final class SchemaUserBitShared
                     output.writeInt32(4, message.getValueCount(), false);
                 if(message.hasVarByteLength())
                     output.writeInt32(5, message.getVarByteLength(), false);
-                if(message.hasGroupCount())
-                    output.writeInt32(6, message.getGroupCount(), false);
                 if(message.hasBufferLength())
-                    output.writeInt32(7, message.getBufferLength(), false);
+                    output.writeInt32(6, message.getBufferLength(), false);
             }
             public boolean isInitialized(org.apache.drill.exec.proto.UserBitShared.SerializedField message)
             {
@@ -1152,9 +1150,6 @@ public final class SchemaUserBitShared
                             builder.setVarByteLength(input.readInt32());
                             break;
                         case 6:
-                            builder.setGroupCount(input.readInt32());
-                            break;
-                        case 7:
                             builder.setBufferLength(input.readInt32());
                             break;
                         default:
@@ -1202,8 +1197,7 @@ public final class SchemaUserBitShared
                 case 3: return "child";
                 case 4: return "valueCount";
                 case 5: return "varByteLength";
-                case 6: return "groupCount";
-                case 7: return "bufferLength";
+                case 6: return "bufferLength";
                 default: return null;
             }
         }
@@ -1220,8 +1214,7 @@ public final class SchemaUserBitShared
             fieldMap.put("child", 3);
             fieldMap.put("valueCount", 4);
             fieldMap.put("varByteLength", 5);
-            fieldMap.put("groupCount", 6);
-            fieldMap.put("bufferLength", 7);
+            fieldMap.put("bufferLength", 6);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/drill/blob/68c933c7/protocol/src/main/java/org/apache/drill/exec/proto/UserBitShared.java
----------------------------------------------------------------------
diff --git a/protocol/src/main/java/org/apache/drill/exec/proto/UserBitShared.java b/protocol/src/main/java/org/apache/drill/exec/proto/UserBitShared.java
index 92afa4f..b8acf05 100644
--- a/protocol/src/main/java/org/apache/drill/exec/proto/UserBitShared.java
+++ b/protocol/src/main/java/org/apache/drill/exec/proto/UserBitShared.java
@@ -8136,32 +8136,22 @@ public final class UserBitShared {
      */
     int getVarByteLength();
 
-    // optional int32 group_count = 6;
+    // optional int32 buffer_length = 6;
     /**
-     * <code>optional int32 group_count = 6;</code>
+     * <code>optional int32 buffer_length = 6;</code>
      *
      * <pre>
-     * number of groups.  (number of repeated records)
+     *optional int32 group_count = 6; // number of groups.  (number of repeated records)
      * </pre>
      */
-    boolean hasGroupCount();
+    boolean hasBufferLength();
     /**
-     * <code>optional int32 group_count = 6;</code>
+     * <code>optional int32 buffer_length = 6;</code>
      *
      * <pre>
-     * number of groups.  (number of repeated records)
+     *optional int32 group_count = 6; // number of groups.  (number of repeated records)
      * </pre>
      */
-    int getGroupCount();
-
-    // optional int32 buffer_length = 7;
-    /**
-     * <code>optional int32 buffer_length = 7;</code>
-     */
-    boolean hasBufferLength();
-    /**
-     * <code>optional int32 buffer_length = 7;</code>
-     */
     int getBufferLength();
   }
   /**
@@ -8261,11 +8251,6 @@ public final class UserBitShared {
             }
             case 48: {
               bitField0_ |= 0x00000010;
-              groupCount_ = input.readInt32();
-              break;
-            }
-            case 56: {
-              bitField0_ |= 0x00000020;
               bufferLength_ = input.readInt32();
               break;
             }
@@ -8456,42 +8441,26 @@ public final class UserBitShared {
       return varByteLength_;
     }
 
-    // optional int32 group_count = 6;
-    public static final int GROUP_COUNT_FIELD_NUMBER = 6;
-    private int groupCount_;
+    // optional int32 buffer_length = 6;
+    public static final int BUFFER_LENGTH_FIELD_NUMBER = 6;
+    private int bufferLength_;
     /**
-     * <code>optional int32 group_count = 6;</code>
+     * <code>optional int32 buffer_length = 6;</code>
      *
      * <pre>
-     * number of groups.  (number of repeated records)
+     *optional int32 group_count = 6; // number of groups.  (number of repeated records)
      * </pre>
      */
-    public boolean hasGroupCount() {
+    public boolean hasBufferLength() {
       return ((bitField0_ & 0x00000010) == 0x00000010);
     }
     /**
-     * <code>optional int32 group_count = 6;</code>
+     * <code>optional int32 buffer_length = 6;</code>
      *
      * <pre>
-     * number of groups.  (number of repeated records)
+     *optional int32 group_count = 6; // number of groups.  (number of repeated records)
      * </pre>
      */
-    public int getGroupCount() {
-      return groupCount_;
-    }
-
-    // optional int32 buffer_length = 7;
-    public static final int BUFFER_LENGTH_FIELD_NUMBER = 7;
-    private int bufferLength_;
-    /**
-     * <code>optional int32 buffer_length = 7;</code>
-     */
-    public boolean hasBufferLength() {
-      return ((bitField0_ & 0x00000020) == 0x00000020);
-    }
-    /**
-     * <code>optional int32 buffer_length = 7;</code>
-     */
     public int getBufferLength() {
       return bufferLength_;
     }
@@ -8502,7 +8471,6 @@ public final class UserBitShared {
       child_ = java.util.Collections.emptyList();
       valueCount_ = 0;
       varByteLength_ = 0;
-      groupCount_ = 0;
       bufferLength_ = 0;
     }
     private byte memoizedIsInitialized = -1;
@@ -8533,10 +8501,7 @@ public final class UserBitShared {
         output.writeInt32(5, varByteLength_);
       }
       if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        output.writeInt32(6, groupCount_);
-      }
-      if (((bitField0_ & 0x00000020) == 0x00000020)) {
-        output.writeInt32(7, bufferLength_);
+        output.writeInt32(6, bufferLength_);
       }
       getUnknownFields().writeTo(output);
     }
@@ -8569,11 +8534,7 @@ public final class UserBitShared {
       }
       if (((bitField0_ & 0x00000010) == 0x00000010)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(6, groupCount_);
-      }
-      if (((bitField0_ & 0x00000020) == 0x00000020)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(7, bufferLength_);
+          .computeInt32Size(6, bufferLength_);
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -8716,10 +8677,8 @@ public final class UserBitShared {
         bitField0_ = (bitField0_ & ~0x00000008);
         varByteLength_ = 0;
         bitField0_ = (bitField0_ & ~0x00000010);
-        groupCount_ = 0;
-        bitField0_ = (bitField0_ & ~0x00000020);
         bufferLength_ = 0;
-        bitField0_ = (bitField0_ & ~0x00000040);
+        bitField0_ = (bitField0_ & ~0x00000020);
         return this;
       }
 
@@ -8784,10 +8743,6 @@ public final class UserBitShared {
         if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
           to_bitField0_ |= 0x00000010;
         }
-        result.groupCount_ = groupCount_;
-        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
-          to_bitField0_ |= 0x00000020;
-        }
         result.bufferLength_ = bufferLength_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
@@ -8843,9 +8798,6 @@ public final class UserBitShared {
         if (other.hasVarByteLength()) {
           setVarByteLength(other.getVarByteLength());
         }
-        if (other.hasGroupCount()) {
-          setGroupCount(other.getGroupCount());
-        }
         if (other.hasBufferLength()) {
           setBufferLength(other.getBufferLength());
         }
@@ -9524,83 +9476,50 @@ public final class UserBitShared {
         return this;
       }
 
-      // optional int32 group_count = 6;
-      private int groupCount_ ;
+      // optional int32 buffer_length = 6;
+      private int bufferLength_ ;
       /**
-       * <code>optional int32 group_count = 6;</code>
+       * <code>optional int32 buffer_length = 6;</code>
        *
        * <pre>
-       * number of groups.  (number of repeated records)
+       *optional int32 group_count = 6; // number of groups.  (number of repeated records)
        * </pre>
        */
-      public boolean hasGroupCount() {
+      public boolean hasBufferLength() {
         return ((bitField0_ & 0x00000020) == 0x00000020);
       }
       /**
-       * <code>optional int32 group_count = 6;</code>
+       * <code>optional int32 buffer_length = 6;</code>
        *
        * <pre>
-       * number of groups.  (number of repeated records)
+       *optional int32 group_count = 6; // number of groups.  (number of repeated records)
        * </pre>
        */
-      public int getGroupCount() {
-        return groupCount_;
+      public int getBufferLength() {
+        return bufferLength_;
       }
       /**
-       * <code>optional int32 group_count = 6;</code>
+       * <code>optional int32 buffer_length = 6;</code>
        *
        * <pre>
-       * number of groups.  (number of repeated records)
+       *optional int32 group_count = 6; // number of groups.  (number of repeated records)
        * </pre>
        */
-      public Builder setGroupCount(int value) {
+      public Builder setBufferLength(int value) {
         bitField0_ |= 0x00000020;
-        groupCount_ = value;
+        bufferLength_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>optional int32 group_count = 6;</code>
+       * <code>optional int32 buffer_length = 6;</code>
        *
        * <pre>
-       * number of groups.  (number of repeated records)
+       *optional int32 group_count = 6; // number of groups.  (number of repeated records)
        * </pre>
        */
-      public Builder clearGroupCount() {
-        bitField0_ = (bitField0_ & ~0x00000020);
-        groupCount_ = 0;
-        onChanged();
-        return this;
-      }
-
-      // optional int32 buffer_length = 7;
-      private int bufferLength_ ;
-      /**
-       * <code>optional int32 buffer_length = 7;</code>
-       */
-      public boolean hasBufferLength() {
-        return ((bitField0_ & 0x00000040) == 0x00000040);
-      }
-      /**
-       * <code>optional int32 buffer_length = 7;</code>
-       */
-      public int getBufferLength() {
-        return bufferLength_;
-      }
-      /**
-       * <code>optional int32 buffer_length = 7;</code>
-       */
-      public Builder setBufferLength(int value) {
-        bitField0_ |= 0x00000040;
-        bufferLength_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional int32 buffer_length = 7;</code>
-       */
       public Builder clearBufferLength() {
-        bitField0_ = (bitField0_ & ~0x00000040);
+        bitField0_ = (bitField0_ & ~0x00000020);
         bufferLength_ = 0;
         onChanged();
         return this;
@@ -20894,86 +20813,86 @@ public final class UserBitShared {
       "(\010\"\205\001\n\010NamePart\022(\n\004type\030\001 \001(\0162\032.exec.sha" +
       "red.NamePart.Type\022\014\n\004name\030\002 \001(\t\022$\n\005child",
       "\030\003 \001(\0132\025.exec.shared.NamePart\"\033\n\004Type\022\010\n" +
-      "\004NAME\020\000\022\t\n\005ARRAY\020\001\"\351\001\n\017SerializedField\022%" +
+      "\004NAME\020\000\022\t\n\005ARRAY\020\001\"\324\001\n\017SerializedField\022%" +
       "\n\nmajor_type\030\001 \001(\0132\021.common.MajorType\022(\n" +
       "\tname_part\030\002 \001(\0132\025.exec.shared.NamePart\022" +
       "+\n\005child\030\003 \003(\0132\034.exec.shared.SerializedF" +
       "ield\022\023\n\013value_count\030\004 \001(\005\022\027\n\017var_byte_le" +
-      "ngth\030\005 \001(\005\022\023\n\013group_count\030\006 \001(\005\022\025\n\rbuffe" +
-      "r_length\030\007 \001(\005\"7\n\nNodeStatus\022\017\n\007node_id\030" +
-      "\001 \001(\005\022\030\n\020memory_footprint\030\002 \001(\003\"\206\002\n\013Quer" +
-      "yResult\0228\n\013query_state\030\001 \001(\0162#.exec.shar",
-      "ed.QueryResult.QueryState\022&\n\010query_id\030\002 " +
-      "\001(\0132\024.exec.shared.QueryId\022(\n\005error\030\003 \003(\013" +
-      "2\031.exec.shared.DrillPBError\"k\n\nQueryStat" +
-      "e\022\013\n\007PENDING\020\000\022\013\n\007RUNNING\020\001\022\r\n\tCOMPLETED" +
-      "\020\002\022\014\n\010CANCELED\020\003\022\n\n\006FAILED\020\004\022\032\n\026CANCELLA" +
-      "TION_REQUESTED\020\005\"p\n\tQueryData\022&\n\010query_i" +
-      "d\030\001 \001(\0132\024.exec.shared.QueryId\022\021\n\trow_cou" +
-      "nt\030\002 \001(\005\022(\n\003def\030\003 \001(\0132\033.exec.shared.Reco" +
-      "rdBatchDef\"\227\001\n\tQueryInfo\022\r\n\005query\030\001 \001(\t\022" +
-      "\r\n\005start\030\002 \001(\003\0222\n\005state\030\003 \001(\0162#.exec.sha",
-      "red.QueryResult.QueryState\022\017\n\004user\030\004 \001(\t" +
-      ":\001-\022\'\n\007foreman\030\005 \001(\0132\026.exec.DrillbitEndp" +
-      "oint\"\272\003\n\014QueryProfile\022 \n\002id\030\001 \001(\0132\024.exec" +
-      ".shared.QueryId\022$\n\004type\030\002 \001(\0162\026.exec.sha" +
-      "red.QueryType\022\r\n\005start\030\003 \001(\003\022\013\n\003end\030\004 \001(" +
-      "\003\022\r\n\005query\030\005 \001(\t\022\014\n\004plan\030\006 \001(\t\022\'\n\007forema" +
-      "n\030\007 \001(\0132\026.exec.DrillbitEndpoint\0222\n\005state" +
-      "\030\010 \001(\0162#.exec.shared.QueryResult.QuerySt" +
-      "ate\022\027\n\017total_fragments\030\t \001(\005\022\032\n\022finished" +
-      "_fragments\030\n \001(\005\022;\n\020fragment_profile\030\013 \003",
-      "(\0132!.exec.shared.MajorFragmentProfile\022\017\n" +
-      "\004user\030\014 \001(\t:\001-\022\r\n\005error\030\r \001(\t\022\024\n\014verbose" +
-      "Error\030\016 \001(\t\022\020\n\010error_id\030\017 \001(\t\022\022\n\nerror_n" +
-      "ode\030\020 \001(\t\"t\n\024MajorFragmentProfile\022\031\n\021maj" +
-      "or_fragment_id\030\001 \001(\005\022A\n\026minor_fragment_p" +
-      "rofile\030\002 \003(\0132!.exec.shared.MinorFragment" +
-      "Profile\"\350\002\n\024MinorFragmentProfile\022)\n\005stat" +
-      "e\030\001 \001(\0162\032.exec.shared.FragmentState\022(\n\005e" +
-      "rror\030\002 \001(\0132\031.exec.shared.DrillPBError\022\031\n" +
-      "\021minor_fragment_id\030\003 \001(\005\0226\n\020operator_pro",
-      "file\030\004 \003(\0132\034.exec.shared.OperatorProfile" +
-      "\022\022\n\nstart_time\030\005 \001(\003\022\020\n\010end_time\030\006 \001(\003\022\023" +
-      "\n\013memory_used\030\007 \001(\003\022\027\n\017max_memory_used\030\010" +
-      " \001(\003\022(\n\010endpoint\030\t \001(\0132\026.exec.DrillbitEn" +
-      "dpoint\022\023\n\013last_update\030\n \001(\003\022\025\n\rlast_prog" +
-      "ress\030\013 \001(\003\"\377\001\n\017OperatorProfile\0221\n\rinput_" +
-      "profile\030\001 \003(\0132\032.exec.shared.StreamProfil" +
-      "e\022\023\n\013operator_id\030\003 \001(\005\022\025\n\roperator_type\030" +
-      "\004 \001(\005\022\023\n\013setup_nanos\030\005 \001(\003\022\025\n\rprocess_na" +
-      "nos\030\006 \001(\003\022#\n\033peak_local_memory_allocated",
-      "\030\007 \001(\003\022(\n\006metric\030\010 \003(\0132\030.exec.shared.Met" +
-      "ricValue\022\022\n\nwait_nanos\030\t \001(\003\"B\n\rStreamPr" +
-      "ofile\022\017\n\007records\030\001 \001(\003\022\017\n\007batches\030\002 \001(\003\022" +
-      "\017\n\007schemas\030\003 \001(\003\"J\n\013MetricValue\022\021\n\tmetri" +
-      "c_id\030\001 \001(\005\022\022\n\nlong_value\030\002 \001(\003\022\024\n\014double" +
-      "_value\030\003 \001(\001*5\n\nRpcChannel\022\017\n\013BIT_CONTRO" +
-      "L\020\000\022\014\n\010BIT_DATA\020\001\022\010\n\004USER\020\002*/\n\tQueryType" +
-      "\022\007\n\003SQL\020\001\022\013\n\007LOGICAL\020\002\022\014\n\010PHYSICAL\020\003*\207\001\n" +
-      "\rFragmentState\022\013\n\007SENDING\020\000\022\027\n\023AWAITING_" +
-      "ALLOCATION\020\001\022\013\n\007RUNNING\020\002\022\014\n\010FINISHED\020\003\022",
-      "\r\n\tCANCELLED\020\004\022\n\n\006FAILED\020\005\022\032\n\026CANCELLATI" +
-      "ON_REQUESTED\020\006*\335\005\n\020CoreOperatorType\022\021\n\rS" +
-      "INGLE_SENDER\020\000\022\024\n\020BROADCAST_SENDER\020\001\022\n\n\006" +
-      "FILTER\020\002\022\022\n\016HASH_AGGREGATE\020\003\022\r\n\tHASH_JOI" +
-      "N\020\004\022\016\n\nMERGE_JOIN\020\005\022\031\n\025HASH_PARTITION_SE" +
-      "NDER\020\006\022\t\n\005LIMIT\020\007\022\024\n\020MERGING_RECEIVER\020\010\022" +
-      "\034\n\030ORDERED_PARTITION_SENDER\020\t\022\013\n\007PROJECT" +
-      "\020\n\022\026\n\022UNORDERED_RECEIVER\020\013\022\020\n\014RANGE_SEND" +
-      "ER\020\014\022\n\n\006SCREEN\020\r\022\034\n\030SELECTION_VECTOR_REM" +
-      "OVER\020\016\022\027\n\023STREAMING_AGGREGATE\020\017\022\016\n\nTOP_N",
-      "_SORT\020\020\022\021\n\rEXTERNAL_SORT\020\021\022\t\n\005TRACE\020\022\022\t\n" +
-      "\005UNION\020\023\022\014\n\010OLD_SORT\020\024\022\032\n\026PARQUET_ROW_GR" +
-      "OUP_SCAN\020\025\022\021\n\rHIVE_SUB_SCAN\020\026\022\025\n\021SYSTEM_" +
-      "TABLE_SCAN\020\027\022\021\n\rMOCK_SUB_SCAN\020\030\022\022\n\016PARQU" +
-      "ET_WRITER\020\031\022\023\n\017DIRECT_SUB_SCAN\020\032\022\017\n\013TEXT" +
-      "_WRITER\020\033\022\021\n\rTEXT_SUB_SCAN\020\034\022\021\n\rJSON_SUB" +
-      "_SCAN\020\035\022\030\n\024INFO_SCHEMA_SUB_SCAN\020\036\022\023\n\017COM" +
-      "PLEX_TO_JSON\020\037\022\025\n\021PRODUCER_CONSUMER\020 \022\022\n" +
-      "\016HBASE_SUB_SCAN\020!\022\n\n\006WINDOW\020\"\022\024\n\020NESTED_" +
-      "LOOP_JOIN\020#\022\021\n\rAVRO_SUB_SCAN\020$B.\n\033org.ap",
-      "ache.drill.exec.protoB\rUserBitSharedH\001"
+      "ngth\030\005 \001(\005\022\025\n\rbuffer_length\030\006 \001(\005\"7\n\nNod" +
+      "eStatus\022\017\n\007node_id\030\001 \001(\005\022\030\n\020memory_footp" +
+      "rint\030\002 \001(\003\"\206\002\n\013QueryResult\0228\n\013query_stat" +
+      "e\030\001 \001(\0162#.exec.shared.QueryResult.QueryS",
+      "tate\022&\n\010query_id\030\002 \001(\0132\024.exec.shared.Que" +
+      "ryId\022(\n\005error\030\003 \003(\0132\031.exec.shared.DrillP" +
+      "BError\"k\n\nQueryState\022\013\n\007PENDING\020\000\022\013\n\007RUN" +
+      "NING\020\001\022\r\n\tCOMPLETED\020\002\022\014\n\010CANCELED\020\003\022\n\n\006F" +
+      "AILED\020\004\022\032\n\026CANCELLATION_REQUESTED\020\005\"p\n\tQ" +
+      "ueryData\022&\n\010query_id\030\001 \001(\0132\024.exec.shared" +
+      ".QueryId\022\021\n\trow_count\030\002 \001(\005\022(\n\003def\030\003 \001(\013" +
+      "2\033.exec.shared.RecordBatchDef\"\227\001\n\tQueryI" +
+      "nfo\022\r\n\005query\030\001 \001(\t\022\r\n\005start\030\002 \001(\003\0222\n\005sta" +
+      "te\030\003 \001(\0162#.exec.shared.QueryResult.Query",
+      "State\022\017\n\004user\030\004 \001(\t:\001-\022\'\n\007foreman\030\005 \001(\0132" +
+      "\026.exec.DrillbitEndpoint\"\272\003\n\014QueryProfile" +
+      "\022 \n\002id\030\001 \001(\0132\024.exec.shared.QueryId\022$\n\004ty" +
+      "pe\030\002 \001(\0162\026.exec.shared.QueryType\022\r\n\005star" +
+      "t\030\003 \001(\003\022\013\n\003end\030\004 \001(\003\022\r\n\005query\030\005 \001(\t\022\014\n\004p" +
+      "lan\030\006 \001(\t\022\'\n\007foreman\030\007 \001(\0132\026.exec.Drillb" +
+      "itEndpoint\0222\n\005state\030\010 \001(\0162#.exec.shared." +
+      "QueryResult.QueryState\022\027\n\017total_fragment" +
+      "s\030\t \001(\005\022\032\n\022finished_fragments\030\n \001(\005\022;\n\020f" +
+      "ragment_profile\030\013 \003(\0132!.exec.shared.Majo",
+      "rFragmentProfile\022\017\n\004user\030\014 \001(\t:\001-\022\r\n\005err" +
+      "or\030\r \001(\t\022\024\n\014verboseError\030\016 \001(\t\022\020\n\010error_" +
+      "id\030\017 \001(\t\022\022\n\nerror_node\030\020 \001(\t\"t\n\024MajorFra" +
+      "gmentProfile\022\031\n\021major_fragment_id\030\001 \001(\005\022" +
+      "A\n\026minor_fragment_profile\030\002 \003(\0132!.exec.s" +
+      "hared.MinorFragmentProfile\"\350\002\n\024MinorFrag" +
+      "mentProfile\022)\n\005state\030\001 \001(\0162\032.exec.shared" +
+      ".FragmentState\022(\n\005error\030\002 \001(\0132\031.exec.sha" +
+      "red.DrillPBError\022\031\n\021minor_fragment_id\030\003 " +
+      "\001(\005\0226\n\020operator_profile\030\004 \003(\0132\034.exec.sha",
+      "red.OperatorProfile\022\022\n\nstart_time\030\005 \001(\003\022" +
+      "\020\n\010end_time\030\006 \001(\003\022\023\n\013memory_used\030\007 \001(\003\022\027" +
+      "\n\017max_memory_used\030\010 \001(\003\022(\n\010endpoint\030\t \001(" +
+      "\0132\026.exec.DrillbitEndpoint\022\023\n\013last_update" +
+      "\030\n \001(\003\022\025\n\rlast_progress\030\013 \001(\003\"\377\001\n\017Operat" +
+      "orProfile\0221\n\rinput_profile\030\001 \003(\0132\032.exec." +
+      "shared.StreamProfile\022\023\n\013operator_id\030\003 \001(" +
+      "\005\022\025\n\roperator_type\030\004 \001(\005\022\023\n\013setup_nanos\030" +
+      "\005 \001(\003\022\025\n\rprocess_nanos\030\006 \001(\003\022#\n\033peak_loc" +
+      "al_memory_allocated\030\007 \001(\003\022(\n\006metric\030\010 \003(",
+      "\0132\030.exec.shared.MetricValue\022\022\n\nwait_nano" +
+      "s\030\t \001(\003\"B\n\rStreamProfile\022\017\n\007records\030\001 \001(" +
+      "\003\022\017\n\007batches\030\002 \001(\003\022\017\n\007schemas\030\003 \001(\003\"J\n\013M" +
+      "etricValue\022\021\n\tmetric_id\030\001 \001(\005\022\022\n\nlong_va" +
+      "lue\030\002 \001(\003\022\024\n\014double_value\030\003 \001(\001*5\n\nRpcCh" +
+      "annel\022\017\n\013BIT_CONTROL\020\000\022\014\n\010BIT_DATA\020\001\022\010\n\004" +
+      "USER\020\002*/\n\tQueryType\022\007\n\003SQL\020\001\022\013\n\007LOGICAL\020" +
+      "\002\022\014\n\010PHYSICAL\020\003*\207\001\n\rFragmentState\022\013\n\007SEN" +
+      "DING\020\000\022\027\n\023AWAITING_ALLOCATION\020\001\022\013\n\007RUNNI" +
+      "NG\020\002\022\014\n\010FINISHED\020\003\022\r\n\tCANCELLED\020\004\022\n\n\006FAI",
+      "LED\020\005\022\032\n\026CANCELLATION_REQUESTED\020\006*\335\005\n\020Co" +
+      "reOperatorType\022\021\n\rSINGLE_SENDER\020\000\022\024\n\020BRO" +
+      "ADCAST_SENDER\020\001\022\n\n\006FILTER\020\002\022\022\n\016HASH_AGGR" +
+      "EGATE\020\003\022\r\n\tHASH_JOIN\020\004\022\016\n\nMERGE_JOIN\020\005\022\031" +
+      "\n\025HASH_PARTITION_SENDER\020\006\022\t\n\005LIMIT\020\007\022\024\n\020" +
+      "MERGING_RECEIVER\020\010\022\034\n\030ORDERED_PARTITION_" +
+      "SENDER\020\t\022\013\n\007PROJECT\020\n\022\026\n\022UNORDERED_RECEI" +
+      "VER\020\013\022\020\n\014RANGE_SENDER\020\014\022\n\n\006SCREEN\020\r\022\034\n\030S" +
+      "ELECTION_VECTOR_REMOVER\020\016\022\027\n\023STREAMING_A" +
+      "GGREGATE\020\017\022\016\n\nTOP_N_SORT\020\020\022\021\n\rEXTERNAL_S",
+      "ORT\020\021\022\t\n\005TRACE\020\022\022\t\n\005UNION\020\023\022\014\n\010OLD_SORT\020" +
+      "\024\022\032\n\026PARQUET_ROW_GROUP_SCAN\020\025\022\021\n\rHIVE_SU" +
+      "B_SCAN\020\026\022\025\n\021SYSTEM_TABLE_SCAN\020\027\022\021\n\rMOCK_" +
+      "SUB_SCAN\020\030\022\022\n\016PARQUET_WRITER\020\031\022\023\n\017DIRECT" +
+      "_SUB_SCAN\020\032\022\017\n\013TEXT_WRITER\020\033\022\021\n\rTEXT_SUB" +
+      "_SCAN\020\034\022\021\n\rJSON_SUB_SCAN\020\035\022\030\n\024INFO_SCHEM" +
+      "A_SUB_SCAN\020\036\022\023\n\017COMPLEX_TO_JSON\020\037\022\025\n\021PRO" +
+      "DUCER_CONSUMER\020 \022\022\n\016HBASE_SUB_SCAN\020!\022\n\n\006" +
+      "WINDOW\020\"\022\024\n\020NESTED_LOOP_JOIN\020#\022\021\n\rAVRO_S" +
+      "UB_SCAN\020$B.\n\033org.apache.drill.exec.proto",
+      "B\rUserBitSharedH\001"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
       new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@@ -21033,7 +20952,7 @@ public final class UserBitShared {
           internal_static_exec_shared_SerializedField_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_exec_shared_SerializedField_descriptor,
-              new java.lang.String[] { "MajorType", "NamePart", "Child", "ValueCount", "VarByteLength", "GroupCount", "BufferLength", });
+              new java.lang.String[] { "MajorType", "NamePart", "Child", "ValueCount", "VarByteLength", "BufferLength", });
           internal_static_exec_shared_NodeStatus_descriptor =
             getDescriptor().getMessageTypes().get(9);
           internal_static_exec_shared_NodeStatus_fieldAccessorTable = new

http://git-wip-us.apache.org/repos/asf/drill/blob/68c933c7/protocol/src/main/java/org/apache/drill/exec/proto/beans/SerializedField.java
----------------------------------------------------------------------
diff --git a/protocol/src/main/java/org/apache/drill/exec/proto/beans/SerializedField.java b/protocol/src/main/java/org/apache/drill/exec/proto/beans/SerializedField.java
index 699097a..6d01a69 100644
--- a/protocol/src/main/java/org/apache/drill/exec/proto/beans/SerializedField.java
+++ b/protocol/src/main/java/org/apache/drill/exec/proto/beans/SerializedField.java
@@ -54,7 +54,6 @@ public final class SerializedField implements Externalizable, Message<Serialized
     private List<SerializedField> child;
     private int valueCount;
     private int varByteLength;
-    private int groupCount;
     private int bufferLength;
 
     public SerializedField()
@@ -129,19 +128,6 @@ public final class SerializedField implements Externalizable, Message<Serialized
         return this;
     }
 
-    // groupCount
-
-    public int getGroupCount()
-    {
-        return groupCount;
-    }
-
-    public SerializedField setGroupCount(int groupCount)
-    {
-        this.groupCount = groupCount;
-        return this;
-    }
-
     // bufferLength
 
     public int getBufferLength()
@@ -230,9 +216,6 @@ public final class SerializedField implements Externalizable, Message<Serialized
                     message.varByteLength = input.readInt32();
                     break;
                 case 6:
-                    message.groupCount = input.readInt32();
-                    break;
-                case 7:
                     message.bufferLength = input.readInt32();
                     break;
                 default:
@@ -268,11 +251,8 @@ public final class SerializedField implements Externalizable, Message<Serialized
         if(message.varByteLength != 0)
             output.writeInt32(5, message.varByteLength, false);
 
-        if(message.groupCount != 0)
-            output.writeInt32(6, message.groupCount, false);
-
         if(message.bufferLength != 0)
-            output.writeInt32(7, message.bufferLength, false);
+            output.writeInt32(6, message.bufferLength, false);
     }
 
     public String getFieldName(int number)
@@ -284,8 +264,7 @@ public final class SerializedField implements Externalizable, Message<Serialized
             case 3: return "child";
             case 4: return "valueCount";
             case 5: return "varByteLength";
-            case 6: return "groupCount";
-            case 7: return "bufferLength";
+            case 6: return "bufferLength";
             default: return null;
         }
     }
@@ -304,8 +283,7 @@ public final class SerializedField implements Externalizable, Message<Serialized
         __fieldMap.put("child", 3);
         __fieldMap.put("valueCount", 4);
         __fieldMap.put("varByteLength", 5);
-        __fieldMap.put("groupCount", 6);
-        __fieldMap.put("bufferLength", 7);
+        __fieldMap.put("bufferLength", 6);
     }
     
 }

http://git-wip-us.apache.org/repos/asf/drill/blob/68c933c7/protocol/src/main/protobuf/UserBitShared.proto
----------------------------------------------------------------------
diff --git a/protocol/src/main/protobuf/UserBitShared.proto b/protocol/src/main/protobuf/UserBitShared.proto
index 68c8612..0451fd2 100644
--- a/protocol/src/main/protobuf/UserBitShared.proto
+++ b/protocol/src/main/protobuf/UserBitShared.proto
@@ -139,7 +139,6 @@ message SerializedField {
 
   optional int32 value_count = 4;
   optional int32 var_byte_length = 5;
-  optional int32 group_count = 6; // number of groups.  (number of repeated records)
   optional int32 buffer_length = 7;
 }