public DataType visit()

in paimon-prestosql-common/src/main/java/org/apache/paimon/prestosql/PrestoSqlTypeUtils.java [226:292]


        public DataType visit(Type prestosqlType) {
            if (prestosqlType instanceof io.prestosql.spi.type.CharType) {
                return DataTypes.CHAR(
                        Math.min(
                                io.prestosql.spi.type.CharType.MAX_LENGTH,
                                ((io.prestosql.spi.type.CharType) prestosqlType).getLength()));
            } else if (prestosqlType instanceof VarcharType) {
                Optional<Integer> length = ((VarcharType) prestosqlType).getLength();
                if (length.isPresent()) {
                    return DataTypes.VARCHAR(
                            Math.min(
                                    VarcharType.MAX_LENGTH,
                                    ((VarcharType) prestosqlType).getBoundedLength()));
                }
                return DataTypes.VARCHAR(VarcharType.MAX_LENGTH);
            } else if (prestosqlType instanceof io.prestosql.spi.type.BooleanType) {
                return DataTypes.BOOLEAN();
            } else if (prestosqlType instanceof VarbinaryType) {
                return DataTypes.VARBINARY(Integer.MAX_VALUE);
            } else if (prestosqlType instanceof io.prestosql.spi.type.DecimalType) {
                return DataTypes.DECIMAL(
                        ((io.prestosql.spi.type.DecimalType) prestosqlType).getPrecision(),
                        ((io.prestosql.spi.type.DecimalType) prestosqlType).getScale());
            } else if (prestosqlType instanceof TinyintType) {
                return DataTypes.TINYINT();
            } else if (prestosqlType instanceof SmallintType) {
                return DataTypes.SMALLINT();
            } else if (prestosqlType instanceof IntegerType) {
                return DataTypes.INT();
            } else if (prestosqlType instanceof BigintType) {
                return DataTypes.BIGINT();
            } else if (prestosqlType instanceof RealType) {
                return DataTypes.FLOAT();
            } else if (prestosqlType instanceof io.prestosql.spi.type.DoubleType) {
                return DataTypes.DOUBLE();
            } else if (prestosqlType instanceof io.prestosql.spi.type.DateType) {
                return DataTypes.DATE();
            } else if (prestosqlType instanceof io.prestosql.spi.type.TimeType) {
                return new TimeType();
            } else if (prestosqlType instanceof io.prestosql.spi.type.TimestampType) {
                return DataTypes.TIMESTAMP();
            } else if (prestosqlType instanceof TimestampWithTimeZoneType) {
                return DataTypes.TIMESTAMP_WITH_LOCAL_TIME_ZONE();
            } else if (prestosqlType instanceof io.prestosql.spi.type.ArrayType) {
                return DataTypes.ARRAY(
                        visit(((io.prestosql.spi.type.ArrayType) prestosqlType).getElementType()));
            } else if (prestosqlType instanceof io.prestosql.spi.type.MapType) {
                return DataTypes.MAP(
                        visit(((io.prestosql.spi.type.MapType) prestosqlType).getKeyType()),
                        visit(((io.prestosql.spi.type.MapType) prestosqlType).getValueType()));
            } else if (prestosqlType instanceof io.prestosql.spi.type.RowType) {
                io.prestosql.spi.type.RowType rowType =
                        (io.prestosql.spi.type.RowType) prestosqlType;
                List<DataField> dataFields =
                        rowType.getFields().stream()
                                .map(
                                        field ->
                                                new DataField(
                                                        currentIndex.getAndIncrement(),
                                                        field.getName().get(),
                                                        visit(field.getType())))
                                .collect(Collectors.toList());
                return new RowType(true, dataFields);
            } else {
                throw new UnsupportedOperationException("Unsupported type: " + prestosqlType);
            }
        }