View Javadoc

1   package liquibase.precondition.core;
2   
3   import liquibase.changelog.ChangeSet;
4   import liquibase.changelog.DatabaseChangeLog;
5   import liquibase.database.Database;
6   import liquibase.exception.DatabaseException;
7   import liquibase.exception.PreconditionErrorException;
8   import liquibase.exception.PreconditionFailedException;
9   import liquibase.exception.ValidationErrors;
10  import liquibase.exception.Warnings;
11  import liquibase.precondition.Precondition;
12  import liquibase.snapshot.DatabaseSnapshotGeneratorFactory;
13  import liquibase.util.StringUtils;
14  
15  public class ColumnExistsPrecondition implements Precondition {
16      private String schemaName;
17      private String tableName;
18      private String columnName;
19  
20      public String getSchemaName() {
21          return schemaName;
22      }
23  
24      public void setSchemaName(String schemaName) {
25          this.schemaName = StringUtils.trimToNull(schemaName);
26      }
27  
28      public String getTableName() {
29          return tableName;
30      }
31  
32      public void setTableName(String tableName) {
33          this.tableName = tableName;
34      }
35  
36      public String getColumnName() {
37          return columnName;
38      }
39  
40      public void setColumnName(String columnName) {
41          this.columnName = columnName;
42      }
43  
44      @Override
45      public Warnings warn(Database database) {
46          return new Warnings();
47      }
48  
49      @Override
50      public ValidationErrors validate(Database database) {
51          return new ValidationErrors();
52      }
53  
54      @Override
55      public void check(Database database, DatabaseChangeLog changeLog, ChangeSet changeSet)
56              throws PreconditionFailedException, PreconditionErrorException {
57          try {
58              if (DatabaseSnapshotGeneratorFactory.getInstance().getGenerator(database)
59                      .getColumn(getSchemaName(), getTableName(), getColumnName(), database) == null) {
60                  throw new PreconditionFailedException("Column '"
61                          + database.escapeColumnName(getSchemaName(), getTableName(), getColumnName())
62                          + "' does not exist", changeLog, this);
63              }
64          } catch (DatabaseException e) {
65              throw new PreconditionErrorException(e, changeLog, this);
66          }
67      }
68  
69      @Override
70      public String getName() {
71          return "columnExists";
72      }
73  }