mirror of https://github.com/django/django.git
Split ignores_nulls_in_unique_constraints feature.
Oracle and SQL Server don't have exactly the same limitations. It's worth treating them differently.
This commit is contained in:
parent
c70a61eb49
commit
cff59bedc2
|
@ -473,9 +473,14 @@ class BaseDatabaseFeatures(object):
|
|||
# Does the backend distinguish between '' and None?
|
||||
interprets_empty_strings_as_nulls = False
|
||||
|
||||
# Does the backend allow inserting duplicate NULL rows in a nullable
|
||||
# unique field? All core backends implement this correctly, but other
|
||||
# databases such as SQL Server do not.
|
||||
supports_nullable_unique_constraints = True
|
||||
|
||||
# Does the backend allow inserting duplicate rows when a unique_together
|
||||
# constraint exists, but one of the unique_together columns is NULL?
|
||||
ignores_nulls_in_unique_constraints = True
|
||||
# constraint exists and some fields are nullable but not all of them?
|
||||
supports_partially_nullable_unique_constraints = True
|
||||
|
||||
can_use_chunked_reads = True
|
||||
can_return_id_from_insert = False
|
||||
|
|
|
@ -107,7 +107,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
|
|||
has_zoneinfo_database = pytz is not None
|
||||
supports_bitwise_or = False
|
||||
can_defer_constraint_checks = True
|
||||
ignores_nulls_in_unique_constraints = False
|
||||
supports_partially_nullable_unique_constraints = False
|
||||
has_bulk_insert = True
|
||||
supports_tablespaces = True
|
||||
supports_sequence_reset = False
|
||||
|
|
|
@ -8,6 +8,7 @@ from .models import Tag, Celebrity, Fan, Staff, StaffTag
|
|||
|
||||
|
||||
@skipUnlessDBFeature('can_distinct_on_fields')
|
||||
@skipUnlessDBFeature('supports_nullable_unique_constraints')
|
||||
class DistinctOnTests(TestCase):
|
||||
def setUp(self):
|
||||
t1 = Tag.objects.create(name='t1')
|
||||
|
|
|
@ -650,7 +650,7 @@ class UniqueTest(TestCase):
|
|||
form = TripleForm({'left': '1', 'middle': '3', 'right': '1'})
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
@skipUnlessDBFeature('ignores_nulls_in_unique_constraints')
|
||||
@skipUnlessDBFeature('supports_nullable_unique_constraints')
|
||||
def test_unique_null(self):
|
||||
title = 'I May Be Wrong But I Doubt It'
|
||||
form = BookForm({'title': title, 'author': self.writer.pk})
|
||||
|
|
|
@ -671,7 +671,7 @@ class ModelFormsetTest(TestCase):
|
|||
self.assertEqual(book1.title, 'Flowers of Evil')
|
||||
self.assertEqual(book1.notes, 'English translation of Les Fleurs du Mal')
|
||||
|
||||
@skipUnlessDBFeature('ignores_nulls_in_unique_constraints')
|
||||
@skipUnlessDBFeature('supports_partially_nullable_unique_constraints')
|
||||
def test_inline_formsets_with_nullable_unique_together(self):
|
||||
# Test inline formsets where the inline-edited object has a
|
||||
# unique_together constraint with a nullable member
|
||||
|
|
|
@ -229,7 +229,7 @@ class OneToOneRegressionTests(TestCase):
|
|||
|
||||
# Several instances of the origin are only possible if database allows
|
||||
# inserting multiple NULL rows for a unique constraint
|
||||
if connection.features.ignores_nulls_in_unique_constraints:
|
||||
if connection.features.supports_nullable_unique_constraints:
|
||||
UndergroundBar.objects.create()
|
||||
|
||||
# When there are several instances of the origin
|
||||
|
|
Loading…
Reference in New Issue