diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2012-10-12 16:59:20 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2012-10-12 16:59:20 -0700 |
commit | db8dbe76db514734082af9e8d166c1b33ea2f39f (patch) | |
tree | 614680ea6947dd28be9f651d583c4fd9afa2cb78 /activerecord/lib/active_record/relation/merger.rb | |
parent | 3a6dfca7f5f5bd45cea2f6ac348178e72423e1d5 (diff) | |
download | rails-db8dbe76db514734082af9e8d166c1b33ea2f39f.tar.gz rails-db8dbe76db514734082af9e8d166c1b33ea2f39f.tar.bz2 rails-db8dbe76db514734082af9e8d166c1b33ea2f39f.zip |
performance improvements to joins!
Before:
Calculating -------------------------------------
ar 87 i/100ms
-------------------------------------------------
ar 823.4 (±11.8%) i/s - 4089 in 5.070234s
After:
Calculating -------------------------------------
ar 88 i/100ms
-------------------------------------------------
ar 894.1 (±3.9%) i/s - 4488 in 5.028161s
Same test as 3a6dfca7f5f5bd45cea2f6ac348178e72423e1d5
Diffstat (limited to 'activerecord/lib/active_record/relation/merger.rb')
-rw-r--r-- | activerecord/lib/active_record/relation/merger.rb | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/relation/merger.rb b/activerecord/lib/active_record/relation/merger.rb index 951eabe427..59226d316e 100644 --- a/activerecord/lib/active_record/relation/merger.rb +++ b/activerecord/lib/active_record/relation/merger.rb @@ -22,7 +22,17 @@ module ActiveRecord # the values. def other other = Relation.new(relation.klass, relation.table) - hash.each { |k, v| other.send("#{k}!", v) } + hash.each { |k, v| + if k == :joins + if Hash === v + other.joins!(v) + else + other.joins!(*v) + end + else + other.send("#{k}!", v) + end + } other end end @@ -50,7 +60,7 @@ module ActiveRecord def merge normal_values.each do |name| value = values[name] - relation.send("#{name}!", value) unless value.blank? + relation.send("#{name}!", *value) unless value.blank? end merge_multi_values |