summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2022-11-05 12:41:56 -0400
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2022-11-07 11:36:05 +0100
commit041551d716b69ee7c81199eee86a2d10a72e15ab (patch)
tree2f76771cb42545f6ce2da513a35b8fb6fe679cfb
parent967f8750ab63f9ca74ce63ada580ccc5b10b3f3b (diff)
Fixed #31331 -- Switched MySQL to group by selected primary keys.
MySQL 5.7.15 supports group by functional dependences so there is no need to special case group by main table primary key anymore and special case the ONLY_FULL_GROUP_BY sql mode.
-rw-r--r--django/db/backends/mysql/features.py14
-rw-r--r--django/db/models/sql/compiler.py4
2 files changed, 4 insertions, 14 deletions
diff --git a/django/db/backends/mysql/features.py b/django/db/backends/mysql/features.py
index f2e4e1f1f4..471853b1a3 100644
--- a/django/db/backends/mysql/features.py
+++ b/django/db/backends/mysql/features.py
@@ -6,7 +6,7 @@ from django.utils.functional import cached_property
class DatabaseFeatures(BaseDatabaseFeatures):
empty_fetchmany_value = ()
- allows_group_by_pk = True
+ allows_group_by_selected_pks = True
related_fields_match_type = True
# MySQL doesn't support sliced subqueries with IN/ALL/ANY/SOME.
allow_sliced_subqueries_with_in = False
@@ -109,18 +109,6 @@ class DatabaseFeatures(BaseDatabaseFeatures):
"update.tests.AdvancedTests.test_update_ordered_by_m2m_annotation",
},
}
- if "ONLY_FULL_GROUP_BY" in self.connection.sql_mode:
- skips.update(
- {
- "GROUP BY optimization does not work properly when "
- "ONLY_FULL_GROUP_BY mode is enabled on MySQL, see #31331.": {
- "aggregation.tests.AggregateTestCase."
- "test_aggregation_subquery_annotation_multivalued",
- "annotations.tests.NonAggregateAnnotationTestCase."
- "test_annotation_aggregate_with_m2o",
- },
- }
- )
if self.connection.mysql_is_mariadb and (
10,
4,
diff --git a/django/db/models/sql/compiler.py b/django/db/models/sql/compiler.py
index f3b2b3da41..b6574eab2e 100644
--- a/django/db/models/sql/compiler.py
+++ b/django/db/models/sql/compiler.py
@@ -235,7 +235,9 @@ class SQLCompiler:
expressions = [
expr
for expr in expressions
- if expr in pks or getattr(expr, "alias", None) not in aliases
+ if expr in pks
+ or expr in having
+ or getattr(expr, "alias", None) not in aliases
]
return expressions