aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation/merger.rb
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2012-10-12 16:59:20 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2012-10-12 16:59:20 -0700
commitdb8dbe76db514734082af9e8d166c1b33ea2f39f (patch)
tree614680ea6947dd28be9f651d583c4fd9afa2cb78 /activerecord/lib/active_record/relation/merger.rb
parent3a6dfca7f5f5bd45cea2f6ac348178e72423e1d5 (diff)
downloadrails-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.rb14
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