Commit cff59bed authored by Aymeric Augustin's avatar Aymeric Augustin
Browse files

Split ignores_nulls_in_unique_constraints feature.

Oracle and SQL Server don't have exactly the same limitations. It's
worth treating them differently.
parent c70a61eb
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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
+1 −0
Original line number Diff line number Diff line
@@ -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')
+1 −1
Original line number Diff line number Diff line
@@ -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})
+1 −1
Original line number Diff line number Diff line
@@ -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
Loading