View Javadoc

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                  ; //not supported
36              } else {
37                  sql += " USING INDEX TABLESPACE "+statement.getTablespace();
38              }
39          }
40  
41          return new Sql[] {
42                  new UnparsedSql(sql)
43          };
44      }
45  }