diff options
| author | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2023-06-16 12:01:18 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2023-06-16 12:20:13 +0200 |
| commit | c1cff3c4715f633b5123d32227af5104f8585fc7 (patch) | |
| tree | 76f116a80fe068698ea9d5ebb3dd919f45163b0c | |
| parent | 1fe0b167af3611cca79e8a8092ee929312193c6f (diff) | |
Refs #34629 -- Changed SDOAGGRTYPE wrapping to Func() in GIS aggregates on Oracle.
| -rw-r--r-- | django/contrib/gis/db/models/aggregates.py | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/django/contrib/gis/db/models/aggregates.py b/django/contrib/gis/db/models/aggregates.py index c19cbd06c3..8493882696 100644 --- a/django/contrib/gis/db/models/aggregates.py +++ b/django/contrib/gis/db/models/aggregates.py @@ -4,7 +4,7 @@ from django.contrib.gis.db.models.fields import ( GeometryField, LineStringField, ) -from django.db.models import Aggregate, Value +from django.db.models import Aggregate, Func, Value from django.utils.functional import cached_property __all__ = ["Collect", "Extent", "Extent3D", "MakeLine", "Union"] @@ -33,16 +33,20 @@ class GeoAggregate(Aggregate): if not self.is_extent: tolerance = self.extra.get("tolerance") or getattr(self, "tolerance", 0.05) clone = self.copy() - clone.set_source_expressions( - [ - *self.get_source_expressions(), - Value(tolerance), - ] - ) - template = "%(function)s(SDOAGGRTYPE(%(expressions)s))" - return clone.as_sql( - compiler, connection, template=template, **extra_context + source_expressions = self.get_source_expressions() + if self.filter: + source_expressions.pop() + spatial_type_expr = Func( + *source_expressions, + Value(tolerance), + function="SDOAGGRTYPE", + output_field=self.output_field, ) + source_expressions = [spatial_type_expr] + if self.filter: + source_expressions.append(self.filter) + clone.set_source_expressions(source_expressions) + return clone.as_sql(compiler, connection, **extra_context) return self.as_sql(compiler, connection, **extra_context) def resolve_expression( |
