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 = ( |     sql_create_unique = ( | ||||||
|         "ALTER TABLE %(table)s ADD CONSTRAINT %(name)s " |         "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 |     sql_delete_unique = sql_delete_constraint | ||||||
|  |  | ||||||
|   | |||||||
| @@ -3474,7 +3474,7 @@ class SchemaTests(TransactionTestCase): | |||||||
|                 editor.add_constraint(Author, constraint) |                 editor.add_constraint(Author, constraint) | ||||||
|  |  | ||||||
|     @skipUnlessDBFeature("supports_nulls_distinct_unique_constraints") |     @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: |         with connection.schema_editor() as editor: | ||||||
|             editor.create_model(Author) |             editor.create_model(Author) | ||||||
|         nulls_distinct = UniqueConstraint( |         nulls_distinct = UniqueConstraint( | ||||||
| @@ -3497,6 +3497,29 @@ class SchemaTests(TransactionTestCase): | |||||||
|         self.assertNotIn(nulls_distinct.name, constraints) |         self.assertNotIn(nulls_distinct.name, constraints) | ||||||
|         self.assertNotIn(nulls_not_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") |     @skipIfDBFeature("supports_nulls_distinct_unique_constraints") | ||||||
|     def test_unique_constraint_nulls_distinct_unsupported(self): |     def test_unique_constraint_nulls_distinct_unsupported(self): | ||||||
|         # UniqueConstraint is ignored on databases that don't support |         # UniqueConstraint is ignored on databases that don't support | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user