class ActiveRecord::ConnectionAdapters::SQLServer::Showplan::PrinterTable

Attributes

result[R]

Public Class Methods

new(result) click to toggle source
# File lib/active_record/connection_adapters/sqlserver/showplan/printer_table.rb, line 14
def initialize(result)
  @result = result
end

Public Instance Methods

pp() click to toggle source
# File lib/active_record/connection_adapters/sqlserver/showplan/printer_table.rb, line 18
def pp
  @widths = compute_column_widths
  @separator = build_separator
  pp = []
  pp << @separator
  pp << build_cells(result.columns)
  pp << @separator
  result.rows.each do |row|
    pp << build_cells(row)
  end
  pp << @separator
  pp.join("\n") + "\n"
end

Private Instance Methods

build_cells(items) click to toggle source
# File lib/active_record/connection_adapters/sqlserver/showplan/printer_table.rb, line 49
def build_cells(items)
  cells = []
  items.each_with_index do |item, i|
    cells << cast_item(item).ljust(@widths[i])
  end
  "| #{cells.join(' | ')} |"
end
build_separator() click to toggle source
# File lib/active_record/connection_adapters/sqlserver/showplan/printer_table.rb, line 45
def build_separator
  "+" + @widths.map { |w| "-" * (w + (cell_padding * 2)) }.join("+") + "+"
end
cast_item(item) click to toggle source
# File lib/active_record/connection_adapters/sqlserver/showplan/printer_table.rb, line 57
def cast_item(item)
  case item
  when NilClass then "NULL"
  when Float then item.to_s.to(9)
  else item.to_s.truncate(max_column_width)
  end
end
compute_column_widths() click to toggle source
# File lib/active_record/connection_adapters/sqlserver/showplan/printer_table.rb, line 34
def compute_column_widths
  [].tap do |computed_widths|
    result.columns.each_with_index do |column, i|
      cells_in_column = [column] + result.rows.map { |r| cast_item(r[i]) }
      computed_width = cells_in_column.map(&:length).max
      final_width = computed_width > max_column_width ? max_column_width : computed_width
      computed_widths << final_width
    end
  end
end