Module: Sqlcomposer::Cli

Defined in:
lib/sqlcomposer/cli.rb

Class Method Summary collapse

Class Method Details

.compose_sql(raw_sql, params) ⇒ Object



36
37
38
39
40
41
42
43
44
45
# 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) ⇒ Object



56
57
58
# File 'lib/sqlcomposer/cli.rb', line 56

def format_sql(sql, color)
  Niceql::Prettifier.prettify_sql(sql + ';', color)
end

.parse_params(raw_sql, line) ⇒ Object



28
29
30
31
32
33
34
# 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(/(?<=\)), /).map do |raw_param|
    raw_param.strip.scan(/([^()]+)\((\w+?)\)/).first
  end
end

.parse_prepared_sql(line) ⇒ Object



24
25
26
# File 'lib/sqlcomposer/cli.rb', line 24

def parse_prepared_sql(line)
  line.split(/=>\s+Preparing:/).last.chomp
end

.quote_param(param) ⇒ Object



47
48
49
50
51
52
53
54
# 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

.startObject



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 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