in seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/utils/JdbcColumnConverter.java [118:219]
public static Column convert(
String columnName,
int jdbcType,
String nativeType,
int isNullable,
int precision,
int scale,
String comment)
throws SQLException {
int columnLength = precision;
long longColumnLength = precision;
long bitLength = 0;
SeaTunnelDataType seaTunnelType;
switch (jdbcType) {
case BOOLEAN:
seaTunnelType = BasicType.BOOLEAN_TYPE;
break;
case BIT:
if (precision == 1) {
seaTunnelType = BasicType.BOOLEAN_TYPE;
} else {
seaTunnelType = PrimitiveByteArrayType.INSTANCE;
}
break;
case TINYINT:
seaTunnelType = BasicType.BYTE_TYPE;
break;
case SMALLINT:
seaTunnelType = BasicType.SHORT_TYPE;
break;
case INTEGER:
seaTunnelType = BasicType.INT_TYPE;
break;
case BIGINT:
seaTunnelType = BasicType.LONG_TYPE;
break;
case FLOAT:
seaTunnelType = BasicType.FLOAT_TYPE;
break;
case REAL:
seaTunnelType = BasicType.DOUBLE_TYPE;
break;
case DOUBLE:
seaTunnelType = BasicType.DOUBLE_TYPE;
break;
case NUMERIC:
case DECIMAL:
if (scale == 0) {
seaTunnelType = BasicType.LONG_TYPE;
} else {
seaTunnelType = new DecimalType(precision, scale);
}
break;
case CHAR:
case VARCHAR:
case LONGVARCHAR:
case NCHAR:
case NVARCHAR:
case LONGNVARCHAR:
case CLOB:
case NCLOB:
seaTunnelType = BasicType.STRING_TYPE;
columnLength = precision * 3;
longColumnLength = precision * 3;
break;
case DATE:
seaTunnelType = LocalTimeType.LOCAL_DATE_TYPE;
break;
case TIME:
case TIME_WITH_TIMEZONE:
seaTunnelType = LocalTimeType.LOCAL_TIME_TYPE;
break;
case TIMESTAMP:
case TIMESTAMP_WITH_TIMEZONE:
seaTunnelType = LocalTimeType.LOCAL_DATE_TIME_TYPE;
break;
case BINARY:
case VARBINARY:
case LONGVARBINARY:
case BLOB:
seaTunnelType = PrimitiveByteArrayType.INSTANCE;
bitLength = precision * 8;
break;
default:
throw new UnsupportedOperationException("Unsupported JDBC type: " + jdbcType);
}
return PhysicalColumn.of(
columnName,
seaTunnelType,
columnLength,
isNullable != ResultSetMetaData.columnNoNulls,
null,
comment,
nativeType,
false,
false,
bitLength,
Collections.emptyMap(),
longColumnLength);
}