public static ColumnReader createColumnReader()

in paimon-format/src/main/java/org/apache/paimon/format/parquet/reader/ParquetSplitReaderUtil.java [81:152]


    public static ColumnReader createColumnReader(
            DataType fieldType,
            Type type,
            List<ColumnDescriptor> columnDescriptors,
            PageReadStore pages,
            ParquetField field,
            int depth)
            throws IOException {
        List<ColumnDescriptor> descriptors =
                getAllColumnDescriptorByType(depth, type, columnDescriptors);
        switch (fieldType.getTypeRoot()) {
            case BOOLEAN:
                return new BooleanColumnReader(descriptors.get(0), pages);
            case TINYINT:
                return new ByteColumnReader(descriptors.get(0), pages);
            case DOUBLE:
                return new DoubleColumnReader(descriptors.get(0), pages);
            case FLOAT:
                return new FloatColumnReader(descriptors.get(0), pages);
            case INTEGER:
            case DATE:
            case TIME_WITHOUT_TIME_ZONE:
                return new IntColumnReader(descriptors.get(0), pages);
            case BIGINT:
                return new LongColumnReader(descriptors.get(0), pages);
            case SMALLINT:
                return new ShortColumnReader(descriptors.get(0), pages);
            case CHAR:
            case VARCHAR:
            case BINARY:
            case VARBINARY:
                if (descriptors.get(0).getPrimitiveType().getPrimitiveTypeName()
                        == PrimitiveType.PrimitiveTypeName.FIXED_LEN_BYTE_ARRAY) {
                    return new FixedLenBytesBinaryColumnReader(
                            descriptors.get(0), pages, ((BinaryType) fieldType).getLength());
                }
                return new BytesColumnReader(descriptors.get(0), pages);
            case TIMESTAMP_WITHOUT_TIME_ZONE:
            case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
                if (descriptors.get(0).getPrimitiveType().getPrimitiveTypeName()
                        == PrimitiveType.PrimitiveTypeName.INT64) {
                    return new LongColumnReader(descriptors.get(0), pages);
                }
                return new TimestampColumnReader(true, descriptors.get(0), pages);
            case DECIMAL:
                switch (descriptors.get(0).getPrimitiveType().getPrimitiveTypeName()) {
                    case INT32:
                        return new IntColumnReader(descriptors.get(0), pages);
                    case INT64:
                        return new LongColumnReader(descriptors.get(0), pages);
                    case BINARY:
                        return new BytesColumnReader(descriptors.get(0), pages);
                    case FIXED_LEN_BYTE_ARRAY:
                        return new FixedLenBytesDecimalColumnReader(
                                descriptors.get(0),
                                pages,
                                ((DecimalType) fieldType).getPrecision());
                }
            case VARIANT:
                List<ColumnReader> fieldReaders = new ArrayList<>();
                fieldReaders.add(new BytesColumnReader(descriptors.get(0), pages));
                fieldReaders.add(new BytesColumnReader(descriptors.get(1), pages));
                return new RowColumnReader(fieldReaders);
            case ARRAY:
            case MAP:
            case MULTISET:
            case ROW:
                return new NestedColumnReader(true, pages, field);
            default:
                throw new UnsupportedOperationException(fieldType + " is not supported now.");
        }
    }