Class: Sequel::Postgres::Adapter
- Inherits:
-
Object
- Object
- Sequel::Postgres::Adapter
- Defined in:
- lib/midori-contrib/sequel/postgres.rb
Overview
Midori Extension of sequel postgres through meta programming
Instance Method Summary collapse
- #execute_query(sql, args) ⇒ Object
-
#execute_query_block ⇒ Array
Call a sql request asynchronously.
- #execute_query_nonblock(sql, args) ⇒ Object
Instance Method Details
#execute_query(sql, args) ⇒ Object
16 17 18 19 20 21 22 23 24 |
# File 'lib/midori-contrib/sequel/postgres.rb', line 16 def execute_query(sql, args) if Fiber.current == EventLoop.root_fiber # Block usage return execute_query_block(sql, args) else # Nonblock usage return execute_query_nonblock(sql, args) end end |
#execute_query_block ⇒ Array
Call a sql request asynchronously
14 |
# File 'lib/midori-contrib/sequel/postgres.rb', line 14 alias_method :execute_query_block, :execute_query |
#execute_query_nonblock(sql, args) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/midori-contrib/sequel/postgres.rb', line 26 def execute_query_nonblock(sql, args) @db.log_connection_yield(sql, self, args) do if POSTGRES_SOCKETS[self].nil? POSTGRES_SOCKETS[self] = IO::open(socket) end socket_object = POSTGRES_SOCKETS[self] await(Promise.new do |resolve| count = 0 EventLoop.register(socket_object, :rw) do begin if (count == 0) # Writable unless is_busy send_query(sql) count += 1 end else # Readable EventLoop.deregister(socket_object) resolve.call(get_result) end # For extra errors # :nocov: rescue => e resolve.call(PromiseException.new(e)) # :nocov: end end end) end end |