1
0
mirror of https://github.com/django/django.git synced 2024-12-22 17:16:24 +00:00

Fixed #34992 -- Fixed DatabaseFeatures.allows_group_by_selected_pks on MariaDB with ONLY_FULL_GROUP_BY sql mode.

Regression in 041551d716.
This commit is contained in:
Nathaniel Conroy 2023-11-26 18:36:56 -05:00 committed by Mariusz Felisiak
parent 0203771b62
commit 0257426fe1
3 changed files with 28 additions and 1 deletions

View File

@ -6,7 +6,6 @@ from django.utils.functional import cached_property
class DatabaseFeatures(BaseDatabaseFeatures): class DatabaseFeatures(BaseDatabaseFeatures):
empty_fetchmany_value = () empty_fetchmany_value = ()
allows_group_by_selected_pks = True
related_fields_match_type = True related_fields_match_type = True
# MySQL doesn't support sliced subqueries with IN/ALL/ANY/SOME. # MySQL doesn't support sliced subqueries with IN/ALL/ANY/SOME.
allow_sliced_subqueries_with_in = False allow_sliced_subqueries_with_in = False
@ -319,3 +318,9 @@ class DatabaseFeatures(BaseDatabaseFeatures):
def has_native_uuid_field(self): def has_native_uuid_field(self):
is_mariadb = self.connection.mysql_is_mariadb is_mariadb = self.connection.mysql_is_mariadb
return is_mariadb and self.connection.mysql_version >= (10, 7) return is_mariadb and self.connection.mysql_version >= (10, 7)
@cached_property
def allows_group_by_selected_pks(self):
if self.connection.mysql_is_mariadb:
return "ONLY_FULL_GROUP_BY" not in self.connection.sql_mode
return True

View File

@ -27,3 +27,7 @@ Bugfixes
* Fixed a regression in Django 4.2 where checkboxes in the admin would be * Fixed a regression in Django 4.2 where checkboxes in the admin would be
centered on narrower screen widths (:ticket:`34994`). centered on narrower screen widths (:ticket:`34994`).
* Fixed a regression in Django 4.2 that caused a crash of querysets with
aggregations on MariaDB when the ``ONLY_FULL_GROUP_BY`` SQL mode was enabled
(:ticket:`34992`).

View File

@ -28,3 +28,21 @@ class TestFeatures(TestCase):
_connection.sql_mode = {"NO_AUTO_VALUE_ON_ZERO"} _connection.sql_mode = {"NO_AUTO_VALUE_ON_ZERO"}
database_features = DatabaseFeatures(_connection) database_features = DatabaseFeatures(_connection)
self.assertIs(database_features.allows_auto_pk_0, True) self.assertIs(database_features.allows_auto_pk_0, True)
def test_allows_group_by_selected_pks(self):
with mock.MagicMock() as _connection:
_connection.mysql_is_mariadb = False
database_features = DatabaseFeatures(_connection)
self.assertIs(database_features.allows_group_by_selected_pks, True)
with mock.MagicMock() as _connection:
_connection.mysql_is_mariadb = False
_connection.sql_mode = {}
database_features = DatabaseFeatures(_connection)
self.assertIs(database_features.allows_group_by_selected_pks, True)
with mock.MagicMock() as _connection:
_connection.mysql_is_mariadb = True
_connection.sql_mode = {"ONLY_FULL_GROUP_BY"}
database_features = DatabaseFeatures(_connection)
self.assertIs(database_features.allows_group_by_selected_pks, False)