diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2014-04-10 17:06:08 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2014-04-10 17:06:08 -0700 |
commit | f85e4bca14a3ccba14facee474f601f9ff42dd56 (patch) | |
tree | 989e5a73fd927660a181e29b734d3e6851f65ee7 /activerecord/lib | |
parent | 496204009eb3265a71d27c8a5513ca0dd803ea45 (diff) | |
download | rails-f85e4bca14a3ccba14facee474f601f9ff42dd56.tar.gz rails-f85e4bca14a3ccba14facee474f601f9ff42dd56.tar.bz2 rails-f85e4bca14a3ccba14facee474f601f9ff42dd56.zip |
eagerly build the cacheable query builder
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/statement_cache.rb | 20 |
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 |