Module: ActiveRecord::Explain

Included in:
Base, Relation
Defined in:
activerecord/lib/active_record/explain.rb

Instance Method Summary collapse

Instance Method Details

#collecting_queries_for_explainObject

Executes the block with the collect flag enabled. Queries are collected asynchronously by the subscriber and returned.



9
10
11
12
13
14
15
# File 'activerecord/lib/active_record/explain.rb', line 9

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.



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'activerecord/lib/active_record/explain.rb', line 19

def exec_explain(queries) # :nodoc:
  str = queries.map do |sql, binds|
    msg = +"EXPLAIN for: #{sql}"
    unless binds.empty?
      msg << " "
      msg << binds.map { |attr| render_bind(attr) }.inspect
    end
    msg << "\n"
    msg << connection.explain(sql, binds)
  end.join("\n")

  # Overriding inspect to be more human readable, especially in the console.
  def str.inspect
    self
  end

  str
end