class Baza::Idquery
This class takes a lot of IDs and runs a query against them.
Attributes
ids[R]
An array containing all the IDs that will be looked up.
Public Class Methods
new(args, &block)
click to toggle source
Constructor.
Examples¶ ↑
idq = Baza::Idquery(db: db, table: :users) idq.ids + [1, 5, 9] idq.each do |user| print "Name: #{user[:name]}\n" end
# File lib/baza/idquery.rb, line 13 def initialize(args, &block) @args = args @db = args.fetch(:db) @ids = [] @debug = @args[:debug] if @args[:query] @db.q(@args.fetch(:query)) do |data| @args[:col] = data.keys.first unless @args[:col] if data.is_a?(Array) @ids << data.first else @ids << data[@args[:col]] end end end @args[:col] = :id unless @args[:col] @args[:size] = 200 unless @args[:size] if block raise "No query was given but a block was." unless @args[:query] each(&block) end end
Public Instance Methods
each() { |data| ... }
click to toggle source
fetch()
click to toggle source
Fetches results.
Examples¶ ↑
data = idq.fetch #=> Hash
# File lib/baza/idquery.rb, line 43 def fetch return nil unless @args if @res data = @res.fetch if @res @res = nil unless data return data if data end @res = new_res unless @res unless @res destroy return nil end data = @res.fetch unless data destroy return nil end data end
Private Instance Methods
destroy()
click to toggle source
Removes all variables on the object. This is done when no more results are available.
# File lib/baza/idquery.rb, line 105 def destroy @args = nil @ids = nil @debug = nil end
new_res()
click to toggle source
Spawns a new database-result to read from.
# File lib/baza/idquery.rb, line 87 def new_res table_esc = @db.quote_table(@args.fetch(:table)) col_esc = @db.quote_column(@args.fetch(:col)) ids = @ids.shift(@args[:size]) if ids.empty? destroy return nil end ids_sql = ids.map { |id| @db.quote_value(id) }.join(",") query_str = "SELECT * FROM #{table_esc} WHERE #{table_esc}.#{col_esc} IN (#{ids_sql})" puts "Query: #{query_str}" if @debug @db.q(query_str) end