Class: ActiveRecord::ConnectionAdapters::MySQL::ExplainPrettyPrinter

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

Overview

:nodoc:

Instance Method Summary collapse

Instance Method Details

#pp(result, elapsed) ⇒ Object

Pretty prints the result of an 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 :).


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

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