This was going to be another possible extension contest entry, but day-job demands got in the way…
Here’s an idea for checking preconditions during updateSQL:
Create a DatabaseWrapper class which encapsulates a rolling DatabaseSnapshot and a regular Database.
Build an initial DatabaseSnapshot at startup.
Use new custom SqlGenerators to modify the rolling DatabaseSnapshot as appropriate for the statement (e.g. CreateTable, AddColumn, etc).
When a precondition asks for a DatabaseSnapshot, let the Wrapper serve up the rollingDatabaseSnapshot instead.
That way, if you have precondition dependencies, your updateSQL should take those into account.