aboutsummaryrefslogtreecommitdiffstats
path: root/railties/test/code_statistics_calculator_test.rb
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2017-05-28 09:29:49 +0900
committerRyuta Kamizono <kamipo@gmail.com>2018-06-07 09:58:20 +0900
commit63e35a1323b6a9b7ad7c90217116cdc99a45da1d (patch)
treee9f69cb46ac84e98ec9b725122723e2a14811835 /railties/test/code_statistics_calculator_test.rb
parent5dc72378b783e924c5bf079ca660388ec4ac9224 (diff)
downloadrails-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