in paimon-format/src/main/java/org/apache/paimon/format/parquet/reader/NestedPrimitiveColumnReader.java [378:510]
private WritableColumnVector fillColumnVector(int total, List valueList) {
switch (dataType.getTypeRoot()) {
case CHAR:
case VARCHAR:
case BINARY:
case VARBINARY:
HeapBytesVector heapBytesVector = new HeapBytesVector(total);
for (int i = 0; i < valueList.size(); i++) {
byte[] src = ((List<byte[]>) valueList).get(i);
if (src == null) {
heapBytesVector.setNullAt(i);
} else {
heapBytesVector.putByteArray(i, src, 0, src.length);
}
}
return heapBytesVector;
case BOOLEAN:
HeapBooleanVector heapBooleanVector = new HeapBooleanVector(total);
for (int i = 0; i < valueList.size(); i++) {
if (valueList.get(i) == null) {
heapBooleanVector.setNullAt(i);
} else {
heapBooleanVector.vector[i] = ((List<Boolean>) valueList).get(i);
}
}
return heapBooleanVector;
case TINYINT:
HeapByteVector heapByteVector = new HeapByteVector(total);
for (int i = 0; i < valueList.size(); i++) {
if (valueList.get(i) == null) {
heapByteVector.setNullAt(i);
} else {
heapByteVector.vector[i] =
(byte) ((List<Integer>) valueList).get(i).intValue();
}
}
return heapByteVector;
case SMALLINT:
HeapShortVector heapShortVector = new HeapShortVector(total);
for (int i = 0; i < valueList.size(); i++) {
if (valueList.get(i) == null) {
heapShortVector.setNullAt(i);
} else {
heapShortVector.vector[i] =
(short) ((List<Integer>) valueList).get(i).intValue();
}
}
return heapShortVector;
case INTEGER:
case DATE:
case TIME_WITHOUT_TIME_ZONE:
HeapIntVector heapIntVector = new HeapIntVector(total);
for (int i = 0; i < valueList.size(); i++) {
if (valueList.get(i) == null) {
heapIntVector.setNullAt(i);
} else {
heapIntVector.vector[i] = ((List<Integer>) valueList).get(i);
}
}
return heapIntVector;
case FLOAT:
HeapFloatVector heapFloatVector = new HeapFloatVector(total);
for (int i = 0; i < valueList.size(); i++) {
if (valueList.get(i) == null) {
heapFloatVector.setNullAt(i);
} else {
heapFloatVector.vector[i] = ((List<Float>) valueList).get(i);
}
}
return heapFloatVector;
case BIGINT:
HeapLongVector heapLongVector = new HeapLongVector(total);
for (int i = 0; i < valueList.size(); i++) {
if (valueList.get(i) == null) {
heapLongVector.setNullAt(i);
} else {
heapLongVector.vector[i] = ((List<Long>) valueList).get(i);
}
}
return heapLongVector;
case DOUBLE:
HeapDoubleVector heapDoubleVector = new HeapDoubleVector(total);
for (int i = 0; i < valueList.size(); i++) {
if (valueList.get(i) == null) {
heapDoubleVector.setNullAt(i);
} else {
heapDoubleVector.vector[i] = ((List<Double>) valueList).get(i);
}
}
return heapDoubleVector;
case TIMESTAMP_WITHOUT_TIME_ZONE:
case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
HeapTimestampVector heapTimestampVector = new HeapTimestampVector(total);
for (int i = 0; i < valueList.size(); i++) {
if (valueList.get(i) == null) {
heapTimestampVector.setNullAt(i);
} else {
heapTimestampVector.setTimestamp(i, ((List<Timestamp>) valueList).get(i));
}
}
return heapTimestampVector;
case DECIMAL:
PrimitiveType.PrimitiveTypeName primitiveTypeName =
descriptor.getPrimitiveType().getPrimitiveTypeName();
switch (primitiveTypeName) {
case INT32:
HeapIntVector phiv = new HeapIntVector(total);
for (int i = 0; i < valueList.size(); i++) {
if (valueList.get(i) == null) {
phiv.setNullAt(i);
} else {
phiv.vector[i] = ((List<Integer>) valueList).get(i);
}
}
return new ParquetDecimalVector(phiv);
case INT64:
HeapLongVector phlv = new HeapLongVector(total);
for (int i = 0; i < valueList.size(); i++) {
if (valueList.get(i) == null) {
phlv.setNullAt(i);
} else {
phlv.vector[i] = ((List<Long>) valueList).get(i);
}
}
return new ParquetDecimalVector(phlv);
default:
HeapBytesVector phbv = getHeapBytesVector(total, valueList);
return new ParquetDecimalVector(phbv);
}
default:
throw new RuntimeException("Unsupported type in the list: " + type);
}
}