mirror of https://github.com/django/django.git
Fixed #35002 -- Made UniqueConstraints with fields respect nulls_distinct.
Regression in 595a2abb58
.
This commit is contained in:
parent
dec8aa68f6
commit
54cb1a7e16
|
@ -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
|
||||
|
||||
|
|
|
@ -3468,7 +3468,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(
|
||||
|
@ -3491,6 +3491,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
|
||||
|
|
Loading…
Reference in New Issue