mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Prevent Oracle from changing field.null to True
Fixed #17957 -- when using Oracle and character fields, the fields were set null = True to ease the handling of empty strings. This caused problems when using multiple databases from different vendors, or when the character field happened to be also a primary key. The handling was changed so that NOT NULL is not emitted on Oracle even if field.null = False, and field.null is not touched otherwise. Thanks to bhuztez for the report, ramiro for triaging & comments, ikelly for the patch and alex for reviewing.
This commit is contained in:
@@ -1930,3 +1930,25 @@ class NullInExcludeTest(TestCase):
|
||||
self.assertQuerysetEqual(
|
||||
NullableName.objects.exclude(name__in=[None]),
|
||||
['i1'], attrgetter('name'))
|
||||
|
||||
class EmptyStringsAsNullTest(TestCase):
|
||||
"""
|
||||
Test that filtering on non-null character fields works as expected.
|
||||
The reason for these tests is that Oracle treats '' as NULL, and this
|
||||
can cause problems in query construction. Refs #17957.
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
self.nc = NamedCategory.objects.create(name='')
|
||||
|
||||
def test_direct_exclude(self):
|
||||
self.assertQuerysetEqual(
|
||||
NamedCategory.objects.exclude(name__in=['nonexisting']),
|
||||
[self.nc.pk], attrgetter('pk')
|
||||
)
|
||||
|
||||
def test_joined_exclude(self):
|
||||
self.assertQuerysetEqual(
|
||||
DumbCategory.objects.exclude(namedcategory__name__in=['nonexisting']),
|
||||
[self.nc.pk], attrgetter('pk')
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user