• R
    Fix GROUP BY queries to apply LIMIT/OFFSET after aggregations · 63e35a13
    Ryuta Kamizono 提交于
    If `eager_loading` is true, `apply_join_dependency` force applies
    LIMIT/OFFSET before JOINs by `limited_ids_for` to keep parent records
    count. But for aggregation queries, LIMIT/OFFSET should be applied after
    aggregations the same as SQL semantics.
    
    And also, we could not replace SELECT list by `limited_ids_for` when a
    query has a GROUP BY clause. It had never been worked since it will
    causes generating invalid SQL for MySQL, PostgreSQL, and probably most
    backends.
    
    ```
    % ARCONN=postgresql be ruby -w -Itest test/cases/calculations_test.rb -n test_group_by_with_limit
    Using postgresql
    Run options: -n test_group_by_with_limit --seed 20925
    
    # Running:
    
    E
    
    Error:
    CalculationsTest#test_group_by_with_limit:
    ActiveRecord::StatementInvalid: PG::GroupingError: ERROR:  column "posts.id" must appear in the GROUP BY clause or be used in an aggregate function
    LINE 1: SELECT  DISTINCT "posts"."id", "posts"."type" AS alias_0 FRO...                         ^
    : SELECT  DISTINCT "posts"."id", "posts"."type" AS alias_0 FROM "posts" LEFT OUTER JOIN "comments" ON "comments"."post_id" = "posts"."id" GROUP BY "posts"."type" ORDER BY "posts"."type" ASC LIMIT $1
    ```
    
    Fixes #8103.
    Closes #27249.
    63e35a13
calculations_test.rb 31.9 KB