1 package liquibase.sqlgenerator.ext;
2
3 import liquibase.database.Database;
4 import liquibase.database.core.*;
5 import liquibase.exception.ValidationErrors;
6 import liquibase.sql.Sql;
7 import liquibase.sql.UnparsedSql;
8 import liquibase.sqlgenerator.SqlGeneratorChain;
9 import liquibase.statement.core.AddPrimaryKeyStatement;
10 import liquibase.util.StringUtils;
11
12 import static liquibase.ext.Constants.EXTENSION_PRIORITY;
13
14
15 public class AddPrimaryKeyGenerator extends liquibase.sqlgenerator.core.AddPrimaryKeyGenerator {
16
17 @Override
18 public int getPriority() {
19 return EXTENSION_PRIORITY;
20 }
21
22
23 public Sql[] generateSql(AddPrimaryKeyStatement statement, Database database, SqlGeneratorChain sqlGeneratorChain) {
24 String sql;
25 if (statement.getConstraintName() == null || database instanceof MySQLDatabase || database instanceof SybaseASADatabase) {
26 sql = "ALTER TABLE " + database.escapeTableName(null, statement.getTableName()) + " ADD PRIMARY KEY (" + database.escapeColumnNameList(statement.getColumnNames()) + ")";
27 } else {
28 sql = "ALTER TABLE " + database.escapeTableName(null, statement.getTableName()) + " ADD CONSTRAINT " + database.escapeConstraintName(statement.getConstraintName()) + " PRIMARY KEY (" + database.escapeColumnNameList(statement.getColumnNames()) + ")";
29 }
30
31 if (StringUtils.trimToNull(statement.getTablespace()) != null && database.supportsTablespaces()) {
32 if (database instanceof MSSQLDatabase) {
33 sql += " ON "+statement.getTablespace();
34 } else if (database instanceof DB2Database || database instanceof SybaseASADatabase) {
35 ;
36 } else {
37 sql += " USING INDEX TABLESPACE "+statement.getTablespace();
38 }
39 }
40
41 return new Sql[] {
42 new UnparsedSql(sql)
43 };
44 }
45 }