module ActiveRecordExplainAnalyze::Relation

Constants

EXPLAIN_FORMATS

Public Instance Methods

exec_explain_with_options(queries, analyze:, format:) click to toggle source
# File lib/activerecord-explain-analyze/relation.rb, line 24
def exec_explain_with_options(queries, analyze:, format:)
  str = queries.map do |sql, binds|
    msg = "EXPLAIN for: #{sql}\n".dup
    msg << connection.explain_with_options(sql, binds, analyze, format)
  end.join("\n")

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

  str
end
explain(analyze: false, format: :text) click to toggle source
# File lib/activerecord-explain-analyze/relation.rb, line 10
def explain(analyze: false, format: :text)
  format = format.to_s.upcase
  unless EXPLAIN_FORMATS.include?(format)
    raise ArgumentError, "format must be one of: #{EXPLAIN_FORMATS.join(', ')}"
  end

  queries = collecting_queries_for_explain { exec_queries }
  if analyze || format != "TEXT"
    exec_explain_with_options(queries, analyze: analyze, format: format)
  else
    exec_explain(queries)
  end
end