in flink-connector-jdbc-oceanbase/src/main/java/org/apache/flink/connector/jdbc/oceanbase/database/catalog/OceanBaseTypeMapper.java [50:118]
public DataType mapping(ObjectPath tablePath, ResultSetMetaData metadata, int colIndex)
throws SQLException {
String typeName = metadata.getColumnTypeName(colIndex).toUpperCase();
int jdbcType = metadata.getColumnType(colIndex);
String columnName = metadata.getColumnName(colIndex);
int precision = metadata.getPrecision(colIndex);
int scale = metadata.getScale(colIndex);
switch (jdbcType) {
case Types.BIT:
return DataTypes.BOOLEAN();
case Types.TINYINT:
return isUnsignedType(typeName) || precision > 4
? DataTypes.SMALLINT()
: DataTypes.TINYINT();
case Types.SMALLINT:
return isUnsignedType(typeName) ? DataTypes.INT() : DataTypes.SMALLINT();
case Types.INTEGER:
return !typeName.toUpperCase().startsWith("MEDIUMINT") && isUnsignedType(typeName)
? DataTypes.BIGINT()
: DataTypes.INT();
case Types.BIGINT:
return isUnsignedType(typeName) ? DataTypes.DECIMAL(20, 0) : DataTypes.BIGINT();
case Types.FLOAT:
case Types.NUMERIC:
case Types.DECIMAL:
if (compatibleMode.isMySQLMode()) {
return isUnsignedType(typeName)
? getDecimalType(precision + 1, scale)
: getDecimalType(precision, scale);
}
return getNumericType(precision, scale);
case Types.REAL:
case TYPE_BINARY_FLOAT:
return DataTypes.FLOAT();
case Types.DOUBLE:
case TYPE_BINARY_DOUBLE:
return DataTypes.DOUBLE();
case Types.DATE:
return "YEAR".equals(typeName) ? DataTypes.INT() : DataTypes.DATE();
case Types.TIME:
return isExplicitPrecision(precision, RAW_TIME_LENGTH)
? DataTypes.TIME(precision - RAW_TIME_LENGTH - 1)
: DataTypes.TIME(0);
case Types.TIMESTAMP:
return typeName.equalsIgnoreCase("DATE")
? DataTypes.DATE()
: isExplicitPrecision(precision, RAW_TIMESTAMP_LENGTH)
? DataTypes.TIMESTAMP(precision - RAW_TIMESTAMP_LENGTH - 1)
: DataTypes.TIMESTAMP(0);
case Types.CHAR:
case Types.NCHAR:
return DataTypes.CHAR(precision);
case Types.VARCHAR:
case Types.NVARCHAR:
case Types.LONGVARCHAR:
return precision > 0 ? DataTypes.VARCHAR(precision) : DataTypes.STRING();
case Types.CLOB:
return DataTypes.STRING();
case Types.BINARY:
case Types.VARBINARY:
case Types.LONGVARBINARY:
case Types.BLOB:
return DataTypes.BYTES();
default:
throw new UnsupportedOperationException(
String.format(
"Doesn't support type '%s' on column '%s'.", typeName, columnName));
}
}