in paimon-format/src/main/java/org/apache/paimon/format/parquet/reader/ArrayColumnReader.java [310:516]
private void fillColumnVector(
DataType type, HeapArrayVector lcv, List valueList, int elementNum) {
int total = valueList.size();
setChildrenInfo(lcv, total, elementNum);
switch (type.getTypeRoot()) {
case CHAR:
case VARCHAR:
case BINARY:
case VARBINARY:
HeapBytesVector bytesVector = new HeapBytesVector(total);
bytesVector.reset();
lcv.setChild(bytesVector);
for (int i = 0; i < valueList.size(); i++) {
byte[] src = (byte[]) valueList.get(i);
if (src == null) {
((HeapBytesVector) lcv.getChild()).setNullAt(i);
} else {
((HeapBytesVector) lcv.getChild()).appendBytes(i, src, 0, src.length);
}
}
break;
case BOOLEAN:
HeapBooleanVector booleanVector = new HeapBooleanVector(total);
booleanVector.reset();
lcv.setChild(booleanVector);
for (int i = 0; i < valueList.size(); i++) {
if (valueList.get(i) == null) {
((HeapBooleanVector) lcv.getChild()).setNullAt(i);
} else {
((HeapBooleanVector) lcv.getChild()).vector[i] = (boolean) valueList.get(i);
}
}
break;
case TINYINT:
HeapByteVector byteVector = new HeapByteVector(total);
byteVector.reset();
lcv.setChild(byteVector);
for (int i = 0; i < valueList.size(); i++) {
if (valueList.get(i) == null) {
((HeapByteVector) lcv.getChild()).setNullAt(i);
} else {
((HeapByteVector) lcv.getChild()).vector[i] =
((List<Integer>) valueList).get(i).byteValue();
}
}
break;
case SMALLINT:
HeapShortVector shortVector = new HeapShortVector(total);
shortVector.reset();
lcv.setChild(shortVector);
for (int i = 0; i < valueList.size(); i++) {
if (valueList.get(i) == null) {
((HeapShortVector) lcv.getChild()).setNullAt(i);
} else {
((HeapShortVector) lcv.getChild()).vector[i] =
((List<Integer>) valueList).get(i).shortValue();
}
}
break;
case INTEGER:
case DATE:
case TIME_WITHOUT_TIME_ZONE:
HeapIntVector intVector = new HeapIntVector(total);
intVector.reset();
lcv.setChild(intVector);
for (int i = 0; i < valueList.size(); i++) {
if (valueList.get(i) == null) {
((HeapIntVector) lcv.getChild()).setNullAt(i);
} else {
((HeapIntVector) lcv.getChild()).vector[i] =
((List<Integer>) valueList).get(i);
}
}
break;
case FLOAT:
HeapFloatVector floatVector = new HeapFloatVector(total);
floatVector.reset();
lcv.setChild(floatVector);
for (int i = 0; i < valueList.size(); i++) {
if (valueList.get(i) == null) {
((HeapFloatVector) lcv.getChild()).setNullAt(i);
} else {
((HeapFloatVector) lcv.getChild()).vector[i] =
((List<Float>) valueList).get(i);
}
}
break;
case BIGINT:
HeapLongVector longVector = new HeapLongVector(total);
longVector.reset();
lcv.setChild(longVector);
for (int i = 0; i < valueList.size(); i++) {
if (valueList.get(i) == null) {
((HeapLongVector) lcv.getChild()).setNullAt(i);
} else {
((HeapLongVector) lcv.getChild()).vector[i] =
((List<Long>) valueList).get(i);
}
}
break;
case DOUBLE:
HeapDoubleVector doubleVector = new HeapDoubleVector(total);
doubleVector.reset();
lcv.setChild(doubleVector);
for (int i = 0; i < valueList.size(); i++) {
if (valueList.get(i) == null) {
((HeapDoubleVector) lcv.getChild()).setNullAt(i);
} else {
((HeapDoubleVector) lcv.getChild()).vector[i] =
((List<Double>) valueList).get(i);
}
}
break;
case TIMESTAMP_WITHOUT_TIME_ZONE:
case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
if (descriptor.getPrimitiveType().getPrimitiveTypeName()
== PrimitiveType.PrimitiveTypeName.INT64) {
HeapTimestampVector heapTimestampVector = new HeapTimestampVector(total);
heapTimestampVector.reset();
lcv.setChild(new ParquetTimestampVector(heapTimestampVector));
for (int i = 0; i < valueList.size(); i++) {
if (valueList.get(i) == null) {
((HeapTimestampVector)
((ParquetTimestampVector) lcv.getChild()).getVector())
.setNullAt(i);
} else {
((HeapTimestampVector)
((ParquetTimestampVector) lcv.getChild()).getVector())
.fill(((List<Timestamp>) valueList).get(i));
}
}
break;
} else {
HeapTimestampVector timestampVector = new HeapTimestampVector(total);
timestampVector.reset();
lcv.setChild(timestampVector);
for (int i = 0; i < valueList.size(); i++) {
if (valueList.get(i) == null) {
((HeapTimestampVector) lcv.getChild()).setNullAt(i);
} else {
((HeapTimestampVector) lcv.getChild())
.setTimestamp(i, ((List<Timestamp>) valueList).get(i));
}
}
break;
}
case DECIMAL:
switch (descriptor.getPrimitiveType().getPrimitiveTypeName()) {
case INT32:
HeapIntVector heapIntVector = new HeapIntVector(total);
heapIntVector.reset();
lcv.setChild(new ParquetDecimalVector(heapIntVector));
for (int i = 0; i < valueList.size(); i++) {
if (valueList.get(i) == null) {
((HeapIntVector)
((ParquetDecimalVector) lcv.getChild()).getVector())
.setNullAt(i);
} else {
((HeapIntVector)
((ParquetDecimalVector) lcv.getChild())
.getVector())
.vector[i] =
((List<Integer>) valueList).get(i);
}
}
break;
case INT64:
HeapLongVector heapLongVector = new HeapLongVector(total);
heapLongVector.reset();
lcv.setChild(new ParquetDecimalVector(heapLongVector));
for (int i = 0; i < valueList.size(); i++) {
if (valueList.get(i) == null) {
((HeapLongVector)
((ParquetDecimalVector) lcv.getChild()).getVector())
.setNullAt(i);
} else {
((HeapLongVector)
((ParquetDecimalVector) lcv.getChild())
.getVector())
.vector[i] =
((List<Long>) valueList).get(i);
}
}
break;
default:
HeapBytesVector heapBytesVector = new HeapBytesVector(total);
heapBytesVector.reset();
lcv.setChild(new ParquetDecimalVector(heapBytesVector));
for (int i = 0; i < valueList.size(); i++) {
byte[] src = (byte[]) valueList.get(i);
if (valueList.get(i) == null) {
((HeapBytesVector)
((ParquetDecimalVector) lcv.getChild()).getVector())
.setNullAt(i);
} else {
((HeapBytesVector)
((ParquetDecimalVector) lcv.getChild()).getVector())
.appendBytes(i, src, 0, src.length);
}
}
break;
}
break;
default:
throw new RuntimeException("Unsupported type in the list: " + type);
}
}