diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2019-03-28 09:56:40 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2019-04-04 16:36:49 +0900 |
commit | 060e09dfb3637b03ef026c5e6b69432c08995c47 (patch) | |
tree | 24318e4f244c28480a936d8c76a282faf1b4ac24 /railties/test/application/assets_test.rb | |
parent | 39d42dbde2571a9a713007c1a8e9f202e004cdeb (diff) | |
download | rails-060e09dfb3637b03ef026c5e6b69432c08995c47.tar.gz rails-060e09dfb3637b03ef026c5e6b69432c08995c47.tar.bz2 rails-060e09dfb3637b03ef026c5e6b69432c08995c47.zip |
Fix `count(:all)` with eager loading and explicit select and order
This follows up ebc09ed9ad9a04338138739226a1a92c7a2707ee.
We've still experienced a regression for `size` (`count(:all)`) with
eager loading and explicit select and order when upgrading Rails to 5.1.
In that case, the eager loading enforces `distinct` to subselect but
still keep the custom select, it would cause the ORDER BY with DISTINCT
issue.
```
% ARCONN=postgresql bundle exec ruby -w -Itest test/cases/relations_test.rb -n test_size_with_eager_loading_and_custom_select_and_order
Using postgresql
Run options: -n test_size_with_eager_loading_and_custom_select_and_order --seed 8356
# Running:
E
Error:
RelationTest#test_size_with_eager_loading_and_custom_select_and_order:
ActiveRecord::StatementInvalid: PG::InvalidColumnReference: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
LINE 1: ..." ON "comments"."post_id" = "posts"."id" ORDER BY comments.i...
^
```
As another problem on `distinct` is enforced, the result of `count`
becomes fewer than expected if `select` is given explicitly.
e.g.
```ruby
Post.select(:type).count
# => 11
Post.select(:type).distinct.count
# => 3
```
As long as `distinct` is enforced, we need to care to keep the result of
`count`.
This fixes both the `count` with eager loading problems.
Diffstat (limited to 'railties/test/application/assets_test.rb')
0 files changed, 0 insertions, 0 deletions