class Sequel::DataObjects::Database
DataObjects uses it's own internal connection pooling in addition to the pooling that Sequel uses. You should make sure that you don't set the connection pool size to more than 8 for a Sequel::DataObjects::Database object, or hack DataObjects (or Extlib) to use a pool size at least as large as the pool size being used by Sequel.
Constants
- DISCONNECT_ERROR_RE
- DatasetClass
Public Instance Methods
Setup a DataObjects::Connection to the database.
# File lib/sequel/adapters/do.rb, line 40 def connect(server) setup_connection(::DataObjects::Connection.new(uri(server_opts(server)))) end
# File lib/sequel/adapters/do.rb, line 44 def disconnect_connection(conn) conn.dispose end
Execute the given SQL. If a block is given, the DataObjects::Reader created is yielded to it. A block should not be provided unless a a SELECT statement is being used (or something else that returns rows). Otherwise, the return value is the insert id if opts is :insert, or the number of affected rows, otherwise.
# File lib/sequel/adapters/do.rb, line 53 def execute(sql, opts=OPTS) synchronize(opts[:server]) do |conn| begin command = conn.create_command(sql) res = log_connection_yield(sql, conn){block_given? ? command.execute_reader : command.execute_non_query} rescue ::DataObjects::Error => e raise_error(e) end if block_given? begin yield(res) ensure res.close if res end elsif opts[:type] == :insert res.insert_id else res.affected_rows end end end
Execute the SQL on the this database, returning the number of affected rows.
# File lib/sequel/adapters/do.rb, line 77 def execute_dui(sql, opts=OPTS) execute(sql, opts) end
Execute the SQL on this database, returning the primary key of the table being inserted to.
# File lib/sequel/adapters/do.rb, line 83 def execute_insert(sql, opts=OPTS) execute(sql, opts.merge(:type=>:insert)) end
Return the subadapter type for this database, i.e. sqlite3 for do:sqlite3::memory:.
# File lib/sequel/adapters/do.rb, line 89 def subadapter uri.split(":").first end
Return the DataObjects URI for the Sequel URI, removing the do: prefix.
# File lib/sequel/adapters/do.rb, line 95 def uri(opts=OPTS) opts = @opts.merge(opts) (opts[:uri] || opts[:url]).sub(/\Ado:/, '') end
Private Instance Methods
Call the DATABASE_SETUP proc directly after initialization, so the object always uses subadapter specific code. Also, raise an error immediately if the connection doesn't have a uri, since DataObjects requires one.
# File lib/sequel/adapters/do.rb, line 106 def adapter_initialize raise(Error, "No connection string specified") unless uri if prok = Sequel::Database.load_adapter(subadapter.to_sym, :map=>DATABASE_SETUP, :subdir=>'do') prok.call(self) end end
Method to call on a statement object to execute SQL that does not return any rows.
# File lib/sequel/adapters/do.rb, line 115 def connection_execute_method :execute_non_query end
dataobjects uses the DataObjects::Error class as the main error class.
# File lib/sequel/adapters/do.rb, line 120 def database_error_classes [::DataObjects::Error] end
Recognize DataObjects::ConnectionError instances as disconnect errors.
# File lib/sequel/adapters/do.rb, line 125 def disconnect_error?(e, opts) super || (e.is_a?(::DataObjects::Error) && (e.is_a?(::DataObjects::ConnectionError) || e.message =~ DISCONNECT_ERROR_RE)) end
Execute SQL on the connection by creating a command first
# File lib/sequel/adapters/do.rb, line 130 def log_connection_execute(conn, sql) log_connection_yield(sql, conn){conn.create_command(sql).execute_non_query} end
Allow extending the given connection when it is first created. By default, just returns the connection.
# File lib/sequel/adapters/do.rb, line 136 def setup_connection(conn) conn end