public static Type toPrestoType()

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