From e17fa9e877e84e93b699c2bd13ea48dbbb86e451 Mon Sep 17 00:00:00 2001 From: Anssi Kääriäinen Date: Sun, 24 Mar 2013 22:59:44 +0200 Subject: Fixed #20091 -- Oracle null promotion for empty strings --- django/db/models/sql/query.py | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'django/db/models/sql') diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index fb42cfc5db..acb9f248d6 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -1078,6 +1078,14 @@ class Query(object): elif isinstance(value, ExpressionNode): # If value is a query expression, evaluate it value = SQLEvaluator(value, self, reuse=can_reuse) + # For Oracle '' is equivalent to null. The check needs to be done + # at this stage because join promotion can't be done at compiler + # stage. Using DEFAULT_DB_ALIAS isn't nice, but it is the best we + # can do here. Similar thing is done in is_nullable(), too. + if (connections[DEFAULT_DB_ALIAS].features.interprets_empty_strings_as_nulls and + lookup_type == 'exact' and value == ''): + value = True + lookup_type = 'isnull' for alias, aggregate in self.aggregates.items(): if alias in (parts[0], LOOKUP_SEP.join(parts)): -- cgit v1.3