• R
    Fix `count(:all)` with eager loading and explicit select and order · 060e09df
    Ryuta Kamizono 提交于
    This follows up ebc09ed9.
    
    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.
    060e09df
calculations_test.rb 34.3 KB