newdb: Fix sorting of view not stable

This commit is contained in:
Kovid Goyal 2013-07-30 09:25:48 +05:30
parent 99d9db82f7
commit f731f2803b
2 changed files with 6 additions and 3 deletions

View File

@ -792,6 +792,7 @@ class Cache(object):
''' '''
all_book_ids = frozenset(self._all_book_ids() if ids_to_sort is None all_book_ids = frozenset(self._all_book_ids() if ids_to_sort is None
else ids_to_sort) else ids_to_sort)
ids_to_sort = all_book_ids if ids_to_sort is None else ids_to_sort
get_metadata = self._get_proxy_metadata get_metadata = self._get_proxy_metadata
lang_map = self.fields['languages'].book_value_map lang_map = self.fields['languages'].book_value_map
virtual_fields = virtual_fields or {} virtual_fields = virtual_fields or {}
@ -818,10 +819,10 @@ class Cache(object):
if len(sort_keys) == 1: if len(sort_keys) == 1:
sk = sort_keys[0] sk = sort_keys[0]
return sorted(all_book_ids, key=lambda i:sk[i], reverse=not return sorted(ids_to_sort, key=lambda i:sk[i], reverse=not
fields[0][1]) fields[0][1])
else: else:
return sorted(all_book_ids, key=partial(SortKey, fields, sort_keys)) return sorted(ids_to_sort, key=partial(SortKey, fields, sort_keys))
@read_api @read_api
def search(self, query, restriction='', virtual_fields=None, book_ids=None): def search(self, query, restriction='', virtual_fields=None, book_ids=None):

View File

@ -222,7 +222,9 @@ class View(object):
if not fields: if not fields:
fields = [('timestamp', False)] fields = [('timestamp', False)]
sorted_book_ids = self.cache.multisort(fields, ids_to_sort=only_ids, virtual_fields={'marked':MarkedVirtualField(self.marked_ids)}) sorted_book_ids = self.cache.multisort(
fields, ids_to_sort=self._map if only_ids is None else only_ids,
virtual_fields={'marked':MarkedVirtualField(self.marked_ids)})
if only_ids is None: if only_ids is None:
self._map = tuple(sorted_book_ids) self._map = tuple(sorted_book_ids)
if len(self._map_filtered) == len(self._map): if len(self._map_filtered) == len(self._map):