From 32b48bf419eb22514be9a75981b9b0cf51a973a0 Mon Sep 17 00:00:00 2001 From: Pratik Naik Date: Sat, 2 Jan 2010 22:43:40 +0530 Subject: Use arel predicates instead of strings wherever possible when merging relations --- activerecord/lib/active_record/relation.rb | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'activerecord') diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb index 44e2061efa..6eb1d907e6 100644 --- a/activerecord/lib/active_record/relation.rb +++ b/activerecord/lib/active_record/relation.rb @@ -18,19 +18,18 @@ module ActiveRecord def merge(r) raise ArgumentError, "Cannot merge a #{r.klass.name} relation with #{@klass.name} relation" if r.klass != @klass - merged_relation = spawn(table) + merged_relation = spawn(table).eager_load(r.eager_load_associations).preload(r.preload_associations) + merged_relation.readonly = r.readonly - [self, r].each do |r| + [self.relation, r.relation].each do |arel| merged_relation = merged_relation. - joins(r.relation.joins(r.relation)). - group(r.send(:group_clauses).join(', ')). - order(r.send(:order_clauses).join(', ')). - limit(r.taken). - offset(r.skipped). - select(r.send(:select_clauses).join(', ')). - eager_load(r.eager_load_associations). - preload(r.preload_associations). - from(r.send(:sources).present? ? r.send(:from_clauses) : nil) + joins(arel.joins(arel)). + group(arel.groupings). + order(arel.send(:order_clauses).join(', ')). + limit(arel.taken). + offset(arel.skipped). + select(arel.send(:select_clauses)). + from(arel.sources) end merged_wheres = @relation.wheres -- cgit v1.2.3