package liquibase.change.core; import liquibase.change.AbstractChange; import liquibase.change.DatabaseChange; import liquibase.change.ChangeMetaData; import liquibase.change.DatabaseChangeProperty; import liquibase.database.core.DB2Database; import liquibase.statement.SqlStatement; import liquibase.statement.core.ModifyDataTypeStatement; import liquibase.database.Database; import liquibase.statement.core.ReorganizeTableStatement; @DatabaseChange(name="modifyDataType", description = "Modify data type", priority = ChangeMetaData.PRIORITY_DEFAULT, appliesTo = "column") public class ModifyDataTypeChange extends AbstractChange { private String catalogName; private String schemaName; private String tableName; private String columnName; private String newDataType; @Override public String getConfirmationMessage() { return tableName+"."+columnName+" datatype was changed to "+newDataType; } @Override public SqlStatement[] generateStatements(Database database) { ModifyDataTypeStatement modifyDataTypeStatement = new ModifyDataTypeStatement(getCatalogName(), getSchemaName(), getTableName(), getColumnName(), getNewDataType()); if (database instanceof DB2Database) { return new SqlStatement[] { modifyDataTypeStatement, new ReorganizeTableStatement(getCatalogName(), getSchemaName(), getTableName()) }; } else { return new SqlStatement[] { modifyDataTypeStatement }; } } @DatabaseChangeProperty(mustEqualExisting ="column.relation.catalog", since = "3.0") public String getCatalogName() { return catalogName; } public void setCatalogName(String catalogName) { this.catalogName = catalogName; } @DatabaseChangeProperty(mustEqualExisting ="column.relation.schema") public String getSchemaName() { return schemaName; } public void setSchemaName(String schemaName) { this.schemaName = schemaName; } @DatabaseChangeProperty(mustEqualExisting = "column.relation") public String getTableName() { return tableName; } public void setTableName(String tableName) { this.tableName = tableName; } @DatabaseChangeProperty(mustEqualExisting = "column") public String getColumnName() { return columnName; } public void setColumnName(String columnName) { this.columnName = columnName; } @DatabaseChangeProperty() public String getNewDataType() { return newDataType; } public void setNewDataType(String newDataType) { this.newDataType = newDataType; } @Override public String getSerializedObjectNamespace() { return STANDARD_CHANGELOG_NAMESPACE; } }