package liquibase.database.typeconversion.core; import liquibase.database.Database; import liquibase.database.core.DB2Database; import liquibase.database.structure.type.BooleanType; import liquibase.database.structure.type.CurrencyType; import liquibase.database.structure.type.DateTimeType; import liquibase.database.structure.type.NumberType; import java.text.ParseException; import java.sql.Types; public class DB2TypeConverter extends AbstractTypeConverter { public int getPriority() { return PRIORITY_DATABASE; } public boolean supports(Database database) { return database instanceof DB2Database; } @Override public Object convertDatabaseValueToObject(Object defaultValue, int dataType, int columnSize, int decimalDigits, Database database) throws ParseException { if (defaultValue != null && defaultValue instanceof String) { if (dataType == Types.TIMESTAMP) { defaultValue = ((String) defaultValue).replaceFirst("^\"SYSIBM\".\"TIMESTAMP\"\\('", "").replaceFirst("'\\)", ""); } else if (dataType == Types.TIME) { defaultValue = ((String) defaultValue).replaceFirst("^\"SYSIBM\".\"TIME\"\\('", "").replaceFirst("'\\)", ""); } else if (dataType == Types.DATE) { defaultValue = ((String) defaultValue).replaceFirst("^\"SYSIBM\".\"DATE\"\\('", "").replaceFirst("'\\)", ""); } } return super.convertDatabaseValueToObject(defaultValue, dataType, columnSize, decimalDigits, database); } @Override public BooleanType getBooleanType() { return new BooleanType.NumericBooleanType("SMALLINT"); } @Override public CurrencyType getCurrencyType() { return new CurrencyType("DECIMAL(19,4)"); } @Override public DateTimeType getDateTimeType() { return new DateTimeType("TIMESTAMP"); } @Override public NumberType getNumberType() { return new NumberType("DECFLOAT(16)"); } }