Anda benar bahwa strategi umumnya adalah membuat kelas baru yang mengimplementasikan SnapshotGenerator, tetapi ada beberapa langkah lain yang perlu Anda lakukan juga. Proses snapshot umumnya adalah:
- Liquibase mencari implementasi SnapshotGenerator dan memanggil addTo() untuk setiap objek yang ditemukannya di database. Untuk tipe Anda, Anda mungkin menginginkan "jika lulus objek instanceof Schema" cepat karena mereka adalah tipe yang merupakan bagian dari skema.
- Anda perlu membuat objek Package, StoredProcedure, dll baru yang mengimplementasikan DatabaseObject. Mereka akan seperti kelas liquibase.structure.core.Table dan menangkap status objek. Mereka dibuat dalam metode SnapshotGenerator.addsTo() Anda hingga dapat diidentifikasi (nama, skema, kumpulan dll)
- Semua objek yang ditambahkan oleh metode addTo() kemudian dijalankan melalui metode SnapshotGenerator.snapshotObject() Anda yang akan menarik metadata tambahan yang awalnya tidak Anda dapatkan, seperti teks prosedur tersimpan, dll.
- Setelah liquibase memiliki snapshot yang berisi objek Anda, liquibase akan membandingkan snapshot tersebut dengan snapshot lain (dalam kasus generateChangeLog, snapshot kosong) untuk menentukan objek apa yang hilang, tidak terduga, dan berubah di snapshot kedua. Kemudian mencari implementasi MissingObjectChangeGenerator, UnexpectedObjectChangeGenerator, dan ChangedObjectChangeGenerator. Untuk generateChangeLog hanya akan ada objek yang "hilang" sehingga Anda dapat mengimplementasikan MissingTriggerChangeGenerator, MissingPackagedChangeGenerator, dll. Tugas mereka adalah membuat instance Change untuk membuat objek yang hilang
- Kelas Msising*ChangeGenerator dapat mengembalikan instance RawSqlChange atau Anda dapat membuat implementasi Perubahan baru seperti CreateTriggerChange.