1 package liquibase.sqlgenerator.core;
2
3 import liquibase.database.Database;
4 import liquibase.database.core.MaxDBDatabase;
5 import liquibase.database.core.MySQLDatabase;
6 import liquibase.database.core.SQLiteDatabase;
7 import liquibase.database.core.SybaseASADatabase;
8 import liquibase.exception.ValidationErrors;
9 import liquibase.sql.Sql;
10 import liquibase.sql.UnparsedSql;
11 import liquibase.sqlgenerator.SqlGenerator;
12 import liquibase.sqlgenerator.SqlGeneratorChain;
13 import liquibase.statement.core.DropForeignKeyConstraintStatement;
14
15 public class DropForeignKeyConstraintGenerator extends AbstractSqlGenerator<DropForeignKeyConstraintStatement> {
16
17 @Override
18 public boolean supports(DropForeignKeyConstraintStatement statement, Database database) {
19 return (!(database instanceof SQLiteDatabase));
20 }
21
22 public ValidationErrors validate(DropForeignKeyConstraintStatement dropForeignKeyConstraintStatement,
23 Database database, SqlGeneratorChain sqlGeneratorChain) {
24 ValidationErrors validationErrors = new ValidationErrors();
25 validationErrors.checkRequiredField("baseTableName", dropForeignKeyConstraintStatement.getBaseTableName());
26 validationErrors.checkRequiredField("constraintName", dropForeignKeyConstraintStatement.getConstraintName());
27 return validationErrors;
28 }
29
30 public Sql[] generateSql(DropForeignKeyConstraintStatement statement, Database database,
31 SqlGeneratorChain sqlGeneratorChain) {
32 if (database instanceof MySQLDatabase || database instanceof MaxDBDatabase
33 || database instanceof SybaseASADatabase) {
34 return new Sql[] { new UnparsedSql("ALTER TABLE "
35 + database.escapeTableName(statement.getBaseTableSchemaName(), statement.getBaseTableName())
36 + " DROP FOREIGN KEY " + database.escapeConstraintName(statement.getConstraintName())) };
37 } else {
38 return new Sql[] { new UnparsedSql("ALTER TABLE "
39 + database.escapeTableName(statement.getBaseTableSchemaName(), statement.getBaseTableName())
40 + " DROP CONSTRAINT " + database.escapeConstraintName(statement.getConstraintName())) };
41 }
42
43 }
44 }