summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Bronn <jbronn@gmail.com>2008-11-05 18:24:55 +0000
committerJustin Bronn <jbronn@gmail.com>2008-11-05 18:24:55 +0000
commitca5a2b09307abd05758b08a8406f59b4490957db (patch)
treecbbcbc52aacd341c73baf58fe9d9c729fc683c46
parentdca8dbaf8605807609108988b45d865867876866 (diff)
[1.0.X] Fixed `resolve_columns` so that pagination works again on Oracle GeoQuerySets; properly set svn:ignore on `sitemaps` subdir.
Backport of r9338 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@9339 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/contrib/gis/db/models/sql/query.py18
1 files changed, 14 insertions, 4 deletions
diff --git a/django/contrib/gis/db/models/sql/query.py b/django/contrib/gis/db/models/sql/query.py
index f3e9fb25ca..92c26fa126 100644
--- a/django/contrib/gis/db/models/sql/query.py
+++ b/django/contrib/gis/db/models/sql/query.py
@@ -172,11 +172,21 @@ class GeoQuery(sql.Query):
"""
values = []
aliases = self.extra_select.keys()
- index_start = len(aliases)
+
+ # Have to set a starting row number offset that is used for
+ # determining the correct starting row index -- needed for
+ # doing pagination with Oracle.
+ rn_offset = 0
+ if SpatialBackend.oracle:
+ if self.high_mark is not None or self.low_mark: rn_offset = 1
+ index_start = rn_offset + len(aliases)
+
+ # Converting any extra selection values (e.g., geometries and
+ # distance objects added by GeoQuerySet methods).
values = [self.convert_values(v, self.extra_select_fields.get(a, None))
- for v, a in izip(row[:index_start], aliases)]
+ for v, a in izip(row[rn_offset:index_start], aliases)]
if SpatialBackend.oracle:
- # This is what happens normally in Oracle's `resolve_columns`.
+ # This is what happens normally in OracleQuery's `resolve_columns`.
for value, field in izip(row[index_start:], fields):
values.append(self.convert_values(value, field))
else:
@@ -187,7 +197,7 @@ class GeoQuery(sql.Query):
"""
Using the same routines that Oracle does we can convert our
extra selection objects into Geometry and Distance objects.
- TODO: Laziness.
+ TODO: Make converted objects 'lazy' for less overhead.
"""
if SpatialBackend.oracle:
# Running through Oracle's first.