in eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/source/dialect/mysql/MysqlDataTypeConvertor.java [106:190]
public EventMeshDataType<?> toEventMeshType(MysqlType connectorDataType, Map<String, Object> dataTypeProperties) throws DataTypeConvertException {
Objects.requireNonNull(connectorDataType, "MysqlType can't be null");
switch (connectorDataType) {
case NULL:
return NullEventMeshDataType.INSTANCE;
case BOOLEAN:
return BooleanEventMeshDataType.INSTANCE;
case BIT: {
/**
* @see <a href="https://dev.mysql.com/doc/refman/8.0/en/bit-type.html">Mysql doc</a>
*/
if (dataTypeProperties == null) {
return BytesEventMeshDataType.INSTANCE;
}
Integer precision = (Integer) dataTypeProperties.get(MysqlDataTypeConvertor.PRECISION);
if (precision != null && precision == 1) {
return BooleanEventMeshDataType.INSTANCE;
}
return BytesEventMeshDataType.INSTANCE;
}
case TINYINT:
return Int8EventMeshDataType.INSTANCE;
case TINYINT_UNSIGNED:
case SMALLINT:
return Int16EventMeshDataType.INSTANCE;
case SMALLINT_UNSIGNED:
case INT:
case MEDIUMINT:
case MEDIUMINT_UNSIGNED:
return Int32EventMeshDataType.INSTANCE;
case INT_UNSIGNED:
case BIGINT:
return Int64EventMeshDataType.INSTANCE;
case FLOAT:
case FLOAT_UNSIGNED:
return Float32EventMeshDataType.INSTANCE;
case DOUBLE:
case DOUBLE_UNSIGNED:
return Float64EventMeshDataType.INSTANCE;
case TIME:
return TimeEventMeshDataType.INSTANCE;
case YEAR:
return YearEventMeshDataType.INSTANCE;
case DATE:
return DateEventMeshDataType.INSTANCE;
case TIMESTAMP:
case DATETIME:
return DateTimeEventMeshDataType.INSTANCE;
case CHAR:
case VARCHAR:
case TINYTEXT:
case TEXT:
case MEDIUMTEXT:
case LONGTEXT:
case JSON:
case ENUM:
case SET:
return StringEventMeshDataType.INSTANCE;
case BINARY:
case VARBINARY:
case TINYBLOB:
case BLOB:
case MEDIUMBLOB:
case LONGBLOB:
case GEOMETRY:
return BytesEventMeshDataType.INSTANCE;
case BIGINT_UNSIGNED:
case DECIMAL:
case DECIMAL_UNSIGNED: {
/**
* @see <a https://dev.mysql.com/doc/refman/8.0/en/fixed-point-types.html">Mysql doc-DECIMAL, NUMERIC</a>
*/
if (dataTypeProperties == null) {
return new DecimalEventMeshDataType(DEFAULT_PRECISION, DEFAULT_SCALE);
}
Integer precision = (Integer) dataTypeProperties.getOrDefault(PRECISION, DEFAULT_PRECISION);
Integer scale = (Integer) dataTypeProperties.getOrDefault(SCALE, DEFAULT_SCALE);
return new DecimalEventMeshDataType(precision, scale);
}
default:
throw new DataTypeConvertException(String.format("%s type is not supported", connectorDataType.getName()));
}
}