diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2011-09-07 15:26:26 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2011-09-07 15:26:47 -0700 |
commit | e1b500ec96987de595da1541a73a7d5fb9eece9c (patch) | |
tree | 1104d03e3e384e4a3f264cdcfa390e96a9159407 /activerecord/lib/active_record | |
parent | e6adeaa2fa043d961ab9f027d10ca63a7ccc3323 (diff) | |
download | rails-e1b500ec96987de595da1541a73a7d5fb9eece9c.tar.gz rails-e1b500ec96987de595da1541a73a7d5fb9eece9c.tar.bz2 rails-e1b500ec96987de595da1541a73a7d5fb9eece9c.zip |
LRU cache in mysql and sqlite are now per-process caches.
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/mysql_adapter.rb | 27 | ||||
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb | 24 |
2 files changed, 30 insertions, 21 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb index 73e3afe1d5..a1824fe396 100644 --- a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb @@ -94,27 +94,32 @@ module ActiveRecord class StatementPool < ConnectionAdapters::StatementPool def initialize(connection, max = 1000) super - @cache = {} + @cache = Hash.new { |h,pid| h[pid] = {} } end - def each(&block); @cache.each(&block); end - def key?(key); @cache.key?(key); end - def [](key); @cache[key]; end - def length; @cache.length; end - def delete(key); @cache.delete(key); end + def each(&block); cache.each(&block); end + def key?(key); cache.key?(key); end + def [](key); cache[key]; end + def length; cache.length; end + def delete(key); cache.delete(key); end def []=(sql, key) - while @max <= @cache.size - @cache.shift.last[:stmt].close + while @max <= cache.size + cache.shift.last[:stmt].close end - @cache[sql] = key + cache[sql] = key end def clear - @cache.values.each do |hash| + cache.values.each do |hash| hash[:stmt].close end - @cache.clear + cache.clear + end + + private + def cache + @cache[$$] end end diff --git a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb index 7c7e762c19..1932a849ee 100644 --- a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb @@ -52,29 +52,33 @@ module ActiveRecord class StatementPool < ConnectionAdapters::StatementPool def initialize(connection, max) super - @cache = {} + @cache = Hash.new { |h,pid| h[pid] = {} } end - def each(&block); @cache.each(&block); end - def key?(key); @cache.key?(key); end - def [](key); @cache[key]; end - def length; @cache.length; end + def each(&block); cache.each(&block); end + def key?(key); cache.key?(key); end + def [](key); cache[key]; end + def length; cache.length; end def []=(sql, key) - while @max <= @cache.size - dealloc(@cache.shift.last[:stmt]) + while @max <= cache.size + dealloc(cache.shift.last[:stmt]) end - @cache[sql] = key + cache[sql] = key end def clear - @cache.values.each do |hash| + cache.values.each do |hash| dealloc hash[:stmt] end - @cache.clear + cache.clear end private + def cache + @cache[$$] + end + def dealloc(stmt) stmt.close unless stmt.closed? end |