summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2023-06-16 12:01:18 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-06-16 12:20:13 +0200
commitc1cff3c4715f633b5123d32227af5104f8585fc7 (patch)
tree76f116a80fe068698ea9d5ebb3dd919f45163b0c
parent1fe0b167af3611cca79e8a8092ee929312193c6f (diff)
Refs #34629 -- Changed SDOAGGRTYPE wrapping to Func() in GIS aggregates on Oracle.
-rw-r--r--django/contrib/gis/db/models/aggregates.py24
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(