Give preference to the second relation's order when merging

This commit is contained in:
Pratik Naik 2010-01-03 18:47:34 +05:30
parent d531cbc809
commit 3eca0ab838
2 changed files with 10 additions and 4 deletions

@ -38,13 +38,16 @@ def merge(r)
merged_relation = merged_relation.
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
relation_order = r.send(:order_clause)
merged_order = relation_order.present? ? relation_order : order_clause
merged_relation = merged_relation.order(merged_order)
merged_wheres = @relation.wheres
r.wheres.each do |w|
@ -83,7 +86,7 @@ def to_a
:select => @relation.send(:select_clauses).join(', '),
:joins => @relation.joins(relation),
:group => @relation.send(:group_clauses).join(', '),
:order => @relation.send(:order_clauses).join(', '),
:order => order_clause,
:conditions => where_clause,
:limit => @relation.taken,
:offset => @relation.skipped,
@ -156,7 +159,7 @@ def reload
end
def reset
@first = @last = @create_scope = @to_sql = nil
@first = @last = @create_scope = @to_sql = @order_clause = nil
@records = []
self
end
@ -219,6 +222,10 @@ def where_clause(join_string = " AND ")
@relation.send(:where_clauses).join(join_string)
end
def order_clause
@order_clause ||= @relation.send(:order_clauses).join(', ')
end
def references_eager_loaded_tables?
joined_tables = (tables_in_string(@relation.joins(relation)) + [table.name, table.table_alias]).compact.uniq
(tables_in_string(to_sql) - joined_tables).any?

@ -539,5 +539,4 @@ def test_create_bang
assert ! hen.new_record?
assert_equal 'hen', hen.name
end
end