class AwesomeExplain::Renderers::ActiveRecord
Attributes
query[R]
result[R]
sql_explain[R]
Public Class Methods
new(query, result = nil)
click to toggle source
# File lib/awesome_explain/renderers/active_record.rb, line 6 def initialize(query, result = nil) @query = query @result = result || explain_query end
Public Instance Methods
explain_query()
click to toggle source
# File lib/awesome_explain/renderers/active_record.rb, line 11 def explain_query explain = AwesomeExplain::Config.instance.connection.raw_connection.exec( "EXPLAIN (ANALYZE true, COSTS true, FORMAT json) #{query.to_sql}" ) explain = explain.map { |h| h.values.first }.join("\n") @sql_explain = SqlExplain.new(explain_output: explain) end
general_stats_section(t)
click to toggle source
# File lib/awesome_explain/renderers/active_record.rb, line 62 def general_stats_section(t) title = AwesomeExplain::Utils::Color.fg_color :yellow, 'General Stats' t << [{ value: title, alignment: :center, colspan: 2}] t << :separator t << ['Table', 'Count'] t << :separator t << ['Total Rows Planned', plan_stats.total_rows_planned] t << ['Total Rows', plan_stats.total_rows] t << ['Total Loops', plan_stats.total_loops] t << seq_scans_row t << ['Indexes Used', plan_stats.index_stats.size] end
index_stats()
click to toggle source
# File lib/awesome_explain/renderers/active_record.rb, line 42 def index_stats @index_stats ||= plan_stats.index_stats end
index_stats_section(t)
click to toggle source
# File lib/awesome_explain/renderers/active_record.rb, line 99 def index_stats_section(t) if index_stats.size.positive? title = AwesomeExplain::Utils::Color.fg_color :yellow, 'Index Stats' t << :separator t << [{ value: title, alignment: :center, colspan: 2}] t << :separator t << ['Index Name', 'Count'] t << :separator index_stats.each do |index, stats| t << [index, stats.dig(:count)] end end end
node_type_stats()
click to toggle source
# File lib/awesome_explain/renderers/active_record.rb, line 38 def node_type_stats @node_type_stats ||= plan_stats.node_type_stats end
node_types_section(t)
click to toggle source
# File lib/awesome_explain/renderers/active_record.rb, line 87 def node_types_section(t) title = AwesomeExplain::Utils::Color.fg_color :yellow, 'Node Type Stats' t << :separator t << [{ value: title, alignment: :center, colspan: 2}] t << :separator t << ['Node Type', 'Count'] t << :separator node_type_stats.each do |node_type, stats| t << [node_type, stats.dig(:count)] end end
plan_stats()
click to toggle source
# File lib/awesome_explain/renderers/active_record.rb, line 30 def plan_stats @plan_stats ||= @sql_explain.tree.plan_stats end
print()
click to toggle source
# File lib/awesome_explain/renderers/active_record.rb, line 20 def print table = Terminal::Table.new do |t| general_stats_section t table_stats_section t node_types_section t index_stats_section t end puts table end
seq_scans_row()
click to toggle source
# File lib/awesome_explain/renderers/active_record.rb, line 46 def seq_scans_row color = plan_stats.seq_scans.positive? ? :cyan : :green seq_scans_label = AwesomeExplain::Utils::Color.fg_color( color, 'Seq Scans' ) seq_scans_val = AwesomeExplain::Utils::Color.fg_color( color, plan_stats.seq_scans.to_s ) [seq_scans_label, seq_scans_val] end
table_stats()
click to toggle source
# File lib/awesome_explain/renderers/active_record.rb, line 34 def table_stats @table_stats ||= plan_stats.table_stats end
table_stats_section(t)
click to toggle source
# File lib/awesome_explain/renderers/active_record.rb, line 75 def table_stats_section(t) title = AwesomeExplain::Utils::Color.fg_color :yellow, 'Table Stats' t << :separator t << [{ value: title, alignment: :center, colspan: 2}] t << :separator t << ['Table', 'Count'] t << :separator table_stats.each do |table_name, stats| t << [table_name, stats.dig(:count)] end end