aboutsummaryrefslogtreecommitdiff
path: root/exec/vector
diff options
context:
space:
mode:
authorPaul Rogers <progers@cloudera.com>2018-04-30 19:10:53 -0700
committerTimothy Farkas <timothyfarkas@apache.org>2018-08-03 09:54:56 -0700
commit7afeb8e2968ad6af4fbb58238454878ec140eab8 (patch)
tree1248696fe2980669cbf507d9093cefd460514561 /exec/vector
parent671c315e7ec9c0cb8e0131baeb5702107b529ee2 (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.java23
-rw-r--r--exec/vector/src/main/java/org/apache/drill/exec/vector/accessor/writer/MapWriter.java10
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);
}