2010-01-22 14 views
5

Ho cercato un modo per ottenere le istruzioni SQL create da un file di migrazione generato. Questi estendono Doctrine_Migration_Base. In sostanza vorrei salvare l'SQL come script di modifica.Ottenere l'SQL da una migrazione di Doctrine

Il percorso di esecuzione mi porta a Doctrine_Export che ha metodi che costruiscono l'istruzione SQL e li esegue. Non ho trovato modo di chiedere solo loro. I metodi di esportazione trovati in Doctrine_Export funzionano solo sui modelli Doctrine_Record e non sugli script di Migrazione.

Dalla riga di comando './doctrine migrare versione #' il percorso va:

  • Doctrine_Cli :: run (cmd)
  • Doctrine_Task_Migrate :: setArguments (args)
  • Doctrine_Task_Migrate :: eseguire()
  • Doctrine_Migration :: migrare (a)
  • Doctrine_Migration_Process :: Doctrine_Export :: vari creare, goccia, alterare metodi con SQL equi quivalenti.

Qualcuno ha affrontato questo prima? Non vorrei davvero cambiare i file base di Doctrine. Qualsiasi aiuto è molto apprezzato.

risposta

0

Tenendo conto suggerimento di Rob Farley, ho modificato:

  • Doctrine_Core :: migrare
  • Doctrine_Task_Migrate :: Execute

Quando il metodo di esecuzione viene chiamato l'argomento opzionale 'DryRun' è controllato. Se è vero , viene creata un'istanza di "Doctrine_Connection_Profiler". Il valore 'dryRun' viene quindi passato a il metodo 'Doctrine_Core :: migrate'. Il valore 'dryRun' di true consente alle modifiche di eseguire il rollback quando si eseguono le istruzioni SQL. Quando il metodo restituisce, il profiler viene analizzato e le istruzioni SQL non vuote che non contengono 'migration_version' vengono salvate e visualizzate sul terminale.

0

È possibile creare un server di sviluppo e eseguire la migrazione, archiviando una traccia SQL mentre si va? Non è necessario conservare i risultati, ma si otterrà un elenco di tutti i comandi.

+0

Interessante. Lo esaminerò e tornerò da te. Sento che potrei dover modificare i file di base di Doctrine comunque manchino le loro implementazioni CLI. C'è un'opzione dryRun disponibile che Doctrine_Task_Migrate non si preoccupa nemmeno di controllare. Fondamentalmente le 2 opzioni che sto cercando sono: Aggiungere l'opzione dryRun, eseguire una migrazione con dryRun e SQL Trace per acquisire le istruzioni. Oppure Insieme all'opzione dryRun, aggiungi un'altra opzione per emettere semplicemente le istruzioni SQL , questo richiederebbe un file Doctrine_Migration_Process modificato, forse lo chiamerò Doctrine_Migration_GetSQL. –

+0

Suoni validi. Certamente SQL Trace è un buon modo per ottenere i comandi. –