Máte pravdu, že obecnou strategií je vytvořit novou třídu, která implementuje SnapshotGenerator, ale musíte udělat také několik dalších kroků. Obecný proces pořízení snímku je:
- Liquibase vyhledává implementace SnapshotGenerator a volá addTo() pro každý objekt, který najde v databázi. Pro vaše typy pravděpodobně budete chtít rychlou „jestliže předán objekt instanceof Schema“, protože jsou to typy, které jsou součástí schématu.
- Budete muset vytvořit nové objekty Package, StoredProcedure atd., které implementují DatabaseObject. Budou jako třída ehte liquibase.structure.core.Table a zachycují stav objektu. Jsou vytvořeny ve vaší metodě SnapshotGenerator.addsTo() do té míry, že je lze identifikovat (sada názvu, schématu atd.)
- Všechny objekty, které jsou přidány metodou addTo() jsou poté spuštěny vaší metodou SnapshotGenerator.snapshotObject(), která stáhne všechna další metadata, která jste původně nezískali, jako je text uložené procedury atd.
- Jakmile má liquibase snímek obsahující vaše objekty, porovná snímek s jiným (v případě generationChangeLog prázdný snímek), aby určil, které objekty na druhém snímku chybí, neočekávané a změněné. Poté hledá implementace MissingObjectChangeGenerator, UnexpectedObjectChangeGenerator a ChangedObjectChangeGenerator. Pro createChangeLog budou pouze "chybějící" objekty, takže byste implementovali MissingTriggerChangeGenerator, MissingPackagedChangeGenerator atd. Jejich úkolem je vytvořit instance změn a vytvořit chybějící objekty
- Třídy Msising*ChangeGenerator mohou vracet instance RawSqlChange nebo můžete vytvořit nové implementace změny, jako je CreateTriggerChange.