|
4 | 4 | from functools import partial
|
5 | 5 | from itertools import chain
|
6 | 6 |
|
7 |
| -from django.core.exceptions import EmptyResultSet, FieldError |
| 7 | +from django.core.exceptions import EmptyResultSet, FieldError, FullResultSet |
8 | 8 | from django.db import DatabaseError, NotSupportedError
|
9 | 9 | from django.db.models.constants import LOOKUP_SEP
|
10 | 10 | from django.db.models.expressions import F, OrderBy, RawSQL, Ref, Value
|
@@ -169,7 +169,7 @@ def get_group_by(self, select, order_by):
|
169 | 169 | expr = Ref(alias, expr)
|
170 | 170 | try:
|
171 | 171 | sql, params = self.compile(expr)
|
172 |
| - except EmptyResultSet: |
| 172 | + except (EmptyResultSet, FullResultSet): |
173 | 173 | continue
|
174 | 174 | sql, params = expr.select_format(self, sql, params)
|
175 | 175 | params_hash = make_hashable(params)
|
@@ -287,6 +287,8 @@ def get_select_from_parent(klass_info):
|
287 | 287 | sql, params = "0", ()
|
288 | 288 | else:
|
289 | 289 | sql, params = self.compile(Value(empty_result_set_value))
|
| 290 | + except FullResultSet: |
| 291 | + sql, params = self.compile(Value(True)) |
290 | 292 | else:
|
291 | 293 | sql, params = col.select_format(self, sql, params)
|
292 | 294 | if alias is None and with_col_aliases:
|
@@ -721,9 +723,16 @@ def as_sql(self, with_limits=True, with_col_aliases=False):
|
721 | 723 | raise
|
722 | 724 | # Use a predicate that's always False.
|
723 | 725 | where, w_params = "0 = 1", []
|
724 |
| - having, h_params = ( |
725 |
| - self.compile(self.having) if self.having is not None else ("", []) |
726 |
| - ) |
| 726 | + except FullResultSet: |
| 727 | + where, w_params = "", [] |
| 728 | + try: |
| 729 | + having, h_params = ( |
| 730 | + self.compile(self.having) |
| 731 | + if self.having is not None |
| 732 | + else ("", []) |
| 733 | + ) |
| 734 | + except FullResultSet: |
| 735 | + having, h_params = "", [] |
727 | 736 | result = ["SELECT"]
|
728 | 737 | params = []
|
729 | 738 |
|
@@ -1817,11 +1826,12 @@ def contains_self_reference_subquery(self):
|
1817 | 1826 | )
|
1818 | 1827 |
|
1819 | 1828 | def _as_sql(self, query):
|
1820 |
| - result = ["DELETE FROM %s" % self.quote_name_unless_alias(query.base_table)] |
1821 |
| - where, params = self.compile(query.where) |
1822 |
| - if where: |
1823 |
| - result.append("WHERE %s" % where) |
1824 |
| - return " ".join(result), tuple(params) |
| 1829 | + delete = "DELETE FROM %s" % self.quote_name_unless_alias(query.base_table) |
| 1830 | + try: |
| 1831 | + where, params = self.compile(query.where) |
| 1832 | + except FullResultSet: |
| 1833 | + return delete, () |
| 1834 | + return f"{delete} WHERE {where}", tuple(params) |
1825 | 1835 |
|
1826 | 1836 | def as_sql(self):
|
1827 | 1837 | """
|
@@ -1906,8 +1916,11 @@ def as_sql(self):
|
1906 | 1916 | "UPDATE %s SET" % qn(table),
|
1907 | 1917 | ", ".join(values),
|
1908 | 1918 | ]
|
1909 |
| - where, params = self.compile(self.query.where) |
1910 |
| - if where: |
| 1919 | + try: |
| 1920 | + where, params = self.compile(self.query.where) |
| 1921 | + except FullResultSet: |
| 1922 | + params = [] |
| 1923 | + else: |
1911 | 1924 | result.append("WHERE %s" % where)
|
1912 | 1925 | return " ".join(result), tuple(update_params + params)
|
1913 | 1926 |
|
|
0 commit comments