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