class Baza::Driver::Pg::Result
Public Class Methods
new(driver, result, args = nil)
click to toggle source
# File lib/baza/driver/pg/result.rb, line 2 def initialize(driver, result, args = nil) @result = result @unbuffered = true if args && args[:unbuffered] @type_translation = driver.db.opts[:type_translation] types end
Public Instance Methods
each(&blk)
click to toggle source
# File lib/baza/driver/pg/result.rb, line 50 def each(&blk) to_enum.each(&blk) rescue StopIteration nil end
fetch()
click to toggle source
# File lib/baza/driver/pg/result.rb, line 44 def fetch to_enum.next rescue StopIteration nil end
to_a()
click to toggle source
# File lib/baza/driver/pg/result.rb, line 56 def to_a array = [] each do |result| array << result end array end
to_a_enum()
click to toggle source
# File lib/baza/driver/pg/result.rb, line 40 def to_a_enum ArrayEnumerator.new(to_enum) end
to_enum()
click to toggle source
# File lib/baza/driver/pg/result.rb, line 10 def to_enum @enum ||= Enumerator.new do |yielder| if @unbuffered @result.stream_each_row do |values| if @type_translation == :string values = translate_values_to_strings(values) elsif @type_translation values = translate_values_with_types(values) end result_sym = Hash[*keys.zip(values).flatten] yielder << result_sym end else @result.each do |result| values = result.values if @type_translation == :string values = translate_values_to_strings(values) elsif @type_translation values = translate_values_with_types(values) end result_sym = Hash[*keys.zip(values).flatten] yielder << result_sym end end end end
Private Instance Methods
keys()
click to toggle source
# File lib/baza/driver/pg/result.rb, line 67 def keys unless @keys @keys = [] @result.fields.each do |field| @keys << field.to_sym end end @keys end
translate_values_to_strings(values)
click to toggle source
# File lib/baza/driver/pg/result.rb, line 136 def translate_values_to_strings(values) values.map!(&:to_s) end
translate_values_with_types(values)
click to toggle source
# File lib/baza/driver/pg/result.rb, line 116 def translate_values_with_types(values) values.collect!.with_index do |value, count| type_sym = types[count] if type_sym == :int value.to_i elsif type_sym == :float value.to_f elsif type_sym == :time Time.parse(value) elsif type_sym == :date Date.parse(value) elsif type_sym == :string value else raise "Unknown type symbol: #{type_sym}" end end end
types()
click to toggle source
# File lib/baza/driver/pg/result.rb, line 78 def types unless @types @types = [] @result.fields.length.times do |count| type_num = @result.ftype(count) case type_num when 20, 23 @types << :int when 16, 19, 25, 26, 28, 1034, 1043 @types << :string when 701 @types << :float when 1114 @types << :time when 1082 @types << :date else if @debug data = nil @result.each do |data_i| data = data_i break end value = data.values[count] if data raise "Unknown type number: #{type_num} for this field: #{@result.fields[count]}: #{value}" else @types << :string end end end end @types end