diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2014-04-10 17:00:12 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2014-04-10 17:00:12 -0700 |
commit | 496204009eb3265a71d27c8a5513ca0dd803ea45 (patch) | |
tree | fc642a9e7583507ee9871fc110bd98d1a3ea5dd3 /activerecord | |
parent | 47037b648d1b56470dba35798fc5e30f1143eb95 (diff) | |
download | rails-496204009eb3265a71d27c8a5513ca0dd803ea45.tar.gz rails-496204009eb3265a71d27c8a5513ca0dd803ea45.tar.bz2 rails-496204009eb3265a71d27c8a5513ca0dd803ea45.zip |
eagerly build the bind map
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/statement_cache.rb | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/activerecord/lib/active_record/statement_cache.rb b/activerecord/lib/active_record/statement_cache.rb index d2a0c6f618..c51145f62f 100644 --- a/activerecord/lib/active_record/statement_cache.rb +++ b/activerecord/lib/active_record/statement_cache.rb @@ -75,10 +75,11 @@ module ActiveRecord end def initialize(block = Proc.new) - @mutex = Mutex.new - @binds = nil + @mutex = Mutex.new + @binds = nil @query_builder = nil - @relation = block.call Params.new + @relation = block.call Params.new + @binds = BindMap.new @relation.bind_values end def execute(params) @@ -86,7 +87,7 @@ module ActiveRecord arel = rel.arel klass = rel.klass - bind_map = binds rel + bind_map = @binds bind_values = bind_map.bind params builder = query_builder klass.connection, arel @@ -97,10 +98,6 @@ module ActiveRecord alias :call :execute private - def binds(rel) - @binds || @mutex.synchronize { @binds ||= BindMap.new rel.bind_values } - end - def query_builder(connection, arel) @query_builder || @mutex.synchronize { @query_builder ||= connection.cacheable_query(arel) |