Class: ActiveRecord::ConnectionAdapters::Mysql2Adapter::ExplainPrettyPrinter

Inherits:
Object
  • Object
show all
Defined in:
activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb

Overview

:nodoc:

Instance Method Summary collapse

Instance Method Details

#pp(result, elapsed) ⇒ Object

Pretty prints the result of a EXPLAIN in a way that resembles the output of the MySQL shell:

+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
| id | select_type | table | type  | possible_keys | key     | key_len | ref   | rows | Extra       |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
|  1 | SIMPLE      | users | const | PRIMARY       | PRIMARY | 4       | const |    1 |             |
|  1 | SIMPLE      | posts | ALL   | NULL          | NULL    | NULL    | NULL  |    1 | Using where |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
2 rows in set (0.00 sec)

This is an exercise in Ruby hyperrealism :).


128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb', line 128

def pp(result, elapsed)
  widths    = compute_column_widths(result)
  separator = build_separator(widths)

  pp = []

  pp << separator
  pp << build_cells(result.columns, widths)
  pp << separator

  result.rows.each do |row|
    pp << build_cells(row, widths)
  end

  pp << separator
  pp << build_footer(result.rows.length, elapsed)

  pp.join("\n") + "\n"
end