diff options
author | Paul Rogers <progers@cloudera.com> | 2018-04-30 19:10:53 -0700 |
---|---|---|
committer | Timothy Farkas <timothyfarkas@apache.org> | 2018-08-03 09:54:56 -0700 |
commit | 7afeb8e2968ad6af4fbb58238454878ec140eab8 (patch) | |
tree | 1248696fe2980669cbf507d9093cefd460514561 /exec/vector | |
parent | 671c315e7ec9c0cb8e0131baeb5702107b529ee2 (diff) |
DRILL-6373:
- Adds code to return the proper vector type given the actual vector, adjusting metadata as needed.
- Refactor result set loader
- Revised projection & vector cache
closes #1244
Diffstat (limited to 'exec/vector')
-rw-r--r-- | exec/vector/src/main/codegen/templates/BasicTypeHelper.java | 23 | ||||
-rw-r--r-- | exec/vector/src/main/java/org/apache/drill/exec/vector/accessor/writer/MapWriter.java | 10 |
2 files changed, 19 insertions, 14 deletions
diff --git a/exec/vector/src/main/codegen/templates/BasicTypeHelper.java b/exec/vector/src/main/codegen/templates/BasicTypeHelper.java index f818c236f..02e1c2790 100644 --- a/exec/vector/src/main/codegen/templates/BasicTypeHelper.java +++ b/exec/vector/src/main/codegen/templates/BasicTypeHelper.java @@ -67,12 +67,6 @@ public class BasicTypeHelper { throw new UnsupportedOperationException(buildErrorMessage("get size", major)); } - public static ValueVector getNewVector(String name, BufferAllocator allocator, MajorType type, CallBack callback){ - MaterializedField field = MaterializedField.create(name, type); - return getNewVector(field, allocator, callback); - } - - public static Class<? extends ValueVector> getValueVectorClass(MinorType type, DataMode mode){ switch (type) { case UNION: @@ -233,11 +227,23 @@ public class BasicTypeHelper { throw new UnsupportedOperationException(buildErrorMessage("get holder reader implementation", type, mode)); } + public static ValueVector getNewVector(String name, BufferAllocator allocator, MajorType type, CallBack callback) { + MaterializedField field = MaterializedField.create(name, type); + return getNewVector(field, allocator, callback); + } + public static ValueVector getNewVector(MaterializedField field, BufferAllocator allocator){ return getNewVector(field, allocator, null); } - public static ValueVector getNewVector(MaterializedField field, BufferAllocator allocator, CallBack callBack){ - MajorType type = field.getType(); + + public static ValueVector getNewVector(MaterializedField field, BufferAllocator allocator, CallBack callBack) { + return getNewVector(field, field.getType(), allocator, callBack); + } + + // Creates an internal or external vector. Internal vectors may have + // types that disagree with their materialized field. + + public static ValueVector getNewVector(MaterializedField field, MajorType type, BufferAllocator allocator, CallBack callBack) { switch (type.getMinorType()) { @@ -589,5 +595,4 @@ public class BasicTypeHelper { </#if> </#list> </#list> - } diff --git a/exec/vector/src/main/java/org/apache/drill/exec/vector/accessor/writer/MapWriter.java b/exec/vector/src/main/java/org/apache/drill/exec/vector/accessor/writer/MapWriter.java index 915c9941d..82e90e9ce 100644 --- a/exec/vector/src/main/java/org/apache/drill/exec/vector/accessor/writer/MapWriter.java +++ b/exec/vector/src/main/java/org/apache/drill/exec/vector/accessor/writer/MapWriter.java @@ -22,7 +22,6 @@ import java.util.List; import org.apache.drill.exec.record.metadata.ColumnMetadata; import org.apache.drill.exec.record.metadata.ProjectionType; -import org.apache.drill.exec.vector.UInt4Vector; import org.apache.drill.exec.vector.accessor.ColumnWriterIndex; import org.apache.drill.exec.vector.accessor.writer.AbstractArrayWriter.ArrayObjectWriter; import org.apache.drill.exec.vector.accessor.writer.dummy.DummyArrayWriter; @@ -181,19 +180,21 @@ public abstract class MapWriter extends AbstractTupleWriter { } public static ArrayObjectWriter buildMapArray(ColumnMetadata schema, - UInt4Vector offsetVector, + RepeatedMapVector mapVector, List<AbstractObjectWriter> writers) { MapWriter mapWriter; if (schema.isProjected()) { + assert mapVector != null; mapWriter = new ArrayMapWriter(schema, writers); } else { + assert mapVector == null; mapWriter = new DummyArrayMapWriter(schema, writers); } TupleObjectWriter mapArray = new TupleObjectWriter(mapWriter); AbstractArrayWriter arrayWriter; if (schema.isProjected()) { arrayWriter = new ObjectArrayWriter(schema, - offsetVector, + mapVector.getOffsetVector(), mapArray); } else { arrayWriter = new DummyArrayWriter(schema, mapArray); @@ -206,8 +207,7 @@ public abstract class MapWriter extends AbstractTupleWriter { List<AbstractObjectWriter> writers) { if (schema.isArray()) { return MapWriter.buildMapArray(schema, - vector == null ? null : - ((RepeatedMapVector) vector).getOffsetVector(), writers); + (RepeatedMapVector) vector, writers); } else { return MapWriter.buildMap(schema, (MapVector) vector, writers); } |