aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorSimon Woker <github@simonwoker.de>2014-04-10 16:58:39 +0000
committerSimon Woker <github@simonwoker.de>2014-04-10 16:58:39 +0000
commitafd4d8205e6a3264c30a29e4a2de0f1e71ef0717 (patch)
tree930251fb12963067450fa672ed3990e253035694 /activerecord
parentd8d0fcb06aae164b57695749ee394eee6996ee4d (diff)
downloadrails-afd4d8205e6a3264c30a29e4a2de0f1e71ef0717.tar.gz
rails-afd4d8205e6a3264c30a29e4a2de0f1e71ef0717.tar.bz2
rails-afd4d8205e6a3264c30a29e4a2de0f1e71ef0717.zip
Fix error for aggregate methods with select, see issue #13648
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/CHANGELOG.md7
-rw-r--r--activerecord/lib/active_record/relation.rb5
-rw-r--r--activerecord/test/cases/relations_test.rb10
3 files changed, 19 insertions, 3 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md
index d39e808f5b..a23981a22b 100644
--- a/activerecord/CHANGELOG.md
+++ b/activerecord/CHANGELOG.md
@@ -264,4 +264,11 @@
*Yves Senn*
+* Fixed error for aggregate methods (empty?, any?, count) with select()
+ which created invalid SQL
+
+ Fixes #13648
+
+ *Simon Woker*
+
Please check [4-1-stable](https://github.com/rails/rails/blob/4-1-stable/activerecord/CHANGELOG.md) for previous changes.
diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb
index 4d37ac6e2b..7cdae176a1 100644
--- a/activerecord/lib/active_record/relation.rb
+++ b/activerecord/lib/active_record/relation.rb
@@ -238,7 +238,7 @@ module ActiveRecord
# Returns size of the records.
def size
- loaded? ? @records.length : count
+ loaded? ? @records.length : count(:all)
end
# Returns true if there are no records.
@@ -248,8 +248,7 @@ module ActiveRecord
if limit_value == 0
true
else
- # FIXME: This count is not compatible with #select('authors.*') or other select narrows
- c = count
+ c = count(:all)
c.respond_to?(:zero?) ? c.zero? : c.empty?
end
end
diff --git a/activerecord/test/cases/relations_test.rb b/activerecord/test/cases/relations_test.rb
index 2aa6d643a5..da932b7663 100644
--- a/activerecord/test/cases/relations_test.rb
+++ b/activerecord/test/cases/relations_test.rb
@@ -824,6 +824,16 @@ class RelationTest < ActiveRecord::TestCase
assert_raises(ActiveRecord::ActiveRecordError) { Author.limit(10).delete_all }
end
+ def test_select_with_aggregates
+ posts = Post.select(:title, :body)
+
+ assert_equal 11, posts.count(:all)
+ assert_equal 11, posts.size
+ assert posts.any?
+ assert posts.many?
+ assert ! posts.empty?
+ end
+
def test_select_takes_a_variable_list_of_args
david = developers(:david)