class Sequel::Postgres::Adapter

Midori Extension of sequel postgres through meta programming

Public Instance Methods

execute_query(sql, args) click to toggle source
# 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
Also aliased as: execute_query_block
execute_query_block(sql, args)

Call a sql request asynchronously @param [String] sql sql request @param [Array] args args to send @return [Array] sql query result

Alias for: execute_query
execute_query_nonblock(sql, args) click to toggle source
# 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