mirror of
https://github.com/django/django.git
synced 2025-11-25 21:22:14 +00:00
Refs #28643 -- Added NullIf database function.
Thanks Nick Pope, Mariusz Felisiak, and Tim Graham for reviews.
This commit is contained in:
parent
217f4456d8
commit
4b9d72210f
6 changed files with 78 additions and 3 deletions
40
tests/db_functions/comparison/test_nullif.py
Normal file
40
tests/db_functions/comparison/test_nullif.py
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
from unittest import skipUnless
|
||||
|
||||
from django.db import connection
|
||||
from django.db.models import Value
|
||||
from django.db.models.functions import NullIf
|
||||
from django.test import TestCase
|
||||
|
||||
from ..models import Author
|
||||
|
||||
|
||||
class NullIfTests(TestCase):
|
||||
|
||||
@classmethod
|
||||
def setUpTestData(cls):
|
||||
Author.objects.create(name='John Smith', alias='smithj')
|
||||
Author.objects.create(name='Rhonda', alias='Rhonda')
|
||||
|
||||
def test_basic(self):
|
||||
authors = Author.objects.annotate(nullif=NullIf('alias', 'name')).values_list('nullif')
|
||||
self.assertSequenceEqual(
|
||||
authors, [
|
||||
('smithj',),
|
||||
('' if connection.features.interprets_empty_strings_as_nulls else None,)
|
||||
]
|
||||
)
|
||||
|
||||
def test_null_argument(self):
|
||||
authors = Author.objects.annotate(nullif=NullIf('name', Value(None))).values_list('nullif')
|
||||
self.assertSequenceEqual(authors, [('John Smith',), ('Rhonda',)])
|
||||
|
||||
def test_too_few_args(self):
|
||||
msg = "'NullIf' takes exactly 2 arguments (1 given)"
|
||||
with self.assertRaisesMessage(TypeError, msg):
|
||||
NullIf('name')
|
||||
|
||||
@skipUnless(connection.vendor == 'oracle', 'Oracle specific test for NULL-literal')
|
||||
def test_null_literal(self):
|
||||
msg = 'Oracle does not allow Value(None) for expression1.'
|
||||
with self.assertRaisesMessage(ValueError, msg):
|
||||
list(Author.objects.annotate(nullif=NullIf(Value(None), 'name')).values_list('nullif'))
|
||||
Loading…
Add table
Add a link
Reference in a new issue