diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2017-05-28 09:29:49 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2018-06-07 09:58:20 +0900 |
commit | 63e35a1323b6a9b7ad7c90217116cdc99a45da1d (patch) | |
tree | e9f69cb46ac84e98ec9b725122723e2a14811835 /railties/test/code_statistics_calculator_test.rb | |
parent | 5dc72378b783e924c5bf079ca660388ec4ac9224 (diff) | |
download | rails-63e35a1323b6a9b7ad7c90217116cdc99a45da1d.tar.gz rails-63e35a1323b6a9b7ad7c90217116cdc99a45da1d.tar.bz2 rails-63e35a1323b6a9b7ad7c90217116cdc99a45da1d.zip |
Fix GROUP BY queries to apply LIMIT/OFFSET after aggregations
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.
Diffstat (limited to 'railties/test/code_statistics_calculator_test.rb')
0 files changed, 0 insertions, 0 deletions