Fix searching on is_multiple composite fields

Merge branch 'master' of https://github.com/cbhaley/calibre
This commit is contained in:
Kovid Goyal 2013-08-25 06:52:34 +05:30
commit 91755ac202

View File

@ -216,8 +216,19 @@ class CompositeField(OneToOneField):
def iter_searchable_values(self, get_metadata, candidates, default_value=None):
val_map = defaultdict(set)
try:
splitter = self.table.metadata['is_multiple'].get('cache_to_list', None)
except AttributeError:
splitter = None
for book_id in candidates:
val_map[self.get_value_with_cache(book_id, get_metadata)].add(book_id)
vals = self.get_value_with_cache(book_id, get_metadata)
if splitter:
vals = (vv.strip() for vv in vals.split(splitter))
else:
vals = (vals,)
for v in vals:
if v:
val_map[v].add(book_id)
for val, book_ids in val_map.iteritems():
yield val, book_ids