module MysqlCasualExplain::PrettyPrinter

Constants

BOLD
CLEAR
RED

Public Instance Methods

pp(result, elapsed) click to toggle source
# File lib/mysql_casual_explain/pretty_printer.rb, line 9
def pp(result, elapsed)
  widths    = compute_column_widths(result)
  separator = build_separator(widths)

  pp = []

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

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

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

  "#{pp.join("\n")}\n"
end

Private Instance Methods

_colorize_items(columns, items, widths) click to toggle source
# File lib/mysql_casual_explain/pretty_printer.rb, line 36
def _colorize_items(columns, items, widths)
  columns = columns.map(&:downcase).map(&:to_sym)
  item_by_column = columns.zip(items).to_h
  warnings_by_column = MysqlCasualExplain.warnings_by_column

  new_items = []
  new_widths = []
  extra_len = "#{BOLD}#{RED}#{CLEAR}".length

  item_by_column.each_with_index do |(column, item), i|
    item = 'NULL' if item.nil?
    warnings = warnings_by_column.fetch(column, [])

    if warnings.any? { |w| w.call(item) }
      new_items << "#{BOLD}#{RED}#{item}#{CLEAR}"
      new_widths << widths[i] + extra_len
    else
      new_items << item
      new_widths << widths[i]
    end
  end

  [new_items, new_widths]
end
build_cells(columns, items, widths) click to toggle source
Calls superclass method
# File lib/mysql_casual_explain/pretty_printer.rb, line 31
def build_cells(columns, items, widths)
  items, widths = _colorize_items(columns, items, widths) if items.first != 'id'
  super(items, widths)
end