aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation/calculations.rb
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2017-10-14 13:19:26 +0900
committerRyuta Kamizono <kamipo@gmail.com>2017-10-14 13:36:51 +0900
commit5668dc6b1863ef43be8f8ef0fb1d5db913085fb3 (patch)
tree0f46675c24941c36c97426ae6e71829b3f35406d /activerecord/lib/active_record/relation/calculations.rb
parent3d1ff79742c46930fa35352c42fb585c3408511b (diff)
downloadrails-5668dc6b1863ef43be8f8ef0fb1d5db913085fb3.tar.gz
rails-5668dc6b1863ef43be8f8ef0fb1d5db913085fb3.tar.bz2
rails-5668dc6b1863ef43be8f8ef0fb1d5db913085fb3.zip
Fix `COUNT(DISTINCT ...)` for `GROUP BY` with `ORDER BY` and `LIMIT`
This is the fix for the regression of #29848. In #29848, I've kept existing select list in the subquery for the count if ORDER BY is given. But it had accidentally affect to GROUP BY queries also. It should keep the previous behavior in that case. Fixes #30886.
Diffstat (limited to 'activerecord/lib/active_record/relation/calculations.rb')
-rw-r--r--activerecord/lib/active_record/relation/calculations.rb2
1 files changed, 1 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/relation/calculations.rb b/activerecord/lib/active_record/relation/calculations.rb
index 4ef0502893..116bddce85 100644
--- a/activerecord/lib/active_record/relation/calculations.rb
+++ b/activerecord/lib/active_record/relation/calculations.rb
@@ -216,7 +216,7 @@ module ActiveRecord
if operation == "count"
column_name ||= select_for_count
if column_name == :all
- if distinct && !(has_limit_or_offset? && order_values.any?)
+ if distinct && (group_values.any? || !(has_limit_or_offset? && order_values.any?))
column_name = primary_key
end
elsif column_name =~ /\s*DISTINCT[\s(]+/i