class ActiveRecord::ConnectionAdapters::ConnectionHandler

def retrieve_connection_pool(klass)

to optimise for.
take place, but that's ok since the nil case is not the common one that we wish
#fetch is significantly slower than #[]. So in the nil case, no caching will
However, benchmarking (https://gist.github.com/jonleighton/3552829) showed that
Ideally we would use #fetch here, as class_to_pool[klass] may sometimes be nil.

When a connection is established or removed, we invalidate the cache.
This makes retrieving the connection pool O(1) once the process is warm.
Retrieving the connection pool happens a lot so we cache it in @class_to_pool.
def retrieve_connection_pool(klass)
  class_to_pool[klass.name] ||= begin
    until pool = pool_for(klass)
      klass = klass.superclass
      break unless klass <= Base
    end
    class_to_pool[klass.name] = pool
  end
end