PGconn subclass for connection specific methods used with the pg or postgres-pr driver.
Make postgres-pr look like pg
The underlying exception classes to reraise as disconnect errors instead of regular database errors.
Since exception class based disconnect checking may not work, also trying parsing the exception message to look for disconnect errors.
# File lib/sequel/adapters/postgres.rb, line 85 def async_exec(sql) PGresult.new(@conn.query(sql)) end
# File lib/sequel/adapters/postgres.rb, line 89 def block(timeout=nil) end
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.
# File lib/sequel/adapters/postgres.rb, line 108 def check_disconnect_errors begin 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.message =~ DISCONNECT_ERROR_RE disconnect ? raise(Sequel.convert_exception_class(e, Sequel::DatabaseDisconnectError)) : raise ensure block if status_ok && !disconnect end end
Escape bytea values. Uses historical format instead of hex format for maximum compatibility.
# File lib/sequel/adapters/postgres.rb, line 73 def escape_bytea(str) str.gsub(/[\000-\037\047\134\177-\377]/){|b| "\\#{sprintf('%o', b.each_byte{|x| break x}).rjust(3, '0')}"} end
Escape strings by doubling apostrophes. This only works if standard conforming strings are used.
# File lib/sequel/adapters/postgres.rb, line 79 def escape_string(str) str.gsub("'", "''") end
Execute the given SQL with this connection. If a block is given, yield the results, otherwise, return the number of changed rows.
# File lib/sequel/adapters/postgres.rb, line 132 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
# File lib/sequel/adapters/postgres.rb, line 92 def status CONNECTION_OK end
Return the PGResult containing the query results.
# File lib/sequel/adapters/postgres.rb, line 145 def execute_query(sql, args) @db.log_connection_yield(sql, self, args){args ? async_exec(sql, args) : async_exec(sql)} end