aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2011-09-07 15:06:42 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2011-09-07 15:26:47 -0700
commit834d429e849b590ee7a283909eda9affed065387 (patch)
tree6093bf93f9093aed253439b2d6fc099d6ee9867d /activerecord/lib/active_record/connection_adapters
parent8e79c5216038976f403be32de500fcb82e918512 (diff)
downloadrails-834d429e849b590ee7a283909eda9affed065387.tar.gz
rails-834d429e849b590ee7a283909eda9affed065387.tar.bz2
rails-834d429e849b590ee7a283909eda9affed065387.zip
LRU should cache per process in postgresql. fixes #1339
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters')
-rw-r--r--activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb24
1 files changed, 14 insertions, 10 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
index 272663a91d..5402918b1d 100644
--- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
@@ -251,34 +251,38 @@ module ActiveRecord
def initialize(connection, max)
super
@counter = 0
- @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 next_key
"a#{@counter + 1}"
end
def []=(sql, key)
- while @max <= @cache.size
- dealloc(@cache.shift.last)
+ while @max <= cache.size
+ dealloc(cache.shift.last)
end
@counter += 1
- @cache[sql] = key
+ cache[sql] = key
end
def clear
- @cache.each_value do |stmt_key|
+ cache.each_value do |stmt_key|
dealloc stmt_key
end
- @cache.clear
+ cache.clear
end
private
+ def cache
+ @cache[$$]
+ end
+
def dealloc(key)
@connection.query "DEALLOCATE #{key}"
end