Sha256: df64589658dfa45dd956bb458f2e35400b271d738896ccd2aa81989493a0aeaa

Contents?: true

Size: 1.46 KB

Versions: 19

Compression:

Stored size: 1.46 KB

Contents

# This class controls the unbuffered result for the normal MySQL-driver.
class Baza::Driver::Mysql::UnbufferedResult < Baza::ResultBase
  # Constructor. This should not be called manually.
  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

  # Returns a single result.
  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

  # Loops over every single result yielding it.
  def each
    loop do
      row = fetch

      if row
        yield row
      else
        break
      end
    end
  end

private

  # Lods the keys for the object.
  def load_keys
    @keys = []
    keys = @res.fetch_fields
    keys.each do |key|
      @keys << key.name.to_sym
    end
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
baza-0.0.39 lib/baza/driver/mysql/unbuffered_result.rb
baza-0.0.38 lib/baza/driver/mysql/unbuffered_result.rb
baza-0.0.37 lib/baza/driver/mysql/unbuffered_result.rb
baza-0.0.36 lib/baza/driver/mysql/unbuffered_result.rb
baza-0.0.35 lib/baza/driver/mysql/unbuffered_result.rb
baza-0.0.34 lib/baza/driver/mysql/unbuffered_result.rb
baza-0.0.33 lib/baza/driver/mysql/unbuffered_result.rb
baza-0.0.32 lib/baza/driver/mysql/unbuffered_result.rb
baza-0.0.31 lib/baza/driver/mysql/unbuffered_result.rb
baza-0.0.30 lib/baza/driver/mysql/unbuffered_result.rb
baza-0.0.29 lib/baza/driver/mysql/unbuffered_result.rb
baza-0.0.28 lib/baza/driver/mysql/unbuffered_result.rb
baza-0.0.27 lib/baza/driver/mysql/unbuffered_result.rb
baza-0.0.26 lib/baza/driver/mysql/unbuffered_result.rb
baza-0.0.25 lib/baza/driver/mysql/unbuffered_result.rb
baza-0.0.24 lib/baza/driver/mysql/unbuffered_result.rb
baza-0.0.23 lib/baza/driver/mysql/unbuffered_result.rb
baza-0.0.22 lib/baza/driver/mysql/unbuffered_result.rb
baza-0.0.21 lib/baza/driver/mysql/unbuffered_result.rb