Class: PGconn

Inherits:
Object
  • Object
show all
Defined in:
lib/em-postgresql-sequel/pgconn.rb

Instance Method Summary collapse

Instance Method Details

#async_exec(sql, args = nil) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/em-postgresql-sequel/pgconn.rb', line 4

def async_exec(sql, args=nil)
  send_query(sql, args)

  deferrable = ::EM::DefaultDeferrable.new
  ::EM.watch(self.socket, EM::Sequel::Postgres::Watcher, self, deferrable).notify_readable = true
  
  f = Fiber.current
  
  deferrable.callback do |res| 
    # puts "!!! callback: #{res}"
    
    # check for alive?, otherwise we probably resume a dead fiber, because someone has killed our session e.g. "select pg_terminate_backend('procpid');"
    f.resume(res) if f.alive?
  end
  
  deferrable.errback  do |err| 
    # puts "!!! errback: #{err}"

    # check for alive?, otherwise we probably resume a dead fiber, because someone has killed our session e.g. "select pg_terminate_backend('procpid');"
    f.resume(err) if f.alive?
  end
    
  Fiber.yield.tap do |result|
    raise result if result.is_a?(Exception)
  end
  
end