sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo extender Liquibase para generar registros de cambios con procedimientos almacenados, funciones y disparadores?

Tiene razón en que la estrategia general es crear una nueva clase que implemente SnapshotGenerator, pero también hay un par de pasos más que debe realizar. El proceso general de instantáneas es:

  1. Liquibase busca implementaciones de SnapshotGenerator y llama a addedTo() para cada objeto que encuentra en la base de datos. Para sus tipos, probablemente desee una rápida "instancia de esquema de objeto si se pasa" porque son tipos que forman parte de un esquema.
  2. Tendrá que crear nuevos objetos Package, StoredProcedure, etc. que implementen DatabaseObject. Serán como la clase liquibase.structure.core.Table y capturarán el estado del objeto. Se crean en su método SnapshotGenerator.addsTo() hasta el punto de ser identificables (nombre, esquema, etc. establecido)
  3. Todos los objetos que se agregan mediante el método addedTo() se ejecutan a través de su método SnapshotGenerator.snapshotObject() que extraerá cualquier metadato adicional que no obtuvo originalmente, como el texto del procedimiento almacenado, etc.
  4. Una vez que liquibase tiene una instantánea que contiene sus objetos, compara la instantánea con otra (en el caso de generateChangeLog, una instantánea vacía) para determinar qué objetos faltan, son inesperados y han cambiado en la segunda instantánea. Luego busca implementaciones de MissingObjectChangeGenerator, UnexpectedObjectChangeGenerator y ChangedObjectChangeGenerator. Para generarChangeLog solo habrá objetos "faltantes", por lo que implementaría MissingTriggerChangeGenerator, MissingPackagedChangeGenerator, etc. Su trabajo es crear instancias de cambio para crear los objetos faltantes
  5. Las clases Msising*ChangeGenerator podrían devolver instancias de RawSqlChange o podría crear nuevas implementaciones de Change como CreateTriggerChange.