private void writeList(ListVector arrowVector, ListColumnVector hiveVector, ListTypeInfo typeInfo, int size, VectorizedRowBatch vectorizedRowBatch, boolean isNative) { final int OFFSET_WIDTH = 4; final TypeInfo elementTypeInfo = typeInfo.getListElementTypeInfo(); final ColumnVector hiveElementVector = hiveVector.child; final FieldVector arrowElementVector = (FieldVector) arrowVector.addOrGetVector(toFieldType(elementTypeInfo)).getVector(); arrowElementVector.setInitialCapacity(hiveVector.childCount); arrowElementVector.allocateNew(); write(arrowElementVector, hiveElementVector, elementTypeInfo, hiveVector.childCount, vectorizedRowBatch, isNative); final ArrowBuf offsetBuffer = arrowVector.getOffsetBuffer(); int nextOffset = 0; for (int rowIndex = 0; rowIndex < size; rowIndex++) { if (hiveVector.isNull[rowIndex]) { offsetBuffer.setInt(rowIndex * OFFSET_WIDTH, nextOffset); } else { offsetBuffer.setInt(rowIndex * OFFSET_WIDTH, nextOffset); nextOffset += (int) hiveVector.lengths[rowIndex]; arrowVector.setNotNull(rowIndex); } } offsetBuffer.setInt(size * OFFSET_WIDTH, nextOffset); }
@Override public void initializeChildrenFromFields(List<Field> children) { if (children.size() != 1) { throw new IllegalArgumentException("Lists have only one child. Found: " + children); } Field field = children.get(0); AddOrGetResult<FieldVector> addOrGetVector = addOrGetVector(field.getFieldType()); if (!addOrGetVector.isCreated()) { throw new IllegalArgumentException("Child vector already existed: " + addOrGetVector.getVector()); } addOrGetVector.getVector().initializeChildrenFromFields(field.getChildren()); }
@Override public void initializeChildrenFromFields(List<Field> children) { if (children.size() != 1) { throw new IllegalArgumentException("Lists have only one child. Found: " + children); } Field field = children.get(0); AddOrGetResult<FieldVector> addOrGetVector = addOrGetVector(field.getFieldType()); if (!addOrGetVector.isCreated()) { throw new IllegalArgumentException("Child vector already existed: " + addOrGetVector.getVector()); } addOrGetVector.getVector().initializeChildrenFromFields(field.getChildren()); }
public void materialize(Field field) { if (field.getChildren().size() == 0) { return; } Field innerField = field.getChildren().get(0); ValueVector innerVector = listVector.addOrGetVector(innerField.getFieldType()).getVector(); ComplexTypeHelper.materialize(innerVector, innerField); }
private ValueVector addChild(ValueVector vector, MinorType child) { return ((ListVector)vector).addOrGetVector(nullable(child.getType())).getVector(); }
protected FieldWriter getWriter(MinorType type, ArrowType arrowType) { if (state == State.UNION) { ((UnionWriter) writer).getWriter(type); } else if (state == State.UNTYPED) { if (type == null) { // ??? return null; } if (arrowType == null) { arrowType = type.getType(); } ValueVector v = listVector.addOrGetVector(FieldType.nullable(arrowType)).getVector(); v.allocateNew(); setWriter(v, arrowType); writer.setPosition(position); } else if (type != this.type) { promoteToUnion(); ((UnionWriter) writer).getWriter(type); } return writer; }