1 package liquibase.change.custom;
2
3 import liquibase.database.Database;
4 import liquibase.exception.CustomChangeException;
5 import liquibase.statement.SqlStatement;
6
7 /**
8 * Interface to implement when creating a custom change that generates SQL. When updating a database, implementing this
9 * interface is preferred over CustomTaskChange because the SQL can either be executed directly or saved to a text file
10 * for later use depending on the migration mode used. To allow the change to be rolled back, also implement the
11 * CustomSqlRollback interface. If your change requires sql-based logic and non-sql-based logic, it is best to create a
12 * change set that contains a mix of CustomSqlChange and CustomTaskChange calls.
13 *
14 * @see liquibase.change.custom.CustomSqlRollback
15 * @see liquibase.change.custom.CustomTaskChange
16 */
17 public interface CustomSqlChange extends CustomChange {
18 /**
19 * Generates the SQL statements required to run the change
20 *
21 * @param database
22 * the target {@link liquibase.database.Database} associated to this change's statements
23 * @return an array of {@link SqlStatement}s with the statements
24 * @throws liquibase.exception.CustomChangeException
25 * if an exception occurs while processing this change
26 * @throws liquibase.exception.UnsupportedChangeException
27 * if this change is not supported by the {@link liquibase.database.Database} passed as argument
28 */
29 public SqlStatement[] generateStatements(Database database) throws CustomChangeException;
30
31 }