Ciao a tutti, piccola domanda forse banale: qualcuno sa se è possibile leggere l'SQL prodotto da ActiveRecord per la lettura dei dati sul db ? Mi spiego meglio, se io faccio una interrogazione inserendo le :conditions l'oggetto AR crea ed esegue lo statement sql select che si può vedere tramite log. Avrei la necessità di recuperare l'sql generato a livello di applicazione (es. appena dopo l'esecuzione del find), è possibile ? Grazie.
on 18.04.2008 16:34
on 18.04.2008 18:14
Gianluca Tessarolo wrote: > Mi spiego meglio, se io faccio una interrogazione inserendo le > :conditions l'oggetto AR crea ed esegue lo statement sql select che si > può vedere tramite log. > > Avrei la necessità di recuperare l'sql generato a livello di > applicazione (es. appena dopo l'esecuzione del find), è possibile ? Che differenza c'è tra i due casi? Che significa "a livello di applicazione"? Luca
on 18.04.2008 19:31
Ciao Luca quello che vorrei ottenere è riuscire ad estrarre l'SQL prodotto da una istruzione tipo: Person.find(:all, :include => :addresses, :conditions => ["first_name like ? and last_name like ?", first_name, last_name) perchè avrei necessità di memorizzare l'intero statement sql e mi tornerebbe comodo averlo direttamente dall'active record, se si può fare...
on 18.04.2008 22:29
Ciao Gianluca, Quindi ti serve a eseguire e memorizzare lo statement SQL a runtime? Beh, quello che mi viene in mente è una strada non proprio ottimale ma che potrebbe funzionare. In teoria basterebbe applicare il pattern observer al metodo find_by_sql per vedere cosa "passa di lì". Infatti, tutti i finder di ActiveRecord compongono una query che poi viene passata come parametro a find_by_sql, il problema sta nel capire qual è lo statement che ti interessa memorizzare. Una curiosità: come mai hai questa necessità? Luca
on 22.04.2008 11:45
Ciao Luca, ho risolto richiamando da dentro il model il metodo sanitize_sql(conditions) che a partire dalle conditions ([sql, parametri...]) applicate al finder mi genera lo statement finale sql where... La motivazione per fare cìò è dettata dall'esigenza di salvare dei filtri di selezione applicati a dei model in modo che in seguito possano essere riapplicati dall'utente.
on 22.04.2008 12:53
> ho risolto richiamando da dentro il model il metodo > sanitize_sql(conditions) che a partire dalle conditions ([sql, > parametri...]) applicate al finder mi genera lo statement finale sql > where... > > La motivazione per fare cìò è dettata dall'esigenza di salvare dei > filtri di selezione applicati a dei model in modo che in seguito possano > essere riapplicati dall'utente. Una volta, affrontando un problema simile, ho avuto l'idea di fare una cosa simile: def conditions=(q) self.query = Marshal.dump(q) end def conditions() return Marshal.load(self.query) end in un model, per poterli salvare nel database. -- David N. Welton http://www.welton.it/davidw/ http://www.dedasys.com/