class Baza::Driver::Mysql::UnbufferedResult

This class controls the unbuffered result for the normal MySQL-driver.

Public Class Methods

new(conn, opts, result) click to toggle source

Constructor. This should not be called manually.

# File lib/baza/driver/mysql/unbuffered_result.rb, line 4
def initialize(conn, opts, result)
  @conn = conn
  @result = result

  if !opts.key?(:result) || opts[:result] == "hash"
    @as_hash = true
  elsif opts[:result] == "array"
    @as_hash = false
  else
    raise "Unknown type of result: '#{opts[:result]}'."
  end
end

Public Instance Methods

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

Loops over every single result yielding it.

# File lib/baza/driver/mysql/unbuffered_result.rb, line 52
def each
  loop do
    row = fetch

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

Returns a single result.

# File lib/baza/driver/mysql/unbuffered_result.rb, line 18
def fetch
  if @enum
    begin
      ret = @enum.next
    rescue StopIteration
      @enum = nil
      @res = nil
    end
  end

  if !ret && !@res && !@enum
    begin
      @res = @conn.use_result
      @enum = @res.to_enum
      ret = @enum.next
    rescue Mysql::Error
      # Reset it to run non-unbuffered again and then return false.
      @conn.query_with_result = true
      return false
    rescue StopIteration
      sleep 0.1
      retry
    end
  end

  if @as_hash
    load_keys unless @keys
    return Hash[*@keys.zip(ret).flatten]
  else
    return ret
  end
end

Private Instance Methods

load_keys() click to toggle source

Lods the keys for the object.

# File lib/baza/driver/mysql/unbuffered_result.rb, line 67
def load_keys
  @keys = []
  keys = @res.fetch_fields
  keys.each do |key|
    @keys << key.name.to_sym
  end
end