summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2023-10-04 15:30:50 -0400
committerGitHub <noreply@github.com>2023-10-04 21:30:50 +0200
commitea596a52d9f905596cc5335930c8f2ac4511204c (patch)
treea2a65ab2441b6191ff08b3769675b03212bf34ce /django
parent0989cf13e70f52d5b241aa176eb74a680a282d09 (diff)
Refs #33482 -- Fixed QuerySet selecting and filtering againts Exists() with empty queryset.
Thanks Tobias Bengfort for the report.
Diffstat (limited to 'django')
-rw-r--r--django/db/models/expressions.py9
1 files changed, 9 insertions, 0 deletions
diff --git a/django/db/models/expressions.py b/django/db/models/expressions.py
index 30d44650ec..181a04493f 100644
--- a/django/db/models/expressions.py
+++ b/django/db/models/expressions.py
@@ -1624,6 +1624,15 @@ class Exists(Subquery):
sql = "CASE WHEN {} THEN 1 ELSE 0 END".format(sql)
return sql, params
+ def as_sql(self, compiler, *args, **kwargs):
+ try:
+ return super().as_sql(compiler, *args, **kwargs)
+ except EmptyResultSet:
+ features = compiler.connection.features
+ if not features.supports_boolean_expr_in_select_clause:
+ return "1=0", ()
+ return compiler.compile(Value(False))
+
@deconstructible(path="django.db.models.OrderBy")
class OrderBy(Expression):