private void fillColumnVector()

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);
        }
    }