6 Groovy Preconditions - Reference Documentation
Authors: Burt Beckwith
Version: 1.4.0
6 Groovy Preconditions
In addition to the built-in Liquibase preconditions (see the documentation for what's available) you can also specify preconditions using Groovy code (as long as you're using the Groovy DSL file format). These changes use thegrailsPrecondition
tag name and are contained in the databaseChangeLog
tag or in a changeSet
tag like standard built-in tags.General format
This is general format of a Groovy-based precondition:databaseChangeLog = { changeSet(author: '...', id: '...') { preConditions { grailsPrecondition { check { // use an assertion assert x == x // use an assertion with an error message assert y == y : 'value cannot be 237' // call the fail method if (x != x) { fail 'x != x' } // throw an exception (the fail method is preferred) if (y != y) { throw new RuntimeException('y != y') } } } } } }
- use a simple assertion
- use an assertion with a message
- call the
fail(String message)
method (throws aPreconditionFailedException
) - throw an exception (shouldn't be necessary - use
assert
orfail()
instead)
Available variables
database
- the current Liquibase
Database
instance databaseConnection
- the current Liquibase
DatabaseConnection
instance, which is a wrapper around the JDBCConnection
(but doesn't implement theConnection
interface) connection
- the real JDBC
Connection
instance (a shortcut fordatabase.connection.wrappedConnection
) sql
- a
groovy.sql.Sql
instance which uses the currentconnection
and can be used for arbitrary queries and updates resourceAccessor
- the current Liquibase
ResourceAccessor
instance ctx
- the Spring
ApplicationContext
application
- the
GrailsApplication
changeSet
- the current Liquibase
ChangeSet
instance changeLog
- the current Liquibase
DatabaseChangeLog
instance
Utility methods
createDatabaseSnapshotGenerator()
- retrieves the
DatabaseSnapshotGenerator
for the currentDatabase
createDatabaseSnapshot(String schemaName = null)
- creates a
DatabaseSnapshot
for the currentDatabase
(and schema if specified)