Class: KnjDB_mysql_unbuffered_result

Inherits:
Object
  • Object
show all
Defined in:
lib/knj/knjdb/drivers/mysql/knjdb_mysql.rb

Instance Method Summary collapse

Constructor Details

#initialize(conn, opts, result) ⇒ KnjDB_mysql_unbuffered_result

Returns a new instance of KnjDB_mysql_unbuffered_result.



374
375
376
377
378
379
380
381
382
383
384
385
# File 'lib/knj/knjdb/drivers/mysql/knjdb_mysql.rb', line 374

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

Instance Method Details

#eachObject



434
435
436
437
438
# File 'lib/knj/knjdb/drivers/mysql/knjdb_mysql.rb', line 434

def each
  while data = self.fetch
    yield(data)
  end
end

#fetchObject



395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
# File 'lib/knj/knjdb/drivers/mysql/knjdb_mysql.rb', line 395

def fetch
  if @enum
    begin
      ret = @enum.next
    rescue StopIteration
      @enum = nil
      @res = nil
    end
  end
  
  if !ret and !@res and !@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
    return ret
  else
    self.load_keys if !@keys
    
    ret_h = {}
    @keys.each_index do |key_no|
      ret_h[@keys[key_no]] = ret[key_no]
    end
    
    return ret_h
  end
end

#load_keysObject



387
388
389
390
391
392
393
# File 'lib/knj/knjdb/drivers/mysql/knjdb_mysql.rb', line 387

def load_keys
  @keys = []
  keys = @res.fetch_fields
  keys.each do |key|
    @keys << key.name.to_sym
  end
end