Skip to content

Commit

Permalink
[1.0.X] Fixed resolve_columns so that pagination works again on Ora…
Browse files Browse the repository at this point in the history
…cle 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
  • Loading branch information
jbronn committed Nov 5, 2008
1 parent dca8dba commit ca5a2b0
Showing 1 changed file with 14 additions and 4 deletions.
18 changes: 14 additions & 4 deletions django/contrib/gis/db/models/sql/query.py
Expand Up @@ -172,11 +172,21 @@ def resolve_columns(self, row, fields=()):
"""
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:
Expand All @@ -187,7 +197,7 @@ def convert_values(self, value, field):
"""
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.
Expand Down

0 comments on commit ca5a2b0

Please sign in to comment.