diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2013-08-28 17:53:03 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2013-08-28 17:53:03 -0700 |
commit | 98c085357e87ee49aec27d270f18502f2a062bef (patch) | |
tree | f3d97110ea6a16de0e2dc996001cfd8871d1069e /activerecord/lib | |
parent | e7baa6624695d844e903193bcdda1b928bf61042 (diff) | |
download | rails-98c085357e87ee49aec27d270f18502f2a062bef.tar.gz rails-98c085357e87ee49aec27d270f18502f2a062bef.tar.bz2 rails-98c085357e87ee49aec27d270f18502f2a062bef.zip |
avoid extra empty array allocation
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/associations/preloader/association.rb | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/activerecord/lib/active_record/associations/preloader/association.rb b/activerecord/lib/active_record/associations/preloader/association.rb index 39a1d022a4..3059bae76f 100644 --- a/activerecord/lib/active_record/associations/preloader/association.rb +++ b/activerecord/lib/active_record/associations/preloader/association.rb @@ -75,24 +75,24 @@ module ActiveRecord owners_map = owners_by_key owner_keys = owners_map.keys.compact - if klass.nil? || owner_keys.empty? - records = [] - else + # Each record may have multiple owners, and vice-versa + records_by_owner = Hash[owners.map { |owner| [owner, []] }] + + if klass && owner_keys.any? # Some databases impose a limit on the number of ids in a list (in Oracle it's 1000) # Make several smaller queries if necessary or make one query if the adapter supports it sliced = owner_keys.each_slice(klass.connection.in_clause_length || owner_keys.size) records = sliced.flat_map { |slice| records_for(slice) } - end - # Each record may have multiple owners, and vice-versa - records_by_owner = Hash[owners.map { |owner| [owner, []] }] - records.each do |record| - owner_key = owner_id_for records, record + records.each do |record| + owner_key = owner_id_for records, record - owners_map[owner_key].each do |owner| - records_by_owner[owner] << record + owners_map[owner_key].each do |owner| + records_by_owner[owner] << record + end end end + records_by_owner end |