module Sqlcomposer::Cli

Public Class Methods

compose_sql(raw_sql, params) click to toggle source
# File lib/sqlcomposer/cli.rb, line 36
def compose_sql(raw_sql, params)
  return raw_sql if params.nil? || params.empty?
  sql = raw_sql.dup
  sql.scan(/\?/).each_with_index do |place_holder, idx|
    sql.sub!(/\?/) do |_|
      quote_param(params[idx])
    end
  end
  sql
end
format_sql(sql, color) click to toggle source
# File lib/sqlcomposer/cli.rb, line 56
def format_sql(sql, color)
  Niceql::Prettifier.prettify_sql(sql + ';', color)
end
parse_params(raw_sql, line) click to toggle source
# File lib/sqlcomposer/cli.rb, line 28
def parse_params(raw_sql, line)
  return [] unless raw_sql
  raw_params = line.split(/=>\s+Parameters:/).last.chomp.strip
  raw_params.split(/,\s*/).map do |raw_param|
    raw_param.strip.scan(/([^()]+)\((\w+?)\)/).first
  end
end
parse_prepared_sql(line) click to toggle source
# File lib/sqlcomposer/cli.rb, line 24
def parse_prepared_sql(line)
  line.split(/=>\s+Preparing:/).last.chomp
end
quote_param(param) click to toggle source
# File lib/sqlcomposer/cli.rb, line 47
def quote_param(param)
  value, type = param
  if %w[Integer Byte BigDecimal].include?(type)
    value
  else
    "'#{value}'"
  end
end
start() click to toggle source
# File lib/sqlcomposer/cli.rb, line 6
def start
  prepared_sql = nil
  ARGF.each do |line|
    prepared_sql = parse_prepared_sql(line) if line =~ /=>\s+Preparing:/
    params = parse_params(prepared_sql, line) if line =~ /=>\s+Parameters:/
    if prepared_sql && params
      sql = compose_sql(prepared_sql, params)
      if $stdout.isatty
        puts format_sql(sql, true)
      else
        puts format_sql(sql, false)
      end
      puts "\n\n"
      prepared_sql = nil
    end
  end
end