Class: Sequel::Postgres::Adapter

Inherits:
PGconn
  • Object
show all
Includes:
AdapterMethods
Defined in:
lib/sequel/adapters/postgres.rb

Overview

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

Constant Summary

Constants included from AdapterMethods

Sequel::Postgres::AdapterMethods::SELECT_CURRVAL, Sequel::Postgres::AdapterMethods::SELECT_CUSTOM_SEQUENCE, Sequel::Postgres::AdapterMethods::SELECT_PK, Sequel::Postgres::AdapterMethods::SELECT_SERIAL_SEQUENCE

Instance Attribute Summary collapse

Attributes included from AdapterMethods

#db, #transaction_depth

Instance Method Summary collapse

Methods included from AdapterMethods

#last_insert_id, #primary_key, #sequence

Instance Attribute Details

#prepared_statementsObject (readonly)

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



140
141
142
# File 'lib/sequel/adapters/postgres.rb', line 140

def prepared_statements
  @prepared_statements
end

Instance Method Details

#apply_connection_settingsObject

Apply connection settings for this connection. Current sets the date style to ISO in order make Date object creation in ruby faster, if Postgres.use_iso_date_format is true.



145
146
147
148
149
150
151
152
# File 'lib/sequel/adapters/postgres.rb', line 145

def apply_connection_settings
  super
  if Postgres.use_iso_date_format
    sql = "SET DateStyle = 'ISO'"
    execute(sql)
  end
  @prepared_statements = {} if SEQUEL_POSTGRES_USES_PG
end

#check_disconnect_errorsObject

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



156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# File 'lib/sequel/adapters/postgres.rb', line 156

def check_disconnect_errors
  begin
    yield
  rescue PGError =>e
    begin
      s = status
    rescue PGError
      raise Sequel.convert_exception_class(e, Sequel::DatabaseDisconnectError)
    end
    status_ok = (s == Adapter::CONNECTION_OK)
    status_ok ? raise : raise(Sequel.convert_exception_class(e, Sequel::DatabaseDisconnectError))
  ensure
    block if status_ok
  end
end

#execute(sql, args = nil) ⇒ Object

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



174
175
176
177
178
179
180
181
# File 'lib/sequel/adapters/postgres.rb', line 174

def execute(sql, args=nil)
  q = check_disconnect_errors{@db.log_yield(sql, args){args ? async_exec(sql, args) : async_exec(sql)}}
  begin
    block_given? ? yield(q) : q.cmd_tuples
  ensure
    q.clear
  end
end