class Baza::Driver::Sqlite3::Result

This class handels the result when running MRI (or others).

Public Class Methods

new(driver, statement) click to toggle source

Constructor. This should not be called manually.

# File lib/baza/driver/sqlite3/result.rb, line 4
def initialize(driver, statement)
  @statement = statement

  begin
    @statement.execute
    @type_translation = driver.db.opts[:type_translation]
    @types = statement.types if @type_translation == true
    @columns = statement.columns.map(&:to_sym)
    read_results
    @index = -1
  ensure
    @statement.close
  end
end

Public Instance Methods

each() { |data| ... } click to toggle source

Loops over every result yielding them.

# File lib/baza/driver/sqlite3/result.rb, line 34
def each
  loop do
    data = fetch

    if data
      yield data
    else
      break
    end
  end
end
fetch() click to toggle source

Returns a single result.

# File lib/baza/driver/sqlite3/result.rb, line 20
def fetch
  row = @results[@index += 1]
  return unless row

  if @types
    row.map!.with_index { |value, index| translate_type(value, @types[index]) } if @types
  elsif @type_translation == :string
    row.map!(&:to_s)
  end

  Hash[*@columns.zip(row).flatten]
end

Private Instance Methods

read_results() click to toggle source
# File lib/baza/driver/sqlite3/result.rb, line 48
def read_results
  @results = []

  loop do
    row = @statement.step
    break if @statement.done?
    @results << row
  end
end
translate_type(value, type) click to toggle source
# File lib/baza/driver/sqlite3/result.rb, line 58
def translate_type(value, type)
  return if value.to_s.empty?

  if type == "datetime"
    return nil if value == "NULL"
    return Time.parse(value)
  elsif type == "date"
    return nil if value == "NULL"
    return Date.parse(value)
  else
    value
  end
end