class Diary::Query::Where

Public Class Methods

new(*conditions) click to toggle source

convert conditions to AND'd list returns either string or (string, bind_params) 2-tuple

# File lib/diary-ruby/database/query.rb, line 198
def initialize(*conditions)
  @sql_result = if Hash === conditions[0]
                  attrs = conditions[0]

                  keys = attrs.keys
                  vals = keys.map {|k| attrs[k]}

                  and_string = keys.map do |k|
                    if attrs[k].is_a?(Array)
                      bind_hold = attrs[k].map {|_| '?'}.join(',')
                      "`#{k}` in (#{bind_hold})"
                    else
                      "`#{k}` = ?"
                    end
                  end.join(' AND ')

                  # (string, bind)
                  SQLBoundParams.new(and_string, vals.flatten)
                elsif conditions.size > 1 && String === conditions[0]
                  # assume (string, bind) given
                  SQLBoundParams.new(conditions[0], conditions[1..-1])
                elsif conditions.size == 1 && String === conditions[0]
                  SQLString.new(conditions[0])
                end
end