new(spec)
public
Creates a new
ConnectionPool object. spec is a ConnectionSpecification object
which describes database connection
information (e.g. adapter, host name, username, password, etc), as well as
the maximum size for this ConnectionPool.
The default ConnectionPool maximum size is 5.
Show source
def initialize(spec)
@spec = spec
@reserved_connections = {}
@connection_mutex = Monitor.new
@queue = @connection_mutex.new_cond
@timeout = spec.config[:wait_timeout] || 5
@size = (spec.config[:pool] && spec.config[:pool].to_i) || 5
@connections = []
@checked_out = []
@automatic_reconnect = true
@tables = {}
@visitor = nil
@columns = Hash.new do |h, table_name|
h[table_name] = with_connection do |conn|
conn.columns(table_name, "#{table_name} Columns").tap do |columns|
columns.each do |column|
column.primary = column.name == primary_keys[table_name]
end
end
end
end
@columns_hash = Hash.new do |h, table_name|
h[table_name] = Hash[columns[table_name].map { |col|
[col.name, col]
}]
end
@column_defaults = Hash.new do |h, table_name|
h[table_name] = Hash[columns[table_name].map { |col|
[col.name, col.default]
}]
end
@primary_keys = Hash.new do |h, table_name|
h[table_name] = with_connection do |conn|
table_exists?(table_name) ? conn.primary_key(table_name) : 'id'
end
end
end