Module: ActiveRecord::Explain
Instance Method Summary collapse
-
#collecting_queries_for_explain ⇒ Object
Executes the block with the collect flag enabled.
-
#exec_explain(queries) ⇒ Object
Makes the adapter execute EXPLAIN for the tuples of queries and bindings.
Instance Method Details
#collecting_queries_for_explain ⇒ Object
Executes the block with the collect flag enabled. Queries are collected asynchronously by the subscriber and returned.
8 9 10 11 12 13 14 |
# File 'lib/active_record/explain.rb', line 8 def collecting_queries_for_explain # :nodoc: ExplainRegistry.collect = true yield ExplainRegistry.queries ensure ExplainRegistry.reset end |
#exec_explain(queries) ⇒ Object
Makes the adapter execute EXPLAIN for the tuples of queries and bindings. Returns a formatted string ready to be logged.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/active_record/explain.rb', line 18 def exec_explain(queries) # :nodoc: str = queries.map do |sql, bind| [].tap do |msg| msg << "EXPLAIN for: #{sql}" unless bind.empty? bind_msg = bind.map {|col, val| [col.name, val]}.inspect msg.last << " #{bind_msg}" end msg << connection.explain(sql, bind) end.join("\n") end.join("\n") # Overriding inspect to be more human readable, especially in the console. def str.inspect self end str end |