Class: Sequel::SingleThreadedPool
- Defined in:
- lib/sequel_core/connection_pool.rb
Overview
A SingleThreadedPool acts as a replacement for a ConnectionPool for use in single-threaded applications. ConnectionPool imposes a substantial performance penalty, so SingleThreadedPool is used to gain some speed.
Note that using a single threaded pool with some adapters can cause errors in certain cases, see Sequel.single_threaded=.
Instance Attribute Summary collapse
-
#connection_proc ⇒ Object
writeonly
The proc used to create a new database connection.
Instance Method Summary collapse
-
#conn(server = :default) ⇒ Object
The connection for the given server.
-
#disconnect(&block) ⇒ Object
Disconnects from the database.
-
#hold(server = :default) ⇒ Object
Yields the connection to the supplied block for the given server.
-
#initialize(opts = {}, &block) ⇒ SingleThreadedPool
constructor
Initializes the instance with the supplied block as the connection_proc.
Constructor Details
#initialize(opts = {}, &block) ⇒ SingleThreadedPool
Initializes the instance with the supplied block as the connection_proc.
The single threaded pool takes the following options:
-
:pool_convert_exceptions - Whether to convert non-StandardError based exceptions to RuntimeError exceptions (default true)
188 189 190 191 192 |
# File 'lib/sequel_core/connection_pool.rb', line 188 def initialize(opts={}, &block) @connection_proc = block @conns = {} @convert_exceptions = opts.include?(:pool_convert_exceptions) ? opts[:pool_convert_exceptions] : true end |
Instance Attribute Details
#connection_proc=(value) ⇒ Object (writeonly)
The proc used to create a new database connection
180 181 182 |
# File 'lib/sequel_core/connection_pool.rb', line 180 def connection_proc=(value) @connection_proc = value end |
Instance Method Details
#conn(server = :default) ⇒ Object
The connection for the given server.
195 196 197 |
# File 'lib/sequel_core/connection_pool.rb', line 195 def conn(server=:default) @conns[server] end |
#disconnect(&block) ⇒ Object
Disconnects from the database. Once a connection is requested using #hold, the connection is reestablished.
212 213 214 215 |
# File 'lib/sequel_core/connection_pool.rb', line 212 def disconnect(&block) @conns.values.each{|conn| yield(conn) if block_given?} @conns = {} end |
#hold(server = :default) ⇒ Object
Yields the connection to the supplied block for the given server. This method simulates the ConnectionPool#hold API.
201 202 203 204 205 206 207 208 |
# File 'lib/sequel_core/connection_pool.rb', line 201 def hold(server=:default) begin yield(@conns[server] ||= @connection_proc.call(server)) rescue Exception => e # if the error is not a StandardError it is converted into RuntimeError. raise(@convert_exceptions && !e.is_a?(StandardError) ? RuntimeError.new(e.) : e) end end |