diff options
| author | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2024-03-26 22:58:47 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2024-03-26 22:59:23 +0100 |
| commit | 345e3cf57f1e9bf870482cebf36b169d79ae63d2 (patch) | |
| tree | 38b9652167e7c43f859729467121ba7c98bc722c /tests | |
| parent | 71368b6f00b44595115aac8e26811f42b5db77b7 (diff) | |
[5.0.x] Fixed #35329 -- Fixed migrations crash when adding partial unique constraints with nulls_distinct.
Bug in 595a2abb58e04caa4d55fb2589bb80fb2a8fdfa1.
Thanks Lucas Lemke Saunitti for the report.
Backport of b98271a6e42107233311d17f5d7bc74fbb47f22c from main
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/schema/tests.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/schema/tests.py b/tests/schema/tests.py index 465245e3e7..fff4982315 100644 --- a/tests/schema/tests.py +++ b/tests/schema/tests.py @@ -3596,6 +3596,38 @@ class SchemaTests(TransactionTestCase): constraints = self.get_constraints(Author._meta.db_table) self.assertNotIn(constraint.name, constraints) + @skipUnlessDBFeature( + "supports_nulls_distinct_unique_constraints", + "supports_partial_indexes", + ) + def test_unique_constraint_nulls_distinct_condition(self): + with connection.schema_editor() as editor: + editor.create_model(Author) + constraint = UniqueConstraint( + fields=["height", "weight"], + name="un_height_weight_start_A", + condition=Q(name__startswith="A"), + nulls_distinct=False, + ) + with connection.schema_editor() as editor: + editor.add_constraint(Author, constraint) + Author.objects.create(name="Adam", height=None, weight=None) + Author.objects.create(name="Avocado", height=1, weight=None) + Author.objects.create(name="Adrian", height=None, weight=1) + with self.assertRaises(IntegrityError): + Author.objects.create(name="Alex", height=None, weight=None) + Author.objects.create(name="Bob", height=None, weight=None) + with self.assertRaises(IntegrityError): + Author.objects.create(name="Alex", height=1, weight=None) + Author.objects.create(name="Bill", height=None, weight=None) + with self.assertRaises(IntegrityError): + Author.objects.create(name="Alex", height=None, weight=1) + Author.objects.create(name="Celine", 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 |
