Skip to content

Commit 78aa6a8

Browse files
Remove unnecessary ORDER BY clause when counting for all columns
1 parent 13d5f87 commit 78aa6a8

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
@@ -673,7 +673,11 @@ def build_count_subquery(relation, column_name, distinct)
673673
subquery_alias = Arel.sql("subquery_for_count", retryable: true)
674674
select_value = operation_over_aggregate_column(column_alias, "count", false)
675675

676-
relation.build_subquery(subquery_alias, select_value)
676+
if column_name == :all
677+
relation.unscope(:order).build_subquery(subquery_alias, select_value)
678+
else
679+
relation.build_subquery(subquery_alias, select_value)
680+
end
677681
end
678682
end
679683
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)