class PGWrapper

wraps the postgres driver in a single thread

Public Class Methods

new(uri) click to toggle source
# File lib/rbot/journal/postgres.rb, line 12
def initialize(uri)
  @uri = uri
  @queue = Queue.new
  run_thread
end

Public Instance Methods

destroy() click to toggle source
# File lib/rbot/journal/postgres.rb, line 47
def destroy
  @queue << nil
end
escape_string(string) click to toggle source
# File lib/rbot/journal/postgres.rb, line 59
def escape_string(string)
  @conn.escape_string(string)
end
exec(query) click to toggle source
# File lib/rbot/journal/postgres.rb, line 51
def exec(query)
  run_in_thread(:exec, query)
end
exec_params(query, params) click to toggle source
# File lib/rbot/journal/postgres.rb, line 55
def exec_params(query, params)
  run_in_thread(:exec_params, query, params)
end
run_in_thread(*args) click to toggle source
# File lib/rbot/journal/postgres.rb, line 34
def run_in_thread(*args)
  rq = Queue.new
  @queue << [rq, *args]
  type, result = rq.pop
  if type == :exception
    raise result
  else
    result
  end
end
run_thread() click to toggle source
# File lib/rbot/journal/postgres.rb, line 18
def run_thread
  Thread.new do
    @conn = PG.connect(@uri)
    while message = @queue.pop
      return_queue = message.shift
      begin
        result = @conn.send(*message)
        return_queue << [:result, result]
      rescue Exception => e
        return_queue << [:exception, e]
      end
    end
    @conn.finish
  end
end