aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2017-07-19 18:10:04 +0900
committerRyuta Kamizono <kamipo@gmail.com>2017-07-22 08:40:16 +0900
commita265d4b29cf9c1be84603ec53a6f8b17b53321a9 (patch)
tree1a6201eaaedb9c03d3c6b388229731268f089998 /activerecord/test
parentaf08044d6a6aa87d3b389f63c78564be2f60b1ab (diff)
downloadrails-a265d4b29cf9c1be84603ec53a6f8b17b53321a9.tar.gz
rails-a265d4b29cf9c1be84603ec53a6f8b17b53321a9.tar.bz2
rails-a265d4b29cf9c1be84603ec53a6f8b17b53321a9.zip
Fix `COUNT(DISTINCT ...)` with `ORDER BY` and `LIMIT`
Since #26972, `ORDER BY` is kept if `LIMIT` is presented for performance. But in most SQL servers (e.g. PostgreSQL, SQL Server, etc), `ORDER BY` expressions must appear in select list for `SELECT DISTINCT`. We should not replace existing select list in that case.
Diffstat (limited to 'activerecord/test')
-rw-r--r--activerecord/test/cases/calculations_test.rb12
1 files changed, 12 insertions, 0 deletions
diff --git a/activerecord/test/cases/calculations_test.rb b/activerecord/test/cases/calculations_test.rb
index dd6815b149..0541b78f0f 100644
--- a/activerecord/test/cases/calculations_test.rb
+++ b/activerecord/test/cases/calculations_test.rb
@@ -236,6 +236,18 @@ class CalculationsTest < ActiveRecord::TestCase
end
end
+ def test_distinct_count_with_order_and_limit
+ assert_equal 4, Account.distinct.order(:firm_id).limit(4).count
+ end
+
+ def test_distinct_count_with_order_and_offset
+ assert_equal 4, Account.distinct.order(:firm_id).offset(2).count
+ end
+
+ def test_distinct_count_with_order_and_limit_and_offset
+ assert_equal 4, Account.distinct.order(:firm_id).limit(4).offset(2).count
+ end
+
def test_should_group_by_summed_field_having_condition
c = Account.group(:firm_id).having("sum(credit_limit) > 50").sum(:credit_limit)
assert_nil c[1]