From e2f34bc3869ff63d3587c437486c71629d0404ab Mon Sep 17 00:00:00 2001 From: Charles Haley Date: Sun, 25 Sep 2022 13:24:06 +0100 Subject: [PATCH] Fix composite column searching to make #x:false. Before, books with an empty column were not returned. With this change it returns None. --- src/calibre/db/fields.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/calibre/db/fields.py b/src/calibre/db/fields.py index 5c36202366..5e0a947869 100644 --- a/src/calibre/db/fields.py +++ b/src/calibre/db/fields.py @@ -345,9 +345,16 @@ class CompositeField(OneToOneField): for book_id in candidates: vals = self.get_value_with_cache(book_id, get_metadata) vals = (vv.strip() for vv in vals.split(splitter)) if splitter else (vals,) + found = False for v in vals: if v: val_map[v].add(book_id) + found = True + if not found: + # Convert columns with no value to None to ensure #x:false + # searches work. We do it outside the loop to avoid generating + # None for is_multiple columns containing text like "a,,,b". + val_map[None].add(book_id) yield from iteritems(val_map) def iter_counts(self, candidates, get_metadata=None):