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 = [] values = []
aliases = self.extra_select.keys() 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)) 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: 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): for value, field in izip(row[index_start:], fields):
values.append(self.convert_values(value, field)) values.append(self.convert_values(value, field))
else: else:
Expand All @@ -187,7 +197,7 @@ def convert_values(self, value, field):
""" """
Using the same routines that Oracle does we can convert our Using the same routines that Oracle does we can convert our
extra selection objects into Geometry and Distance objects. extra selection objects into Geometry and Distance objects.
TODO: Laziness. TODO: Make converted objects 'lazy' for less overhead.
""" """
if SpatialBackend.oracle: if SpatialBackend.oracle:
# Running through Oracle's first. # Running through Oracle's first.
Expand Down

0 comments on commit ca5a2b0

Please sign in to comment.