Masz rację, że ogólną strategią jest utworzenie nowej klasy, która implementuje SnapshotGenerator, ale musisz również wykonać kilka innych kroków. Ogólny proces tworzenia migawki to:
- Liquibase wyszukuje implementacje SnapshotGenerator i wywołuje addsTo() dla każdego obiektu, który znajdzie w bazie danych. W przypadku swoich typów prawdopodobnie potrzebujesz szybkiego "jeśli przekazane wystąpienie obiektu schematu", ponieważ są to typy, które są częścią schematu.
- Będziesz musiał utworzyć nowe obiekty Package, StoredProcedure itp., które implementują DatabaseObject. Będą one jak klasa ehte liquibase.structure.core.Table i przechwytują stan obiektu. Są one tworzone w Twojej metodzie SnapshotGenerator.addsTo() w taki sposób, aby były możliwe do zidentyfikowania (nazwa, schemat itp. zestaw)
- Wszystkie obiekty dodane przez metodę addsTo() są następnie uruchamiane przez metodę SnapshotGenerator.snapshotObject(), która pobiera wszelkie dodatkowe metadane, których nie otrzymałeś pierwotnie, takie jak tekst procedury składowanej itp.
- Gdy liquibase ma migawkę zawierającą Twoje obiekty, porównuje ją z inną (w przypadku generateChangeLog pustą migawkę), aby określić, których obiektów brakuje, które są nieoczekiwane i zmienione w drugim migawce. Następnie szuka implementacji MissingObjectChangeGenerator, UnexpectedObjectChangeGenerator i ChangedObjectChangeGenerator. W przypadku generateChangeLog będą tylko „brakujące” obiekty, więc możesz zaimplementować MissingTriggerChangeGenerator, MissingPackagedChangeGenerator itp. Ich zadaniem jest tworzenie instancji Change w celu utworzenia brakujących obiektów
- Klasy Msising*ChangeGenerator mogą zwracać instancje RawSqlChange lub możesz tworzyć nowe implementacje Change, takie jak CreateTriggerChange.