mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[1.7.x] Split ignores_nulls_in_unique_constraints feature.
Oracle and SQL Server don't have exactly the same limitations. It's
worth treating them differently.
Backport of cff59bed from master
			
			
This commit is contained in:
		| @@ -567,9 +567,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') | ||||
|   | ||||
| @@ -660,7 +660,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}) | ||||
|   | ||||
| @@ -661,7 +661,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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user