package liquibase.datatype.core; import java.util.Arrays; import liquibase.database.Database; import liquibase.database.core.*; import liquibase.datatype.DataTypeInfo; import liquibase.datatype.DatabaseDataType; import liquibase.datatype.LiquibaseDataType; @DataTypeInfo(name = "decimal", aliases = { "java.sql.Types.DECIMAL", "java.math.BigDecimal" }, minParameters = 0, maxParameters = 2, priority = LiquibaseDataType.PRIORITY_DEFAULT) public class DecimalType extends LiquibaseDataType { private boolean autoIncrement; public boolean isAutoIncrement() { return autoIncrement; } public void setAutoIncrement(boolean autoIncrement) { this.autoIncrement = autoIncrement; } @Override public DatabaseDataType toDatabaseDataType(Database database) { if (database instanceof MSSQLDatabase) { Object[] parameters = getParameters(); if (parameters.length == 0) { parameters = new Object[] { 18, 0 }; } else if (parameters.length == 1) { parameters = new Object[] { parameters[0], 0 }; } else if (parameters.length > 2) { parameters = Arrays.copyOfRange(parameters, 0, 2); } return new DatabaseDataType(database.escapeDataTypeName("decimal"), parameters); } if (database instanceof InformixDatabase) { if(getParameters() != null && getParameters().length == 2) { // Don't use 255 as a scale because it is invalid, // use only 1 argument in this special case if("255".equals(String.valueOf(getParameters()[1]))) { return new DatabaseDataType(getName(), getParameters()[0]); } } } return super.toDatabaseDataType(database); } }