package liquibase.datatype.core; import liquibase.database.Database; import liquibase.database.core.*; import liquibase.datatype.DataTypeInfo; import liquibase.datatype.DatabaseDataType; import liquibase.datatype.LiquibaseDataType; import liquibase.statement.DatabaseFunction; @DataTypeInfo(name = "int", aliases = { "integer", "java.sql.Types.INTEGER", "java.lang.Integer", "serial", "int4", "serial4" }, minParameters = 0, maxParameters = 1, priority = LiquibaseDataType.PRIORITY_DEFAULT) public class IntType 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 InformixDatabase && isAutoIncrement()) { return new DatabaseDataType("SERIAL"); } if (database instanceof DB2Database || database instanceof DerbyDatabase || database instanceof OracleDatabase) { return new DatabaseDataType("INTEGER"); } if (database instanceof PostgresDatabase) { if (autoIncrement) { return new DatabaseDataType("SERIAL"); } } if (database instanceof MSSQLDatabase) { return new DatabaseDataType(database.escapeDataTypeName("int")); } if (database instanceof MySQLDatabase) { DatabaseDataType type = new DatabaseDataType("INT"); type.addAdditionalInformation(getAdditionalInformation()); return type; } if (database instanceof HsqlDatabase || database instanceof FirebirdDatabase || database instanceof InformixDatabase) { return new DatabaseDataType("INT"); } if (database instanceof SQLiteDatabase) { return new DatabaseDataType("INTEGER"); } return super.toDatabaseDataType(database); //sqllite // if (columnTypeString.equals("INTEGER") || // columnTypeString.toLowerCase(Locale.ENGLISH).contains("int") || // columnTypeString.toLowerCase(Locale.ENGLISH).contains("bit")) { // type = new IntType("INTEGER"); } @Override public void finishInitialization(String originalDefinition) { super.finishInitialization(originalDefinition); if (originalDefinition.toLowerCase().startsWith("serial")) { autoIncrement = true; } } @Override public String objectToSql(Object value, Database database) { if (value == null || value.toString().equalsIgnoreCase("null")) { return null; } if (value instanceof DatabaseFunction) { return value.toString(); } return formatNumber(value.toString()); } }