in seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/vertica/VerticaTypeMapper.java [93:173]
public SeaTunnelDataType<?> mapping(ResultSetMetaData metadata, int colIndex)
throws SQLException {
String type = metadata.getColumnTypeName(colIndex).toUpperCase();
int precision = metadata.getPrecision(colIndex);
int scale = metadata.getScale(colIndex);
switch (type) {
case VERTICA_BIT:
return BasicType.BOOLEAN_TYPE;
case VERTICA_TINYINT:
case VERTICA_TINYINT_UNSIGNED:
case VERTICA_SMALLINT:
case VERTICA_SMALLINT_UNSIGNED:
case VERTICA_MEDIUMINT:
case VERTICA_MEDIUMINT_UNSIGNED:
case VERTICA_INT:
case VERTICA_INTEGER:
case VERTICA_YEAR:
return BasicType.INT_TYPE;
case VERTICA_INT_UNSIGNED:
case VERTICA_INTEGER_UNSIGNED:
case VERTICA_BIGINT:
return BasicType.LONG_TYPE;
case VERTICA_BIGINT_UNSIGNED:
return new DecimalType(20, 0);
case VERTICA_DECIMAL:
if (precision > 38) {
LOG.warn("{} will probably cause value overflow.", VERTICA_DECIMAL);
return new DecimalType(38, 18);
}
return new DecimalType(precision, scale);
case VERTICA_DECIMAL_UNSIGNED:
return new DecimalType(precision + 1, scale);
case VERTICA_FLOAT:
return BasicType.FLOAT_TYPE;
case VERTICA_FLOAT_UNSIGNED:
LOG.warn("{} will probably cause value overflow.", VERTICA_FLOAT_UNSIGNED);
return BasicType.FLOAT_TYPE;
case VERTICA_DOUBLE:
return BasicType.DOUBLE_TYPE;
case VERTICA_DOUBLE_UNSIGNED:
LOG.warn("{} will probably cause value overflow.", VERTICA_DOUBLE_UNSIGNED);
return BasicType.DOUBLE_TYPE;
case VERTICA_CHAR:
case VERTICA_TINYTEXT:
case VERTICA_MEDIUMTEXT:
case VERTICA_TEXT:
case VERTICA_VARCHAR:
case VERTICA_JSON:
return BasicType.STRING_TYPE;
case VERTICA_LONGTEXT:
LOG.warn(
"Type '{}' has a maximum precision of 536870911 in Vertica. "
+ "Due to limitations in the seatunnel type system, "
+ "the precision will be set to 2147483647.",
VERTICA_LONGTEXT);
return BasicType.STRING_TYPE;
case VERTICA_DATE:
return LocalTimeType.LOCAL_DATE_TYPE;
case VERTICA_TIME:
return LocalTimeType.LOCAL_TIME_TYPE;
case VERTICA_DATETIME:
case VERTICA_TIMESTAMP:
return LocalTimeType.LOCAL_DATE_TIME_TYPE;
case VERTICA_TINYBLOB:
case VERTICA_MEDIUMBLOB:
case VERTICA_BLOB:
case VERTICA_LONGBLOB:
case VERTICA_VARBINARY:
case VERTICA_BINARY:
return PrimitiveByteArrayType.INSTANCE;
// Doesn't support yet
case VERTICA_GEOMETRY:
case VERTICA_UNKNOWN:
default:
final String jdbcColumnName = metadata.getColumnName(colIndex);
throw CommonError.convertToSeaTunnelTypeError(
DatabaseIdentifier.VERTICA, type, jdbcColumnName);
}
}