package liquibase.change.core; import liquibase.change.AbstractChange; import liquibase.change.ChangeMetaData; import liquibase.database.Database; import liquibase.database.core.SQLiteDatabase; import liquibase.statement.SqlStatement; import liquibase.statement.core.DropForeignKeyConstraintStatement; /** * Drops an existing foreign key constraint. */ public class DropForeignKeyConstraintChange extends AbstractChange { private String baseTableSchemaName; private String baseTableName; private String constraintName; public DropForeignKeyConstraintChange() { super("dropForeignKeyConstraint", "Drop Foreign Key Constraint", ChangeMetaData.PRIORITY_DEFAULT); } public String getBaseTableSchemaName() { return baseTableSchemaName; } public void setBaseTableSchemaName(String baseTableSchemaName) { this.baseTableSchemaName = baseTableSchemaName; } public String getBaseTableName() { return baseTableName; } public void setBaseTableName(String baseTableName) { this.baseTableName = baseTableName; } public String getConstraintName() { return constraintName; } public void setConstraintName(String constraintName) { this.constraintName = constraintName; } public SqlStatement[] generateStatements(Database database) { if (database instanceof SQLiteDatabase) { // return special statements for SQLite databases return generateStatementsForSQLiteDatabase(database); } return new SqlStatement[]{ new DropForeignKeyConstraintStatement( getBaseTableSchemaName() == null?database.getDefaultSchemaName():getBaseTableSchemaName(), getBaseTableName(), getConstraintName()), }; } private SqlStatement[] generateStatementsForSQLiteDatabase(Database database) { // SQLite does not support foreign keys until now. // See for more information: http://www.sqlite.org/omitted.html // Therefore this is an empty operation... return new SqlStatement[]{}; } public String getConfirmationMessage() { return "Foreign key " + getConstraintName() + " dropped"; } }