class SQLiteServer2018

Attributes

nodes[RW]

Public Class Methods

new(nodes, debug: debug) click to toggle source
# File lib/sqlite_server2018_plus.rb, line 18
def initialize(nodes, debug: debug)
  
  @nodes, @debug = nodes, debug
  

  if (nodes & Socket.ip_address_list.map(&:ip_address)).any? then
    raise SQLiteServer2018PlusException, 
        'Cannot use host IP address in node list'
  end
  
  @failcount = 0
  @db = fetch_server(nodes.first)
  
end

Public Instance Methods

execute(dbfile, *args, &blk) click to toggle source
# File lib/sqlite_server2018_plus.rb, line 33
def execute(dbfile, *args, &blk)
  
  puts 'inside SQLiteServer2018::execute args: ' + args.inspect if @debug
  
  if block_given? then
    a = db_op { @db.execute(dbfile, *args)  }
    a.each(&blk)
  else
    db_op { @db.execute dbfile, *args, &blk }
  end

end
exists?(dbfile) click to toggle source
# File lib/sqlite_server2018_plus.rb, line 46
def exists?(dbfile)
  
  puts 'inside SQLiteServer2018::exists?' if @debug
  db_op { @db.exists? dbfile }
      
end
fields(*args) click to toggle source
# File lib/sqlite_server2018_plus.rb, line 53
def fields(*args)
  db_op { @db.fields *args }
end
load_db(dbfile) click to toggle source
# File lib/sqlite_server2018_plus.rb, line 57
def load_db(dbfile)    
      
  puts 'inside SQLiteServer2018::load' if @debug
  db_op { @db.load_db dbfile }
  
end
ping() click to toggle source
# File lib/sqlite_server2018_plus.rb, line 64
def ping()
  db_op { @db.ping }
end
query(*args, &blk) click to toggle source
# File lib/sqlite_server2018_plus.rb, line 68
def query(*args, &blk)
  
  puts 'inside SQLiteServer2018::query args: ' + args.inspect if @debug
  db_op { @db.query *args, &blk }
  
end
results_as_hash(*args) click to toggle source
# File lib/sqlite_server2018_plus.rb, line 75
def results_as_hash(*args)    
  db_op { @db.results_as_hash *args }
end
results_as_hash=(*args) click to toggle source
# File lib/sqlite_server2018_plus.rb, line 79
def results_as_hash=(*args)
  db_op { @db.results_as_hash = *args }
end
table_info(*args) click to toggle source
# File lib/sqlite_server2018_plus.rb, line 83
def table_info(*args)
  db_op { @db.table_info *args }
end
tables(dbfile) click to toggle source
# File lib/sqlite_server2018_plus.rb, line 87
def tables(dbfile)    
  db_op { @db.tables dbfile }        
end

Private Instance Methods

db_op() { || ... } click to toggle source
# File lib/sqlite_server2018_plus.rb, line 94
def db_op()

  begin      
    r = yield()
    @failcount = 0
    r
  rescue
    puts 'warning: ' + ($!).inspect
    
    if @debug then
      puts '@nodes: ' + @nodes.inspect 
      puts '@failcount: ' + @failcount.inspect
    end
    
    @nodes.rotate!
    @db = fetch_server(@nodes.first)
    @failcount += 1
    retry unless @failcount > @nodes.length
    raise 'SQLiteServer2018Plus nodes exhausted'
    exit
  end

end
fetch_server(host) click to toggle source
# File lib/sqlite_server2018_plus.rb, line 118
def fetch_server(host)
  port = '57000'
  DRbObject.new nil, "druby://#{host}:#{port}"    
end