2010-01-22 8 views
5

He estado investigando una forma de obtener las sentencias de SQL creadas por un archivo de migración generado. Estos extienden Doctrine_Migration_Base. Básicamente, me gustaría guardar el SQL como scripts de cambio.Obtener el SQL de una migración de Doctrine

La ruta de ejecución me lleva a Doctrine_Export, que tiene métodos que crean la instrucción SQL y los ejecuta. No he encontrado manera de preguntar por ellos. Los métodos de exportación encontrados en Doctrine_Export solo operan en modelos Doctrine_Record y no en scripts de Migración.

Desde la línea de comandos './doctrine migrar la versión #' el camino va:

  • Doctrine_Cli :: run (CMD)
  • Doctrine_Task_Migrate :: setArguments (args)
  • Doctrine_Task_Migrate :: execute()
  • Doctrine_Migration :: migran (a)
  • Doctrine_Migration_Process :: Doctrine_Export :: varios crear, caída, alterar los métodos con SQL equi valents.

¿Alguien ha abordado esto antes? Realmente no me gustaría cambiar los archivos base de Doctrine. Cualquier ayuda es muy apreciada.

Respuesta

0

Teniendo en cuenta la sugerencia de Rob Farley, he modificado:

  • Doctrine_Core :: migrar
  • Doctrine_Task_Migrate :: ejecutar

Cuando el método de ejecución que se llama el argumento opcional 'DryRun' es comprobado. Si es verdadero , se crea una instancia 'Doctrine_Connection_Profiler'. El valor 'dryRun' se pasa luego al el método 'Doctrine_Core :: migrate'. El valor 'dryRun' de true permite que los cambios se retrotraigan cuando se termina de ejecutar las sentencias SQL. Cuando el método retorna, el generador de perfiles se analiza y las sentencias SQL no vacías que no contienen 'migration_version' se guardan y se muestran en el terminal.

0

¿Podría hacer un servidor de desarrollo, y hacer la migración sobre eso, almacenar un rastreo de SQL sobre la marcha? No es necesario que guarde los resultados, pero obtendría una lista de cada comando.

+0

Interesante. Investigaré eso y te responderé. Siento que podría tener que modificar los archivos Doctrine base de todos modos ya que falta su implementación de CLI. Hay una opción dryRun disponible que Doctrine_Task_Migrate ni siquiera se molesta en buscar. Básicamente, las 2 opciones que voy son: Agregue la opción dryRun, ejecute una migración con dryRun y ​​SQL Trace para capturar las declaraciones. O Junto con la opción dryRun, agregue otra opción para simplemente generar las declaraciones SQL , esto requeriría un archivo Doctrine_Migration_Process modificado, tal vez lo llame Doctrine_Migration_GetSQL. –

+0

Sonidos válidos. Ciertamente SQL Trace es una buena forma de obtener los comandos. –

Cuestiones relacionadas