def initialize(spec)
@spec = spec
@reserved_connections = {}
@connection_mutex = FiberedMonitor.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 = {}
@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
@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