summaryrefslogtreecommitdiff
path: root/django/db/models/sql/where.py
diff options
context:
space:
mode:
Diffstat (limited to 'django/db/models/sql/where.py')
-rw-r--r--django/db/models/sql/where.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/django/db/models/sql/where.py b/django/db/models/sql/where.py
index 2577e1d7a5..5a4da97396 100644
--- a/django/db/models/sql/where.py
+++ b/django/db/models/sql/where.py
@@ -208,6 +208,25 @@ class WhereNode(tree.Node):
clone.resolved = True
return clone
+ @cached_property
+ def output_field(self):
+ from django.db.models import BooleanField
+ return BooleanField()
+
+ def select_format(self, compiler, sql, params):
+ # Wrap filters with a CASE WHEN expression if a database backend
+ # (e.g. Oracle) doesn't support boolean expression in SELECT or GROUP
+ # BY list.
+ if not compiler.connection.features.supports_boolean_expr_in_select_clause:
+ sql = f'CASE WHEN {sql} THEN 1 ELSE 0 END'
+ return sql, params
+
+ def get_db_converters(self, connection):
+ return self.output_field.get_db_converters(connection)
+
+ def get_lookup(self, lookup):
+ return self.output_field.get_lookup(lookup)
+
class NothingNode:
"""A node that matches nothing."""