2013-12-16 7 views
12

Dire che ho un'espressione Sequel come:C'è un modo per vedere l'SQL raw che verrà generata da un'espressione Sequel?

db.select(:id).from(:some_table).where(:foo => 5) 

C'è un modo per ottenere la stringa SQL che questo genererà (vale a dire "SELECT id FROM some_table WHERE foo = 5")? Noto che chiamare il numero inspect o to_s sul risultato dell'espressione precedente include l'SQL generato, ma non sono sicuro di come accedervi direttamente.

E per quanto riguarda le espressioni sequel che non restituiscono un set di dati, come:

db.from(:some_table).update(:foo => 5) 

E 'possibile vedere l'SQL da questo prima che venga eseguita?

risposta

20

È possibile chiamare sql sul set di dati:

db.select(:id).from(:some_table).where(:foo => 5).sql # => "SELECT `id` FROM `some_table` WHERE (`foo` = 5)" 

Per l'aggiornamento chiarimento si può fare questo:

db.from(:some_table).update_sql(:foo => 5) # => "UPDATE `some_table` SET `foo` = 5" 

Alcuni utili metodi simili:

insert_sql 
delete_sql 
truncate_sql 
+0

Qual è 'db' in questo caso e come accedete/lo istanziate? –

+0

Esiste comunque una relazione ActiveRecord? –

+0

È una connessione sequel come 'db = Sequel.connect ('sqlite: //blog.db')'. In 'ActiveRecord :: Relation', puoi semplicemente chiamare' to_sql' – mechanicalfish