public BaseDataType convert()

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;
    }