Class: Sequel::Postgres::Adapter
- Defined in:
- lib/sequel/adapters/postgres.rb
Overview
PGconn subclass for connection specific methods used with the pg or postgres-pr driver.
Defined Under Namespace
Classes: PGresult
Constant Summary collapse
- DISCONNECT_ERROR_CLASSES =
          The underlying exception classes to reraise as disconnect errors instead of regular database errors. 
- [IOError, Errno::EPIPE, Errno::ECONNRESET] 
- DISCONNECT_ERROR_RE =
          Since exception class based disconnect checking may not work, also trying parsing the exception message to look for disconnect errors. 
- /\A#{Regexp.union(disconnect_errors)}/
- CONNECTION_OK =
          Handle old postgres-pr sequel-postgres-pr already implements this API 
- -1 
Instance Attribute Summary collapse
- 
  
    
      #prepared_statements  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Hash of prepared statements for this connection. 
Instance Method Summary collapse
- #async_exec(sql) ⇒ Object
- #async_exec_params ⇒ Object
- #block(timeout = nil) ⇒ Object
- 
  
    
      #check_disconnect_errors  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Raise a Sequel::DatabaseDisconnectError if a one of the disconnect error classes is raised, or a PGError is raised and the connection status cannot be determined or it is not OK. 
- 
  
    
      #escape_bytea(str)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Escape bytea values. 
- 
  
    
      #escape_string(str)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Escape strings by doubling apostrophes. 
- 
  
    
      #execute(sql, args = nil)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Execute the given SQL with this connection. 
- #status ⇒ Object
Instance Attribute Details
#prepared_statements ⇒ Object (readonly)
Hash of prepared statements for this connection. Keys are string names of the server side prepared statement, and values are SQL strings.
| 85 86 87 | # File 'lib/sequel/adapters/postgres.rb', line 85 def prepared_statements @prepared_statements end | 
Instance Method Details
#async_exec(sql) ⇒ Object
| 111 112 113 | # File 'lib/sequel/adapters/postgres.rb', line 111 def async_exec(sql) PGresult.new(@conn.query(sql)) end | 
#async_exec_params ⇒ Object
| 89 | # File 'lib/sequel/adapters/postgres.rb', line 89 alias async_exec_params async_exec | 
#block(timeout = nil) ⇒ Object
| 115 116 | # File 'lib/sequel/adapters/postgres.rb', line 115 def block(timeout=nil) end | 
#check_disconnect_errors ⇒ Object
Raise a Sequel::DatabaseDisconnectError if a one of the disconnect error classes is raised, or a PGError is raised and the connection status cannot be determined or it is not OK.
| 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | # File 'lib/sequel/adapters/postgres.rb', line 135 def check_disconnect_errors yield rescue *DISCONNECT_ERROR_CLASSES => e disconnect = true raise(Sequel.convert_exception_class(e, Sequel::DatabaseDisconnectError)) rescue PGError => e disconnect = false begin s = status rescue PGError disconnect = true end status_ok = (s == Adapter::CONNECTION_OK) disconnect ||= !status_ok disconnect ||= e. =~ DISCONNECT_ERROR_RE disconnect ? raise(Sequel.convert_exception_class(e, Sequel::DatabaseDisconnectError)) : raise ensure block if status_ok && !disconnect end | 
#escape_bytea(str) ⇒ Object
Escape bytea values. Uses historical format instead of hex format for maximum compatibility.
| 99 100 101 | # File 'lib/sequel/adapters/postgres.rb', line 99 def escape_bytea(str) str.gsub(/[\000-\037\047\134\177-\377]/n){|b| "\\#{sprintf('%o', b.each_byte{|x| break x}).rjust(3, '0')}"} end | 
#escape_string(str) ⇒ Object
Escape strings by doubling apostrophes. This only works if standard conforming strings are used.
| 105 106 107 | # File 'lib/sequel/adapters/postgres.rb', line 105 def escape_string(str) str.gsub("'", "''") 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.
| 157 158 159 160 161 162 163 164 165 | # File 'lib/sequel/adapters/postgres.rb', line 157 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 defined?(yield) ? yield(q) : q.cmd_tuples ensure q.clear if q && q.respond_to?(:clear) end end | 
#status ⇒ Object
| 118 119 120 | # File 'lib/sequel/adapters/postgres.rb', line 118 def status CONNECTION_OK end |