in paimon-presto-common/src/main/java/org/apache/paimon/presto/PrestoTypeUtils.java [95:165]
public static Type toPrestoType(DataType paimonType, TypeManager typeManager) {
if (paimonType instanceof CharType) {
return com.facebook.presto.common.type.CharType.createCharType(
Math.min(
com.facebook.presto.common.type.CharType.MAX_LENGTH,
((CharType) paimonType).getLength()));
} else if (paimonType instanceof VarCharType) {
return VarcharType.createUnboundedVarcharType();
} else if (paimonType instanceof BooleanType) {
return com.facebook.presto.common.type.BooleanType.BOOLEAN;
} else if (paimonType instanceof BinaryType) {
return VarbinaryType.VARBINARY;
} else if (paimonType instanceof VarBinaryType) {
return VarbinaryType.VARBINARY;
} else if (paimonType instanceof DecimalType) {
return com.facebook.presto.common.type.DecimalType.createDecimalType(
((DecimalType) paimonType).getPrecision(),
((DecimalType) paimonType).getScale());
} else if (paimonType instanceof TinyIntType) {
return TinyintType.TINYINT;
} else if (paimonType instanceof SmallIntType) {
return SmallintType.SMALLINT;
} else if (paimonType instanceof IntType) {
return IntegerType.INTEGER;
} else if (paimonType instanceof BigIntType) {
return BigintType.BIGINT;
} else if (paimonType instanceof FloatType) {
return RealType.REAL;
} else if (paimonType instanceof DoubleType) {
return com.facebook.presto.common.type.DoubleType.DOUBLE;
} else if (paimonType instanceof DateType) {
return com.facebook.presto.common.type.DateType.DATE;
} else if (paimonType instanceof TimeType) {
return com.facebook.presto.common.type.TimeType.TIME;
} else if (paimonType instanceof TimestampType) {
return com.facebook.presto.common.type.TimestampType.TIMESTAMP;
} else if (paimonType instanceof LocalZonedTimestampType) {
return TimestampWithTimeZoneType.TIMESTAMP_WITH_TIME_ZONE;
} else if (paimonType instanceof ArrayType) {
DataType elementType = ((ArrayType) paimonType).getElementType();
return new com.facebook.presto.common.type.ArrayType(
Objects.requireNonNull(toPrestoType(elementType, typeManager)));
} else if (paimonType instanceof MapType) {
MapType paimonMapType = (MapType) paimonType;
TypeSignature keyType =
Objects.requireNonNull(toPrestoType(paimonMapType.getKeyType(), typeManager))
.getTypeSignature();
TypeSignature valueType =
Objects.requireNonNull(toPrestoType(paimonMapType.getValueType(), typeManager))
.getTypeSignature();
return typeManager.getParameterizedType(
StandardTypes.MAP,
ImmutableList.of(
TypeSignatureParameter.of(keyType),
TypeSignatureParameter.of(valueType)));
} else if (paimonType instanceof RowType) {
RowType rowType = (RowType) paimonType;
List<com.facebook.presto.common.type.RowType.Field> fields =
rowType.getFields().stream()
.map(
field ->
com.facebook.presto.common.type.RowType.field(
field.name(),
toPrestoType(field.type(), typeManager)))
.collect(Collectors.toList());
return com.facebook.presto.common.type.RowType.from(fields);
} else {
throw new UnsupportedOperationException(
format("Cannot convert from Paimon type '%s' to Presto type", paimonType));
}
}