diff options
| author | Jacob Walls <jacobtylerwalls@gmail.com> | 2024-12-29 01:13:48 -0800 |
|---|---|---|
| committer | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2025-08-04 10:14:01 +0200 |
| commit | 8914f4703cf03e2a01683c4ba00f5ae7d3fa449d (patch) | |
| tree | 5331d4fac059c893d16875710dc8539ff91bdc81 /django/db | |
| parent | 079d31e698fa08dd92e2bc4f3fe9b4817a214419 (diff) | |
Fixed #35972 -- Fixed lookup crashes after subquery annotations.
Diffstat (limited to 'django/db')
| -rw-r--r-- | django/db/backends/base/schema.py | 3 | ||||
| -rw-r--r-- | django/db/models/expressions.py | 4 | ||||
| -rw-r--r-- | django/db/models/functions/comparison.py | 2 | ||||
| -rw-r--r-- | django/db/models/lookups.py | 12 |
4 files changed, 12 insertions, 9 deletions
diff --git a/django/db/backends/base/schema.py b/django/db/backends/base/schema.py index 5262864e7f..cc33740195 100644 --- a/django/db/backends/base/schema.py +++ b/django/db/backends/base/schema.py @@ -1,6 +1,7 @@ import logging import operator from datetime import datetime +from itertools import chain from django.conf import settings from django.core.exceptions import FieldError @@ -1160,7 +1161,7 @@ class BaseDatabaseSchemaEditor: # Combine actions together if we can (e.g. postgres) if self.connection.features.supports_combined_alters and actions: sql, params = tuple(zip(*actions)) - actions = [(", ".join(sql), sum(params, []))] + actions = [(", ".join(sql), tuple(chain(*params)))] # Apply those actions for sql, params in actions: self.execute( diff --git a/django/db/models/expressions.py b/django/db/models/expressions.py index 012a7c346b..1168c7ddbd 100644 --- a/django/db/models/expressions.py +++ b/django/db/models/expressions.py @@ -1127,7 +1127,7 @@ class Func(SQLiteNumericMixin, Expression): template = template or data.get("template", self.template) arg_joiner = arg_joiner or data.get("arg_joiner", self.arg_joiner) data["expressions"] = data["field"] = arg_joiner.join(sql_parts) - return template % data, params + return template % data, tuple(params) def copy(self): copy = super().copy() @@ -1323,7 +1323,7 @@ class Col(Expression): alias, column = self.alias, self.target.column identifiers = (alias, column) if alias else (column,) sql = ".".join(map(compiler.quote_name_unless_alias, identifiers)) - return sql, [] + return sql, () def relabeled_clone(self, relabels): if self.alias is None: diff --git a/django/db/models/functions/comparison.py b/django/db/models/functions/comparison.py index 11af0c0750..8f7493f2fd 100644 --- a/django/db/models/functions/comparison.py +++ b/django/db/models/functions/comparison.py @@ -26,7 +26,7 @@ class Cast(Func): compiler, connection, template=template, **extra_context ) format_string = "%H:%M:%f" if db_type == "time" else "%Y-%m-%d %H:%M:%f" - params.insert(0, format_string) + params = (format_string, *params) return sql, params elif db_type == "date": template = "date(%(expressions)s)" diff --git a/django/db/models/lookups.py b/django/db/models/lookups.py index 51817710e9..65128732fd 100644 --- a/django/db/models/lookups.py +++ b/django/db/models/lookups.py @@ -101,7 +101,7 @@ class Lookup(Expression): return Value(self.lhs) def get_db_prep_lookup(self, value, connection): - return ("%s", [value]) + return ("%s", (value,)) def process_lhs(self, compiler, connection, lhs=None): lhs = lhs or self.lhs @@ -415,7 +415,7 @@ class IExact(BuiltinLookup): def process_rhs(self, qn, connection): rhs, params = super().process_rhs(qn, connection) if params: - params[0] = connection.ops.prep_for_iexact_query(params[0]) + params = (connection.ops.prep_for_iexact_query(params[0]), *params[1:]) return rhs, params @@ -603,8 +603,9 @@ class PatternLookup(BuiltinLookup): def process_rhs(self, qn, connection): rhs, params = super().process_rhs(qn, connection) if self.rhs_is_direct_value() and params and not self.bilateral_transforms: - params[0] = self.param_pattern % connection.ops.prep_for_like_query( - params[0] + params = ( + self.param_pattern % connection.ops.prep_for_like_query(params[0]), + *params[1:], ) return rhs, params @@ -686,8 +687,9 @@ class Regex(BuiltinLookup): else: lhs, lhs_params = self.process_lhs(compiler, connection) rhs, rhs_params = self.process_rhs(compiler, connection) + params = (*lhs_params, *rhs_params) sql_template = connection.ops.regex_lookup(self.lookup_name) - return sql_template % (lhs, rhs), lhs_params + rhs_params + return sql_template % (lhs, rhs), params @Field.register_lookup |
