diff options
| author | Simon Charette <charette.s@gmail.com> | 2023-12-29 01:28:19 -0500 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2023-12-29 09:07:27 +0100 |
| commit | 90d365d869924d503565eb1ccdc24077d60faf0c (patch) | |
| tree | 9f9454f9e31b7a4e1e7397bec7ecaae20e997770 | |
| parent | bb560651c489879c22878cba5003a09b6a9f930a (diff) | |
Refs #35064 -- Made OrderableAggMixin avoid creating empty OrderByList.
This paves the way for making OrderByList a simple shim over
ExpressionList which requires at least a single item to be provided.
| -rw-r--r-- | django/contrib/postgres/aggregates/mixins.py | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/django/contrib/postgres/aggregates/mixins.py b/django/contrib/postgres/aggregates/mixins.py index 340a917879..68f24a5ce3 100644 --- a/django/contrib/postgres/aggregates/mixins.py +++ b/django/contrib/postgres/aggregates/mixins.py @@ -3,18 +3,21 @@ from django.db.models.expressions import OrderByList class OrderableAggMixin: def __init__(self, *expressions, ordering=(), **extra): - if isinstance(ordering, (list, tuple)): + if not ordering: + self.order_by = None + elif isinstance(ordering, (list, tuple)): self.order_by = OrderByList(*ordering) else: self.order_by = OrderByList(ordering) super().__init__(*expressions, **extra) def resolve_expression(self, *args, **kwargs): - self.order_by = self.order_by.resolve_expression(*args, **kwargs) + if self.order_by is not None: + self.order_by = self.order_by.resolve_expression(*args, **kwargs) return super().resolve_expression(*args, **kwargs) def get_source_expressions(self): - if self.order_by.source_expressions: + if self.order_by is not None: return super().get_source_expressions() + [self.order_by] return super().get_source_expressions() @@ -24,6 +27,9 @@ class OrderableAggMixin: return super().set_source_expressions(exprs) def as_sql(self, compiler, connection): - order_by_sql, order_by_params = compiler.compile(self.order_by) + if self.order_by is not None: + order_by_sql, order_by_params = compiler.compile(self.order_by) + else: + order_by_sql, order_by_params = "", () sql, sql_params = super().as_sql(compiler, connection, ordering=order_by_sql) return sql, (*sql_params, *order_by_params) |
