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.OracleDatabase;
7 import liquibase.database.core.SQLiteDatabase;
8 import liquibase.database.core.SybaseASADatabase;
9 import liquibase.exception.ValidationErrors;
10 import liquibase.sql.Sql;
11 import liquibase.sql.UnparsedSql;
12 import liquibase.sqlgenerator.SqlGeneratorChain;
13 import liquibase.statement.core.DropUniqueConstraintStatement;
14
15 public class DropUniqueConstraintGenerator extends AbstractSqlGenerator<DropUniqueConstraintStatement> {
16
17 @Override
18 public boolean supports(DropUniqueConstraintStatement statement, Database database) {
19 return !(database instanceof SQLiteDatabase);
20 }
21
22 @Override
23 public ValidationErrors validate(DropUniqueConstraintStatement dropUniqueConstraintStatement, Database database,
24 SqlGeneratorChain sqlGeneratorChain) {
25 ValidationErrors validationErrors = new ValidationErrors();
26 validationErrors.checkRequiredField("tableName", dropUniqueConstraintStatement.getTableName());
27 return validationErrors;
28 }
29
30 @Override
31 public Sql[] generateSql(DropUniqueConstraintStatement statement, Database database,
32 SqlGeneratorChain sqlGeneratorChain) {
33 String sql;
34 if (database instanceof MySQLDatabase) {
35 sql = "ALTER TABLE " + database.escapeTableName(statement.getSchemaName(), statement.getTableName())
36 + " DROP KEY " + database.escapeConstraintName(statement.getConstraintName());
37 } else if (database instanceof MaxDBDatabase) {
38 sql = "DROP INDEX " + database.escapeConstraintName(statement.getConstraintName()) + " ON "
39 + database.escapeTableName(statement.getSchemaName(), statement.getTableName());
40 } else if (database instanceof OracleDatabase) {
41 sql = "ALTER TABLE " + database.escapeTableName(statement.getSchemaName(), statement.getTableName())
42 + " DROP CONSTRAINT " + database.escapeConstraintName(statement.getConstraintName())
43 + " DROP INDEX";
44 } else if (database instanceof SybaseASADatabase) {
45 sql = "ALTER TABLE " + database.escapeTableName(statement.getSchemaName(), statement.getTableName())
46 + " DROP UNIQUE (" + statement.getUniqueColumns() + ")";
47 } else {
48 sql = "ALTER TABLE " + database.escapeTableName(statement.getSchemaName(), statement.getTableName())
49 + " DROP CONSTRAINT " + database.escapeConstraintName(statement.getConstraintName());
50 }
51
52 return new Sql[] { new UnparsedSql(sql) };
53 }
54 }