mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[5.0.x] Fixed #35002 -- Made UniqueConstraints with fields respect nulls_distinct.
Regression in595a2abb58. Backport of54cb1a7e16from main
This commit is contained in:
		
				
					committed by
					
						 Mariusz Felisiak
						Mariusz Felisiak
					
				
			
			
				
	
			
			
			
						parent
						
							6c502734a0
						
					
				
				
					commit
					cb013fc7d9
				
			| @@ -111,7 +111,7 @@ class BaseDatabaseSchemaEditor: | ||||
|  | ||||
|     sql_create_unique = ( | ||||
|         "ALTER TABLE %(table)s ADD CONSTRAINT %(name)s " | ||||
|         "UNIQUE (%(columns)s)%(deferrable)s" | ||||
|         "UNIQUE%(nulls_distinct)s (%(columns)s)%(deferrable)s" | ||||
|     ) | ||||
|     sql_delete_unique = sql_delete_constraint | ||||
|  | ||||
|   | ||||
| @@ -3474,7 +3474,7 @@ class SchemaTests(TransactionTestCase): | ||||
|                 editor.add_constraint(Author, constraint) | ||||
|  | ||||
|     @skipUnlessDBFeature("supports_nulls_distinct_unique_constraints") | ||||
|     def test_unique_constraint_nulls_distinct(self): | ||||
|     def test_unique_constraint_index_nulls_distinct(self): | ||||
|         with connection.schema_editor() as editor: | ||||
|             editor.create_model(Author) | ||||
|         nulls_distinct = UniqueConstraint( | ||||
| @@ -3497,6 +3497,29 @@ class SchemaTests(TransactionTestCase): | ||||
|         self.assertNotIn(nulls_distinct.name, constraints) | ||||
|         self.assertNotIn(nulls_not_distinct.name, constraints) | ||||
|  | ||||
|     @skipUnlessDBFeature("supports_nulls_distinct_unique_constraints") | ||||
|     def test_unique_constraint_nulls_distinct(self): | ||||
|         with connection.schema_editor() as editor: | ||||
|             editor.create_model(Author) | ||||
|         constraint = UniqueConstraint( | ||||
|             fields=["height", "weight"], name="constraint", nulls_distinct=False | ||||
|         ) | ||||
|         with connection.schema_editor() as editor: | ||||
|             editor.add_constraint(Author, constraint) | ||||
|         Author.objects.create(name="", height=None, weight=None) | ||||
|         Author.objects.create(name="", height=1, weight=None) | ||||
|         Author.objects.create(name="", height=None, weight=1) | ||||
|         with self.assertRaises(IntegrityError): | ||||
|             Author.objects.create(name="", height=None, weight=None) | ||||
|         with self.assertRaises(IntegrityError): | ||||
|             Author.objects.create(name="", height=1, weight=None) | ||||
|         with self.assertRaises(IntegrityError): | ||||
|             Author.objects.create(name="", height=None, weight=1) | ||||
|         with connection.schema_editor() as editor: | ||||
|             editor.remove_constraint(Author, constraint) | ||||
|         constraints = self.get_constraints(Author._meta.db_table) | ||||
|         self.assertNotIn(constraint.name, constraints) | ||||
|  | ||||
|     @skipIfDBFeature("supports_nulls_distinct_unique_constraints") | ||||
|     def test_unique_constraint_nulls_distinct_unsupported(self): | ||||
|         # UniqueConstraint is ignored on databases that don't support | ||||
|   | ||||
		Reference in New Issue
	
	Block a user