in fastmodel-transform/fastmodel-transform-oracle/src/main/java/com/aliyun/fastmodel/transform/oracle/datatype/Oracle2MysqlDataTypeConverter.java [86:141]
public BaseDataType convert(BaseDataType baseDataType) {
IDataTypeName typeName = baseDataType.getTypeName();
if (baseDataType instanceof RowDataType) {
throw new UnsupportedOperationException("unsupported row dataType");
}
String value = null;
if (typeName == DataTypeEnums.CUSTOM) {
GenericDataType genericDataType = (GenericDataType)baseDataType;
value = genericDataType.getName();
} else {
value = typeName.getValue();
}
value = value.toUpperCase();
BaseDataType dataType = ORACLE_2_MYSQL_DATA_TYPE_MAP.get(value);
if (dataType != null) {
return dataType;
}
GenericDataType genericDataType = (GenericDataType)baseDataType;
//nchar
String nchar = "NCHAR";
if (StringUtils.equalsIgnoreCase(value, nchar)) {
GenericDataType nchar1 = getNCharDataType(genericDataType, nchar);
if (nchar1 != null) {return nchar1;}
}
String resultDataType = COPY_DATA_TYPE_MAP.get(value);
if (StringUtils.isNotBlank(resultDataType)) {
return DataTypeUtil.simpleType(resultDataType, genericDataType.getArguments());
}
//CHAR
if (StringUtils.equalsIgnoreCase(value, "CHAR") ||
StringUtils.equalsIgnoreCase(value, "CHARACTER")) {
return getBaseDataTypeWithChar(genericDataType);
}
//NUMBER(p,0), NUMBER(p)
String number = "NUMBER";
if (StringUtils.equalsIgnoreCase(value, number)) {
return getBaseDataTypeWithNumber(genericDataType);
}
//ROWID
if (StringUtils.equalsIgnoreCase(value, "ROWID")) {
return DataTypeUtil.simpleType(DataTypeEnums.CHAR, new NumericParameter("10"));
}
//SMALLINT
if (StringUtils.equalsIgnoreCase(value, "SMALLINT")) {
return DataTypeUtil.simpleType(DataTypeEnums.DECIMAL, new NumericParameter("38"));
}
//TIMESTAMP(p) WITH TIME ZONE => DATETIME(p)
if (StringUtils.startsWith(value, "TIMESTAMP") && StringUtils.endsWith(value, "ZONE")) {
return new GenericDataType(new Identifier(DataTypeEnums.DATETIME.name()), genericDataType.getArguments());
}
//INTERVAL YEAR, INTERVAL DAY(p) TO SECOND(s)
if (StringUtils.startsWith(value, "INTERVAL")) {
return DataTypeUtil.simpleType(DataTypeEnums.VARCHAR, new NumericParameter("30"));
}
return baseDataType;
}