public static RelDataType convert()

in flink-connector-hive/src/main/java/org/apache/flink/table/planner/delegation/hive/copy/HiveParserTypeConverter.java [109:198]


    public static RelDataType convert(PrimitiveTypeInfo type, RelDataTypeFactory dtFactory) {
        RelDataType convertedType = null;
        HiveShim hiveShim = HiveParserUtils.getSessionHiveShim();

        switch (type.getPrimitiveCategory()) {
            case VOID:
                convertedType = dtFactory.createSqlType(SqlTypeName.NULL);
                break;
            case BOOLEAN:
                convertedType = dtFactory.createSqlType(SqlTypeName.BOOLEAN);
                break;
            case BYTE:
                convertedType = dtFactory.createSqlType(SqlTypeName.TINYINT);
                break;
            case SHORT:
                convertedType = dtFactory.createSqlType(SqlTypeName.SMALLINT);
                break;
            case INT:
                convertedType = dtFactory.createSqlType(SqlTypeName.INTEGER);
                break;
            case LONG:
                convertedType = dtFactory.createSqlType(SqlTypeName.BIGINT);
                break;
            case FLOAT:
                convertedType = dtFactory.createSqlType(SqlTypeName.FLOAT);
                break;
            case DOUBLE:
                convertedType = dtFactory.createSqlType(SqlTypeName.DOUBLE);
                break;
            case STRING:
                convertedType =
                        dtFactory.createTypeWithCharsetAndCollation(
                                dtFactory.createSqlType(SqlTypeName.VARCHAR, Integer.MAX_VALUE),
                                Charset.forName(ConversionUtil.NATIVE_UTF16_CHARSET_NAME),
                                SqlCollation.IMPLICIT);
                break;
            case DATE:
                convertedType = dtFactory.createSqlType(SqlTypeName.DATE);
                break;
            case TIMESTAMP:
                convertedType = dtFactory.createSqlType(SqlTypeName.TIMESTAMP, 9);
                break;
            case BINARY:
                convertedType = dtFactory.createSqlType(SqlTypeName.VARBINARY);
                break;
            case DECIMAL:
                DecimalTypeInfo dtInf = (DecimalTypeInfo) type;
                convertedType =
                        dtFactory.createSqlType(
                                SqlTypeName.DECIMAL, dtInf.precision(), dtInf.scale());
                break;
            case VARCHAR:
                convertedType =
                        dtFactory.createTypeWithCharsetAndCollation(
                                dtFactory.createSqlType(
                                        SqlTypeName.VARCHAR, ((BaseCharTypeInfo) type).getLength()),
                                Charset.forName(ConversionUtil.NATIVE_UTF16_CHARSET_NAME),
                                SqlCollation.IMPLICIT);
                break;
            case CHAR:
                convertedType =
                        dtFactory.createTypeWithCharsetAndCollation(
                                dtFactory.createSqlType(
                                        SqlTypeName.CHAR, ((BaseCharTypeInfo) type).getLength()),
                                Charset.forName(ConversionUtil.NATIVE_UTF16_CHARSET_NAME),
                                SqlCollation.IMPLICIT);
                break;
            case UNKNOWN:
                convertedType = dtFactory.createSqlType(SqlTypeName.OTHER);
                break;
            default:
                if (hiveShim.isIntervalYearMonthType(type.getPrimitiveCategory())) {
                    convertedType =
                            dtFactory.createSqlIntervalType(
                                    new SqlIntervalQualifier(
                                            TimeUnit.YEAR, TimeUnit.MONTH, new SqlParserPos(1, 1)));
                } else if (hiveShim.isIntervalDayTimeType(type.getPrimitiveCategory())) {
                    convertedType =
                            dtFactory.createSqlIntervalType(
                                    new SqlIntervalQualifier(
                                            TimeUnit.DAY, TimeUnit.SECOND, new SqlParserPos(1, 1)));
                }
        }

        if (null == convertedType) {
            throw new RuntimeException("Unsupported Type : " + type.getTypeName());
        }

        return dtFactory.createTypeWithNullability(convertedType, true);
    }