Je hebt gelijk dat de algemene strategie is om een nieuwe klasse te maken die SnapshotGenerator implementeert, maar er zijn nog een paar andere stappen die je moet doen. Het algemene snapshotproces is:
- Liquibase zoekt naar SnapshotGenerator-implementaties en roept de addTo() aan voor elk object dat het in de database vindt. Voor uw typen wilt u waarschijnlijk een snelle "indien doorgegeven objectinstantie van Schema" omdat het typen zijn die deel uitmaken van een schema.
- U zult nieuwe Package, StoredProcedure, etc objecten moeten maken die DatabaseObject implementeren. Ze zullen als de ehte liquibase.structure.core.Table-klasse zijn en de status van het object vastleggen. Ze worden in uw SnapshotGenerator.addsTo()-methode gemaakt zodat ze identificeerbaar zijn (naam, schema, enz.)
- Alle objecten die zijn toegevoegd door de addTo()-methode worden vervolgens door uw SnapshotGenerator.snapshotObject()-methode geleid, die alle aanvullende metadata zal ophalen die u oorspronkelijk niet hebt gekregen, zoals opgeslagen proceduretekst, enz.
- Zodra liquibase een momentopname heeft met uw objecten, vergelijkt het de momentopname met een andere (in het geval GenereerChangeLog een lege momentopname) om te bepalen welke objecten ontbreken, onverwacht zijn en zijn gewijzigd in de tweede momentopname. Vervolgens wordt gezocht naar implementaties van MissingObjectChangeGenerator, UnexpectedObjectChangeGenerator en ChangedObjectChangeGenerator. Voor GenereerChangeLog zullen er alleen "ontbrekende" objecten zijn, dus u zou MissingTriggerChangeGenerator, MissingPackagedChangeGenerator etc. implementeren. Hun taak is het creëren van wijzigingsinstanties om de ontbrekende objecten te creëren
- De klassen Msising*ChangeGenerator kunnen RawSqlChange-instanties retourneren of u kunt nieuwe implementaties van Change maken, zoals CreateTriggerChange.