aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Leighton <j@jonathanleighton.com>2011-05-31 21:09:25 +0100
committerJon Leighton <j@jonathanleighton.com>2011-05-31 21:12:20 +0100
commitfbe012e92d7792e1307b6ccaab933ea78f635a0b (patch)
tree6cd5044d9f2e2aae82d1d26bc5c6ca60cd57f84f
parenta5806fa409ff286e86eb9fabcee25d083892606f (diff)
downloadrails-fbe012e92d7792e1307b6ccaab933ea78f635a0b.tar.gz
rails-fbe012e92d7792e1307b6ccaab933ea78f635a0b.tar.bz2
rails-fbe012e92d7792e1307b6ccaab933ea78f635a0b.zip
Ensure that calculations properly override the select value even if it's set in the default scope. Fixes #1395.
-rw-r--r--activerecord/lib/active_record/relation/calculations.rb4
-rw-r--r--activerecord/test/cases/relation_scoping_test.rb5
2 files changed, 7 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/relation/calculations.rb b/activerecord/lib/active_record/relation/calculations.rb
index a785f38e89..aabe5c269b 100644
--- a/activerecord/lib/active_record/relation/calculations.rb
+++ b/activerecord/lib/active_record/relation/calculations.rb
@@ -196,7 +196,7 @@ module ActiveRecord
def execute_simple_calculation(operation, column_name, distinct) #:nodoc:
# Postgresql doesn't like ORDER BY when there are no GROUP BY
- relation = reorder(nil)
+ relation = with_default_scope.reorder(nil)
if operation == "count" && (relation.limit_value || relation.offset_value)
# Shortcut when limit is zero.
@@ -245,7 +245,7 @@ module ActiveRecord
"#{field} AS #{aliaz}"
}
- relation = except(:group).group(group.join(','))
+ relation = with_default_scope.except(:group).group(group.join(','))
relation.select_values = select_values
calculated_data = @klass.connection.select_all(relation.to_sql)
diff --git a/activerecord/test/cases/relation_scoping_test.rb b/activerecord/test/cases/relation_scoping_test.rb
index 0997a81a8a..83bc472764 100644
--- a/activerecord/test/cases/relation_scoping_test.rb
+++ b/activerecord/test/cases/relation_scoping_test.rb
@@ -475,6 +475,11 @@ class DefaultScopingTest < ActiveRecord::TestCase
assert_equal DeveloperWithSelect.all.count, DeveloperWithSelect.count
end
+ def test_default_scope_select_ignored_by_grouped_aggregations
+ assert_equal Hash[Developer.all.group_by(&:salary).map { |s, d| [s, d.count] }],
+ DeveloperWithSelect.group(:salary).count
+ end
+
def test_default_scope_order_ignored_by_aggregations
assert_equal DeveloperOrderedBySalary.all.count, DeveloperOrderedBySalary.count
end