diff options
| author | Simon Charette <charette.s@gmail.com> | 2023-05-21 16:59:56 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2023-05-22 05:47:29 +0200 |
| commit | 98f6ada0e2058d67d91fb6c16482411ec2ca0967 (patch) | |
| tree | e34d4fb7841605fa4fad6e055463d30b7ea2ba25 | |
| parent | 00f5d2d110712af84fae2c5f9183a2ea48ce0a4a (diff) | |
Fixed #34580 -- Avoided unnecessary computation of selected expressions in SQLCompiler.
Performance regression in 278881e37619278789942513916acafaa88d26f3.
Co-authored-by: David Smith <smithdc@gmail.com>
| -rw-r--r-- | django/db/models/sql/compiler.py | 4 | ||||
| -rw-r--r-- | docs/releases/4.2.2.txt | 3 |
2 files changed, 6 insertions, 1 deletions
diff --git a/django/db/models/sql/compiler.py b/django/db/models/sql/compiler.py index a7a8c98b99..b28dc925ba 100644 --- a/django/db/models/sql/compiler.py +++ b/django/db/models/sql/compiler.py @@ -331,7 +331,9 @@ class SQLCompiler: default_order, _ = ORDER_DIR["DESC"] selected_exprs = {} - if select := self.select: + # Avoid computing `selected_exprs` if there is no `ordering` as it's + # relatively expensive. + if ordering and (select := self.select): for ordinal, (expr, _, alias) in enumerate(select, start=1): pos_expr = PositionRef(ordinal, alias, expr) if alias: diff --git a/docs/releases/4.2.2.txt b/docs/releases/4.2.2.txt index 7506b8a237..475531b531 100644 --- a/docs/releases/4.2.2.txt +++ b/docs/releases/4.2.2.txt @@ -22,3 +22,6 @@ Bugfixes * Fixed a bug in Django 4.2 where :option:`makemigrations --update` didn't respect the ``--name`` option (:ticket:`34568`). + +* Fixed a performance regression in Django 4.2 when compiling queries without + ordering (:ticket:`34580`). |
