diff options
| author | Mads Jensen <mje@inducks.org> | 2018-01-14 22:00:16 +0100 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2019-01-10 12:10:12 -0500 |
| commit | 4b9d72210f0201efeafb9703e166aa3b38c04873 (patch) | |
| tree | 05f193fcbd373c0c6bc22efbbb12b0aa894f8990 /django | |
| parent | 217f4456d823cdc07b4d8e2721165739e666e1e7 (diff) | |
Refs #28643 -- Added NullIf database function.
Thanks Nick Pope, Mariusz Felisiak, and Tim Graham for reviews.
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/models/functions/__init__.py | 4 | ||||
| -rw-r--r-- | django/db/models/functions/comparison.py | 13 |
2 files changed, 14 insertions, 3 deletions
diff --git a/django/db/models/functions/__init__.py b/django/db/models/functions/__init__.py index f005546eb0..2d58821653 100644 --- a/django/db/models/functions/__init__.py +++ b/django/db/models/functions/__init__.py @@ -1,4 +1,4 @@ -from .comparison import Cast, Coalesce, Greatest, Least +from .comparison import Cast, Coalesce, Greatest, Least, NullIf from .datetime import ( Extract, ExtractDay, ExtractHour, ExtractIsoYear, ExtractMinute, ExtractMonth, ExtractQuarter, ExtractSecond, ExtractWeek, ExtractWeekDay, @@ -20,7 +20,7 @@ from .window import ( __all__ = [ # comparison and conversion - 'Cast', 'Coalesce', 'Greatest', 'Least', + 'Cast', 'Coalesce', 'Greatest', 'Least', 'NullIf', # datetime 'Extract', 'ExtractDay', 'ExtractHour', 'ExtractMinute', 'ExtractMonth', 'ExtractQuarter', 'ExtractSecond', 'ExtractWeek', 'ExtractWeekDay', diff --git a/django/db/models/functions/comparison.py b/django/db/models/functions/comparison.py index ff0f0e09d0..6c0b33bdcc 100644 --- a/django/db/models/functions/comparison.py +++ b/django/db/models/functions/comparison.py @@ -1,5 +1,5 @@ """Database functions that do comparisons or type conversions.""" -from django.db.models.expressions import Func +from django.db.models.expressions import Func, Value class Cast(Func): @@ -103,3 +103,14 @@ class Least(Func): def as_sqlite(self, compiler, connection, **extra_context): """Use the MIN function on SQLite.""" return super().as_sqlite(compiler, connection, function='MIN', **extra_context) + + +class NullIf(Func): + function = 'NULLIF' + arity = 2 + + def as_oracle(self, compiler, connection, **extra_context): + expression1 = self.get_source_expressions()[0] + if isinstance(expression1, Value) and expression1.value is None: + raise ValueError('Oracle does not allow Value(None) for expression1.') + return super().as_sql(compiler, connection, **extra_context) |
