mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	[4.2.x] Fixed #34992 -- Fixed DatabaseFeatures.allows_group_by_selected_pks on MariaDB with ONLY_FULL_GROUP_BY sql mode.
Regression in041551d716. Backport of0257426fe1from main.
This commit is contained in:
		
				
					committed by
					
						 Mariusz Felisiak
						Mariusz Felisiak
					
				
			
			
				
	
			
			
			
						parent
						
							bac9e94ace
						
					
				
				
					commit
					450d518d2f
				
			| @@ -6,7 +6,6 @@ from django.utils.functional import cached_property | ||||
|  | ||||
| class DatabaseFeatures(BaseDatabaseFeatures): | ||||
|     empty_fetchmany_value = () | ||||
|     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 | ||||
| @@ -348,3 +347,9 @@ class DatabaseFeatures(BaseDatabaseFeatures): | ||||
|         if self.connection.mysql_is_mariadb: | ||||
|             return self.connection.mysql_version >= (10, 5, 2) | ||||
|         return True | ||||
|  | ||||
|     @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 | ||||
|   | ||||
| @@ -27,3 +27,7 @@ Bugfixes | ||||
|  | ||||
| * Fixed a regression in Django 4.2 where checkboxes in the admin would be | ||||
|   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`). | ||||
|   | ||||
| @@ -42,3 +42,21 @@ class TestFeatures(TestCase): | ||||
|             _connection.sql_mode = {"NO_AUTO_VALUE_ON_ZERO"} | ||||
|             database_features = DatabaseFeatures(_connection) | ||||
|             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) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user