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