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 }