public Column convert()

in seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/GenericTypeConverter.java [59:185]


    public Column convert(BasicTypeDefine typeDefine) {
        PhysicalColumn.PhysicalColumnBuilder builder =
                PhysicalColumn.builder()
                        .name(typeDefine.getName())
                        .nullable(typeDefine.isNullable())
                        .defaultValue(typeDefine.getDefaultValue())
                        .comment(typeDefine.getComment());
        int sqlType = typeDefine.getSqlType();
        switch (sqlType) {
            case Types.NULL:
                builder.dataType(BasicType.VOID_TYPE);
                break;
            case Types.BOOLEAN:
                builder.dataType(BasicType.BOOLEAN_TYPE);
                break;
            case Types.BIT:
                if (typeDefine.getLength() == null
                        || typeDefine.getLength() <= 0
                        || typeDefine.getLength() == 1) {
                    builder.dataType(BasicType.BOOLEAN_TYPE);
                } else {
                    builder.dataType(PrimitiveByteArrayType.INSTANCE);
                    // BIT(M) -> BYTE(M/8)
                    long byteLength = typeDefine.getLength() / 8;
                    byteLength += typeDefine.getLength() % 8 > 0 ? 1 : 0;
                    builder.columnLength(byteLength);
                }
                break;
            case Types.TINYINT:
                builder.dataType(BasicType.BYTE_TYPE);
                break;
            case Types.SMALLINT:
                builder.dataType(BasicType.SHORT_TYPE);
                break;
            case Types.INTEGER:
                builder.dataType(BasicType.INT_TYPE);
                break;
            case Types.BIGINT:
                builder.dataType(BasicType.LONG_TYPE);
                break;
            case Types.REAL:
            case Types.FLOAT:
                builder.dataType(BasicType.FLOAT_TYPE);
                break;
            case Types.DOUBLE:
                builder.dataType(BasicType.DOUBLE_TYPE);
                break;
            case Types.NUMERIC:
                DecimalType decimalTypeForNumeric;
                if (typeDefine.getPrecision() != null && typeDefine.getPrecision() > 0) {
                    decimalTypeForNumeric =
                            new DecimalType(
                                    typeDefine.getPrecision().intValue(), typeDefine.getScale());
                } else {
                    decimalTypeForNumeric = new DecimalType(DEFAULT_PRECISION, DEFAULT_SCALE);
                }
                builder.dataType(decimalTypeForNumeric);
                break;
            case Types.DECIMAL:
                Preconditions.checkArgument(typeDefine.getPrecision() > 0);
                DecimalType decimalType;
                if (typeDefine.getPrecision() > DEFAULT_PRECISION) {
                    decimalType = new DecimalType(DEFAULT_PRECISION, DEFAULT_SCALE);
                } else {
                    decimalType =
                            new DecimalType(
                                    typeDefine.getPrecision().intValue(),
                                    typeDefine.getScale() == null
                                            ? 0
                                            : typeDefine.getScale().intValue());
                }
                builder.dataType(decimalType);
                builder.columnLength(Long.valueOf(decimalType.getPrecision()));
                builder.scale(decimalType.getScale());
                break;

            case Types.CHAR:
            case Types.VARCHAR:
            case Types.LONGVARCHAR:
            case Types.NCHAR:
            case Types.NVARCHAR:
            case Types.LONGNVARCHAR:
            case Types.CLOB:
            case Types.DATALINK:
            case Types.NCLOB:
            case Types.SQLXML:
                builder.dataType(BasicType.STRING_TYPE);
                break;

            case Types.BINARY:
            case Types.BLOB:
            case Types.VARBINARY:
            case Types.LONGVARBINARY:
                if (typeDefine.getLength() == null || typeDefine.getLength() <= 0) {
                    builder.columnLength(1L);
                } else {
                    builder.columnLength(typeDefine.getLength());
                }
                builder.dataType(PrimitiveByteArrayType.INSTANCE);
                break;
            case Types.DATE:
                builder.dataType(LocalTimeType.LOCAL_DATE_TYPE);
                break;
            case Types.TIME:
                builder.dataType(LocalTimeType.LOCAL_TIME_TYPE);
                builder.scale(typeDefine.getScale());
                break;
            case Types.TIMESTAMP:
                builder.dataType(LocalTimeType.LOCAL_DATE_TIME_TYPE);
                builder.scale(typeDefine.getScale());
                break;

            case Types.OTHER:
            case Types.ARRAY:
            case Types.JAVA_OBJECT:
            case Types.DISTINCT:
            case Types.STRUCT:
            case Types.REF:
            case Types.ROWID:
            default:
                log.warn(
                        "JDBC type {} ({}) not currently supported",
                        sqlType,
                        typeDefine.getNativeType());
        }
        return builder.build();
    }