Skip to content

Commit 99a6365

Browse files
authored
Merge pull request rails#53050 from gabriel-amaral/gabriel-amaral/no-order-by-in-count
Unscope `ORDER BY` predicate in `subquery_for_count`
2 parents 4f4e7a7 + 78aa6a8 commit 99a6365

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

activerecord/lib/active_record/relation/calculations.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -661,7 +661,11 @@ def build_count_subquery(relation, column_name, distinct)
661661
subquery_alias = Arel.sql("subquery_for_count", retryable: true)
662662
select_value = operation_over_aggregate_column(column_alias, "count", false)
663663

664-
relation.build_subquery(subquery_alias, select_value)
664+
if column_name == :all
665+
relation.unscope(:order).build_subquery(subquery_alias, select_value)
666+
else
667+
relation.build_subquery(subquery_alias, select_value)
668+
end
665669
end
666670
end
667671
end

activerecord/test/cases/calculations_test.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,12 @@ def test_no_limit_no_offset
309309
assert_no_match(/OFFSET/, queries.first)
310310
end
311311

312+
def test_no_order_by_when_counting_all
313+
queries = capture_sql { Account.order(id: :desc).limit(10).count }
314+
assert_equal 1, queries.length
315+
assert_no_match(/ORDER BY/, queries.first)
316+
end
317+
312318
def test_count_on_invalid_columns_raises
313319
error = assert_raises(ActiveRecord::StatementInvalid) do
314320
Account.select("credit_limit, firm_name").count

0 commit comments

Comments
 (0)