class QuerySet::Query

Constants

LEFT

Attributes

params[R]
sql[R]

Public Class Methods

new(str) click to toggle source
# File lib/query_set.rb, line 34
def initialize(str)
  @sql = ''
  @params = []

  compile(str)

  @sql.freeze
  @params.freeze
end

Public Instance Methods

execute(conn, args = {}) click to toggle source
# File lib/query_set.rb, line 44
def execute(conn, args = {})
  conn.exec_params(sql, args.values_at(*params))
end

Private Instance Methods

compile(str) click to toggle source
# File lib/query_set.rb, line 50
def compile(str)
  terms = str.split(regexp)

  while (term = terms.shift)
    case term
    when left
      param = terms.shift.to_sym

      # Capture the param for execute position.
      params << param

      # Append a 1-based placeholder for the param to the sql string.
      sql << "$#{params.index(param).succ}"
    else
      sql << term
    end
  end

  # Only remember the unique parameters.
  params.uniq!
end
left() click to toggle source
# File lib/query_set.rb, line 72
def left
  LEFT
end
regexp() click to toggle source
# File lib/query_set.rb, line 80
def regexp
  /(#{left})\s*(.*?)\s*#{right}/
end
right() click to toggle source
# File lib/query_set.rb, line 76
def right
  RIGHT
end