diff options
| author | Simon Charette <charette.s@gmail.com> | 2025-01-28 15:04:14 -0500 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2025-02-09 17:45:16 +0100 |
| commit | 4a3ad9eebbc16ce80b348644b557c84ecc741be7 (patch) | |
| tree | e8b5e03db4666e05b40c5136a1ae29fbe8d19be8 /django/db/models/fields | |
| parent | a0a765ddeb5056c85e084773d3f6432e2a426638 (diff) | |
Fixed #36148 -- Enabled native tuple comparison lookups on SQLite 3.37+ and Oracle 23.4+.
VALUES must be explicitly specified when declaring a sequence of tuples
on SQLite < 3.37 but it's not required on >= 3.37.
See sqlite/sqlite@9289f51 which addressed the last remaining issue with
IN.
Diffstat (limited to 'django/db/models/fields')
| -rw-r--r-- | django/db/models/fields/tuple_lookups.py | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/django/db/models/fields/tuple_lookups.py b/django/db/models/fields/tuple_lookups.py index 1e77f095c8..b45bcaf2cd 100644 --- a/django/db/models/fields/tuple_lookups.py +++ b/django/db/models/fields/tuple_lookups.py @@ -27,6 +27,17 @@ class Tuple(Func): def __iter__(self): return iter(self.source_expressions) + def as_sqlite(self, compiler, connection): + if connection.get_database_version() < (3, 37) and isinstance( + first_expr := self.source_expressions[0], Tuple + ): + first_expr = first_expr.copy() + first_expr.function = "VALUES" + return Tuple(first_expr, *self.source_expressions[1:]).as_sql( + compiler, connection + ) + return self.as_sql(compiler, connection) + class TupleLookupMixin: allows_composite_expressions = True |
