# File lib/active_record/connection_adapters/em_mysql2_adapter.rb, line 44 def query(sql, opts={}) if EM.reactor_running? super(sql, opts.merge(:async => true)) deferable = ::EM::DefaultDeferrable.new ::EM.watch(self.socket, Watcher, self, deferable).notify_readable = true fiber = Fiber.current deferable.callback do |result| fiber.resume(result) end deferable.errback do |err| fiber.resume(err) end Fiber.yield else super(sql, opts) end end