class PgExecArrayParams::Query

Attributes

args[R]
query[R]

Public Class Methods

new(query, args = []) click to toggle source
# File lib/pg_exec_array_params/query.rb, line 9
def initialize(query, args = [])
  @query = query
  @args = args
end

Public Instance Methods

binds() click to toggle source
# File lib/pg_exec_array_params/query.rb, line 22
def binds
  should_rebuild? ? (@binds ||= args.flatten(1)) : args
end
columns() click to toggle source
# File lib/pg_exec_array_params/query.rb, line 26
def columns
  @columns || (rebuild_query! && @columns)
end
exec_params(conn, *args) click to toggle source
# File lib/pg_exec_array_params/query.rb, line 14
def exec_params(conn, *args)
  conn.exec_params(sql, binds, *args)
end
sql() click to toggle source
# File lib/pg_exec_array_params/query.rb, line 18
def sql
  should_rebuild? ? (@sql || (rebuild_query! && @sql)) : query
end

Private Instance Methods

rebuild_query!() click to toggle source
# File lib/pg_exec_array_params/query.rb, line 44
def rebuild_query!
  @columns ||= []
  tree.send :treewalker!, tree.tree do |_expr, key, value, _location|
    case key
    when 'targetList'
      @columns += value.map do |node|
        Column.from_res_target(node['ResTarget'])
      end.compact
    when 'ResTarget'
      Rewriters::ResTarget.new(value, ref_idx).process
    when 'A_Expr'
      Rewriters::AExpr.new(value, ref_idx).process
    end
  end
  @sql = tree.deparse
  true
rescue Error => e
  e.query = query
  raise e
end
ref_idx() click to toggle source
# File lib/pg_exec_array_params/query.rb, line 65
def ref_idx
  @ref_idx ||= SqlRefIndex.new(args)
end
should_rebuild?() click to toggle source
# File lib/pg_exec_array_params/query.rb, line 32
def should_rebuild?
  args.any? do |param|
    param.is_a?(Array) && (param.none? do |item|
      item.respond_to?(:each) && raise(Error, "Param includes not primitive: #{item.inspect}")
    end)
  end
end
tree() click to toggle source
# File lib/pg_exec_array_params/query.rb, line 40
def tree
  @tree ||= PgQuery.parse(query)
end