Skip to content

Commit

Permalink
restore special case for single sort while iterating over the search …
Browse files Browse the repository at this point in the history
…index
  • Loading branch information
hannosch committed Apr 7, 2012
1 parent 9da40f6 commit cdf23dd
Showing 1 changed file with 28 additions and 17 deletions.
45 changes: 28 additions & 17 deletions src/Products/ZCatalog/Catalog.py
Expand Up @@ -740,28 +740,39 @@ def sortResults(self, rs, sort_index, reverse=False, limit=None,
# Try to turn rs into an IISet.
rs = IISet(rs)

for k, intset in sort_index.items():
# We have an index that has a set of values for
# each sort key, so we intersect with each set and
# get a sorted sequence of the intersections.
intset = intersection(rs, intset)
if intset:
keys = getattr(intset, 'keys', None)
if keys is not None:
# Is this ever true?
intset = keys()
length += len(intset)
# sort on secondary index
if index2_key_map is not None:
if sort_index_length == 1:
for k, intset in sort_index.items():
# We have an index that has a set of values for
# each sort key, so we intersect with each set and
# get a sorted sequence of the intersections.
intset = intersection(rs, intset)
if intset:
keys = getattr(intset, 'keys', None)
if keys is not None:
# Is this ever true?
intset = keys()
length += len(intset)
append((k, intset, _self__getitem__))
result.sort(reverse=reverse)
else:
for k, intset in sort_index.items():
# We have an index that has a set of values for
# each sort key, so we intersect with each set and
# get a sorted sequence of the intersections.
intset = intersection(rs, intset)
if intset:
keys = getattr(intset, 'keys', None)
if keys is not None:
# Is this ever true?
intset = keys()
length += len(intset)
# sort on secondary index
keysets = defaultdict(list)
for i in intset:
keysets[(k, index2_key_map.get(i))].append(i)
for k2, v2 in keysets.items():
append((k2, v2, _self__getitem__))
else:
append((k, intset, _self__getitem__))

result = multisort(result, sort_spec)
result = multisort(result, sort_spec)
sequence, slen = self._limit_sequence(result, length, b_start,
b_size, switched_reverse)
result = LazyCat(LazyValues(sequence), slen, actual_result_count)
Expand Down

0 comments on commit cdf23dd

Please sign in to comment.