aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/statement_cache.rb
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2014-04-10 17:06:08 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2014-04-10 17:06:08 -0700
commitf85e4bca14a3ccba14facee474f601f9ff42dd56 (patch)
tree989e5a73fd927660a181e29b734d3e6851f65ee7 /activerecord/lib/active_record/statement_cache.rb
parent496204009eb3265a71d27c8a5513ca0dd803ea45 (diff)
downloadrails-f85e4bca14a3ccba14facee474f601f9ff42dd56.tar.gz
rails-f85e4bca14a3ccba14facee474f601f9ff42dd56.tar.bz2
rails-f85e4bca14a3ccba14facee474f601f9ff42dd56.zip
eagerly build the cacheable query builder
Diffstat (limited to 'activerecord/lib/active_record/statement_cache.rb')
-rw-r--r--activerecord/lib/active_record/statement_cache.rb20
1 files changed, 7 insertions, 13 deletions
diff --git a/activerecord/lib/active_record/statement_cache.rb b/activerecord/lib/active_record/statement_cache.rb
index c51145f62f..df3c293eb1 100644
--- a/activerecord/lib/active_record/statement_cache.rb
+++ b/activerecord/lib/active_record/statement_cache.rb
@@ -75,22 +75,18 @@ module ActiveRecord
end
def initialize(block = Proc.new)
- @mutex = Mutex.new
- @binds = nil
- @query_builder = nil
- @relation = block.call Params.new
- @binds = BindMap.new @relation.bind_values
+ relation = block.call Params.new
+ @binds = BindMap.new relation.bind_values
+ @klass = relation.klass
+ @query_builder = query_builder @klass.connection, relation.arel
end
def execute(params)
- rel = @relation
-
- arel = rel.arel
- klass = rel.klass
+ klass = @klass
bind_map = @binds
bind_values = bind_map.bind params
- builder = query_builder klass.connection, arel
+ builder = @query_builder
sql = builder.sql_for bind_values, klass.connection
klass.find_by_sql sql, bind_values
@@ -99,9 +95,7 @@ module ActiveRecord
private
def query_builder(connection, arel)
- @query_builder || @mutex.synchronize {
- @query_builder ||= connection.cacheable_query(arel)
- }
+ connection.cacheable_query(arel)
end
end
end