public BasicTypeDefine reconvert()

in seatunnel-connectors-v2/connector-starrocks/src/main/java/org/apache/seatunnel/connectors/seatunnel/starrocks/datatypes/StarRocksTypeConverter.java [187:336]


    public BasicTypeDefine<StarRocksType> reconvert(Column column) {
        BasicTypeDefine.BasicTypeDefineBuilder<StarRocksType> builder =
                BasicTypeDefine.<StarRocksType>builder()
                        .name(column.getName())
                        .nullable(column.isNullable())
                        .comment(column.getComment())
                        .defaultValue(column.getDefaultValue());
        switch (column.getDataType().getSqlType()) {
            case NULL:
                builder.columnType(SR_NULL);
                builder.dataType(SR_NULL);
                break;
            case BYTES:
                builder.columnType(SR_STRING);
                builder.dataType(SR_STRING);
                break;
            case BOOLEAN:
                builder.columnType(SR_BOOLEAN);
                builder.dataType(SR_BOOLEAN);
                builder.length(1L);
                break;
            case TINYINT:
                builder.columnType(SR_TINYINT);
                builder.dataType(SR_TINYINT);
                break;
            case SMALLINT:
                builder.columnType(SR_SMALLINT);
                builder.dataType(SR_SMALLINT);
                break;
            case INT:
                builder.columnType(SR_INT);
                builder.dataType(SR_INT);
                break;
            case BIGINT:
                builder.columnType(SR_BIGINT);
                builder.dataType(SR_BIGINT);
                break;
            case FLOAT:
                builder.columnType(SR_FLOAT);
                builder.dataType(SR_FLOAT);
                break;
            case DOUBLE:
                builder.columnType(SR_DOUBLE);
                builder.dataType(SR_DOUBLE);
                break;
            case DECIMAL:
                // DORIS LARGEINT
                if (column.getSourceType() != null
                        && column.getSourceType().equalsIgnoreCase(SR_LARGEINT)) {
                    builder.dataType(SR_LARGEINT);
                    builder.columnType(SR_LARGEINT);
                    break;
                }
                DecimalType decimalType = (DecimalType) column.getDataType();
                int precision = decimalType.getPrecision();
                int scale = decimalType.getScale();
                if (precision <= 0) {
                    precision = MAX_PRECISION.intValue();
                    scale = MAX_SCALE;
                    log.warn(
                            "The decimal column {} type decimal({},{}) is out of range, "
                                    + "which is precision less than 0, "
                                    + "it will be converted to decimal({},{})",
                            column.getName(),
                            decimalType.getPrecision(),
                            decimalType.getScale(),
                            precision,
                            scale);
                } else if (precision > MAX_PRECISION) {
                    log.warn(
                            "The decimal column {} type decimal({},{}) is out of range, "
                                    + "which exceeds the maximum precision of {}, "
                                    + "it will be converted to varchar(200)",
                            column.getName(),
                            decimalType.getPrecision(),
                            decimalType.getScale(),
                            MAX_PRECISION);
                    builder.dataType(SR_VARCHAR);
                    builder.columnType(String.format("%s(%s)", SR_VARCHAR, 200));
                    break;
                }

                if (scale < 0) {
                    scale = 0;
                    log.warn(
                            "The decimal column {} type decimal({},{}) is out of range, "
                                    + "which is scale less than 0, "
                                    + "it will be converted to decimal({},{})",
                            column.getName(),
                            decimalType.getPrecision(),
                            decimalType.getScale(),
                            precision,
                            scale);
                } else if (scale > precision) {
                    scale = precision;
                    log.warn(
                            "The decimal column {} type decimal({},{}) is out of range, "
                                    + "which exceeds the maximum scale of {}, "
                                    + "it will be converted to decimal({},{})",
                            column.getName(),
                            decimalType.getPrecision(),
                            decimalType.getScale(),
                            precision,
                            precision,
                            scale);
                }
                builder.columnType(String.format("%s(%s,%s)", SR_DECIMALV3, precision, scale));
                builder.dataType(SR_DECIMALV3);
                builder.precision((long) precision);
                builder.scale(scale);
                break;
            case TIME:
                builder.length(8L);
                builder.columnType(String.format("%s(%s)", SR_VARCHAR, 8));
                builder.dataType(SR_VARCHAR);
                break;
            case ARRAY:
                SeaTunnelDataType<?> dataType = column.getDataType();
                SeaTunnelDataType elementType = null;
                if (dataType instanceof ArrayType) {
                    ArrayType arrayType = (ArrayType) dataType;
                    elementType = arrayType.getElementType();
                }
                reconvertBuildArrayInternal(elementType, builder, column.getName());
                break;
            case ROW:
                builder.columnType(SR_JSON);
                builder.dataType(SR_JSON);
                break;
            case STRING:
                reconvertString(column, builder);
                break;
            case DATE:
                builder.columnType(SR_DATE);
                builder.dataType(SR_DATE);
                break;
            case TIMESTAMP:
                builder.columnType(SR_DATETIME);
                builder.dataType(SR_DATETIME);
                break;
            case MAP:
                reconvertMap(column, builder);
                break;
            default:
                throw CommonError.convertToConnectorTypeError(
                        identifier(), column.getDataType().getSqlType().name(), column.getName());
        }

        return builder.build();
    }