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