module Sequel::JDBC::Postgres::DatabaseMethods
Constants
- DATABASE_ERROR_CLASSES
Public Class Methods
Add the primary_keys and primary_key_sequences instance variables, so we can get the correct return values for inserted rows.
# File lib/sequel/adapters/jdbc/postgresql.rb, line 40 def self.extended(db) super db.send(:initialize_postgres_adapter) end
Public Instance Methods
Remove any current entry for the oid in the oid_convertor_map.
# File lib/sequel/adapters/jdbc/postgresql.rb, line 46 def add_conversion_proc(oid, *) super Sequel.synchronize{@oid_convertor_map.delete(oid)} end
See Sequel::Postgres::Adapter#copy_into
# File lib/sequel/adapters/jdbc/postgresql.rb, line 52 def copy_into(table, opts=OPTS) data = opts[:data] data = Array(data) if data.is_a?(String) if block_given? && data raise Error, "Cannot provide both a :data option and a block to copy_into" elsif !block_given? && !data raise Error, "Must provide either a :data option or a block to copy_into" end synchronize(opts[:server]) do |conn| begin copy_manager = org.postgresql.copy.CopyManager.new(conn) copier = copy_manager.copy_in(copy_into_sql(table, opts)) if block_given? while buf = yield java_bytes = buf.to_java_bytes copier.writeToCopy(java_bytes, 0, java_bytes.length) end else data.each do |d| java_bytes = d.to_java_bytes copier.writeToCopy(java_bytes, 0, java_bytes.length) end end rescue Exception => e copier.cancelCopy if copier raise ensure unless e begin copier.endCopy rescue NativeException => e2 raise_error(e2) end end end end end
See Sequel::Postgres::Adapter#copy_table
# File lib/sequel/adapters/jdbc/postgresql.rb, line 93 def copy_table(table, opts=OPTS) synchronize(opts[:server]) do |conn| copy_manager = org.postgresql.copy.CopyManager.new(conn) copier = copy_manager.copy_out(copy_table_sql(table, opts)) begin if block_given? while buf = copier.readFromCopy yield(String.from_java_bytes(buf)) end nil else b = String.new while buf = copier.readFromCopy b << String.from_java_bytes(buf) end b end rescue => e raise_error(e, :disconnect=>true) ensure if buf && !e raise DatabaseDisconnectError, "disconnecting as a partial COPY may leave the connection in an unusable state" end end end end
# File lib/sequel/adapters/jdbc/postgresql.rb, line 120 def oid_convertor_proc(oid) if (conv = Sequel.synchronize{@oid_convertor_map[oid]}).nil? conv = if pr = conversion_procs[oid] lambda do |r, i| if v = r.getString(i) pr.call(v) end end else false end Sequel.synchronize{@oid_convertor_map[oid] = conv} end conv end
Private Instance Methods
For PostgreSQL-specific types, return the string that should be used as the PGObject value. Returns nil by default, loading pg_* extensions will override this to add support for specific types.
# File lib/sequel/adapters/jdbc/postgresql.rb, line 150 def bound_variable_arg(arg, conn) nil end
# File lib/sequel/adapters/jdbc/postgresql.rb, line 139 def database_error_classes DATABASE_ERROR_CLASSES end
# File lib/sequel/adapters/jdbc/postgresql.rb, line 143 def disconnect_error?(exception, opts) super || exception.message =~ /\A(This connection has been closed\.|FATAL: terminating connection due to administrator command|An I\/O error occurred while sending to the backend\.)\z/ end
If the given argument is a recognized PostgreSQL-specific type, create a PGObject instance with unknown type and the bound argument string value, and set that as the prepared statement argument.
# File lib/sequel/adapters/jdbc/postgresql.rb, line 157 def set_ps_arg(cps, arg, i) if v = bound_variable_arg(arg, nil) obj = org.postgresql.util.PGobject.new obj.setType("unknown") obj.setValue(v) cps.setObject(i, obj) else super end end
Use setNull for nil arguments as the default behavior of setString with nil doesn't appear to work correctly on PostgreSQL.
# File lib/sequel/adapters/jdbc/postgresql.rb, line 170 def set_ps_arg_nil(cps, i) cps.setNull(i, JavaSQL::Types::NULL) end
Execute the connection configuration SQL queries on the connection.
# File lib/sequel/adapters/jdbc/postgresql.rb, line 175 def setup_connection(conn) conn = super(conn) statement(conn) do |stmt| connection_configuration_sqls.each{|sql| log_connection_yield(sql, conn){stmt.execute(sql)}} end conn end
# File lib/sequel/adapters/jdbc/postgresql.rb, line 183 def setup_type_convertor_map super @oid_convertor_map = {} end