package liquibase.sqlgenerator.core; import liquibase.database.Database; import liquibase.database.core.MySQLDatabase; import liquibase.sql.Sql; import liquibase.sql.UnparsedSql; import liquibase.sqlgenerator.SqlGeneratorChain; import liquibase.statement.core.AddAutoIncrementStatement; import liquibase.structure.DatabaseObject; import liquibase.structure.core.Schema; import liquibase.structure.core.Table; /** * SQLite does not support this ALTER TABLE operation until now. * For more information see: http://www.sqlite.org/omitted.html. * This is a small work around... */ public class AddAutoIncrementGeneratorMySQL extends AddAutoIncrementGenerator { @Override public int getPriority() { return PRIORITY_DATABASE; } @Override public boolean supports(AddAutoIncrementStatement statement, Database database) { return database instanceof MySQLDatabase; } @Override public Sql[] generateSql(final AddAutoIncrementStatement statement, Database database, SqlGeneratorChain sqlGeneratorChain) { Sql[] sql = super.generateSql(statement, database, sqlGeneratorChain); if(statement.getStartWith() != null){ MySQLDatabase mysqlDatabase = (MySQLDatabase)database; String alterTableSql = "ALTER TABLE " + mysqlDatabase.escapeTableName(statement.getCatalogName(), statement.getSchemaName(), statement.getTableName()) + " " + mysqlDatabase.getTableOptionAutoIncrementStartWithClause(statement.getStartWith()); sql = concact(sql, new UnparsedSql(alterTableSql, getAffectedTable(statement))); } return sql; } private Sql[] concact(Sql[] origSql, UnparsedSql unparsedSql) { Sql[] changedSql = new Sql[origSql.length+1]; System.arraycopy(origSql, 0, changedSql, 0, origSql.length); changedSql[origSql.length] = unparsedSql; return changedSql; } private DatabaseObject getAffectedTable(AddAutoIncrementStatement statement) { return new Table().setName(statement.getTableName()).setSchema(new Schema(statement.getCatalogName(), statement.getSchemaName())); } }