class Sequel::Postgres::Adapter

  1. lib/sequel/adapters/postgres.rb
Parent: Postgres

PGconn subclass for connection specific methods used with the pg, postgres, or postgres-pr driver.

Constants

DISCONNECT_ERROR_RE = /\Acould not receive data from server/  

Attributes

prepared_statements [R]

Hash of prepared statements for this connection. Keys are string names of the server side prepared statement, and values are SQL strings.

Public Instance methods

check_disconnect_errors ()

Raise a Sequel::DatabaseDisconnectError if a PGError is raised and the connection status cannot be determined or it is not OK.

[show source]
# File lib/sequel/adapters/postgres.rb, line 122
def check_disconnect_errors
  begin
    yield
  rescue PGError => e
    disconnect = false
    begin
      s = status
    rescue PGError
      disconnect = true
    end
    status_ok = (s == Adapter::CONNECTION_OK)
    disconnect ||= !status_ok
    disconnect ||= e.message =~ DISCONNECT_ERROR_RE
    disconnect ? raise(Sequel.convert_exception_class(e, Sequel::DatabaseDisconnectError)) : raise
  rescue IOError, Errno::EPIPE, Errno::ECONNRESET => e
    disconnect = true
    raise(Sequel.convert_exception_class(e, Sequel::DatabaseDisconnectError))
  ensure
    block if status_ok && !disconnect
  end
end
execute (sql, args=nil)

Execute the given SQL with this connection. If a block is given, yield the results, otherwise, return the number of changed rows.

[show source]
# File lib/sequel/adapters/postgres.rb, line 146
def execute(sql, args=nil)
  args = args.map{|v| @db.bound_variable_arg(v, self)} if args
  q = check_disconnect_errors{execute_query(sql, args)}
  begin
    block_given? ? yield(q) : q.cmd_tuples
  ensure
    q.clear if q && q.respond_to?(:clear)
  end
end