From 813db96cd3c4fa28c73944d593681082803f8056 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 18 Jul 2025 11:22:25 +0530 Subject: [PATCH] Fix failing test comparing date searching with old and new dbs Ensure date comparison is done in the same timezone. This change only affects legacy code path that is not actually used anywhere other than for tests. --- src/calibre/db/tests/reading.py | 3 +-- src/calibre/library/caches.py | 14 +++++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/calibre/db/tests/reading.py b/src/calibre/db/tests/reading.py index 1769045499..9feb4277b1 100644 --- a/src/calibre/db/tests/reading.py +++ b/src/calibre/db/tests/reading.py @@ -293,8 +293,7 @@ class ReadingTest(BaseTest): old = LibraryDatabase2(self.library_path) oldvals = {query:set(old.search_getting_ids(query, '')) for query in ( # Date tests - # 'date:9/6/2011', - 'date:true', 'date:false', 'pubdate:1/9/2011', + 'date:9/6/2011', 'date:true', 'date:false', 'pubdate:1/9/2011', '#date:true', 'date:<100_daysago', 'date:>9/6/2011', '#date:>9/1/2011', '#date:=2011', diff --git a/src/calibre/library/caches.py b/src/calibre/library/caches.py index 7c57b168f9..6606e16eda 100644 --- a/src/calibre/library/caches.py +++ b/src/calibre/library/caches.py @@ -293,6 +293,8 @@ class ResultCache(SearchQueryParser): # {{{ will almost never be correct. ''' def relop_eq(db, query, field_count): + if db.tzinfo != query.tzinfo: + db = db.astimezone(tz=query.tzinfo) if db.year == query.year: if field_count == 1: return True @@ -303,6 +305,8 @@ class ResultCache(SearchQueryParser): # {{{ return False def relop_gt(db, query, field_count): + if db.tzinfo != query.tzinfo: + db = db.astimezone(tz=query.tzinfo) if db.year > query.year: return True if field_count > 1 and db.year == query.year: @@ -312,6 +316,8 @@ class ResultCache(SearchQueryParser): # {{{ return False def relop_lt(db, query, field_count): + if db.tzinfo != query.tzinfo: + db = db.astimezone(tz=query.tzinfo) if db.year < query.year: return True if field_count > 1 and db.year == query.year: @@ -321,12 +327,18 @@ class ResultCache(SearchQueryParser): # {{{ return False def relop_ne(db, query, field_count): + if db.tzinfo != query.tzinfo: + db = db.astimezone(tz=query.tzinfo) return not relop_eq(db, query, field_count) def relop_ge(db, query, field_count): + if db.tzinfo != query.tzinfo: + db = db.astimezone(tz=query.tzinfo) return not relop_lt(db, query, field_count) def relop_le(db, query, field_count): + if db.tzinfo != query.tzinfo: + db = db.astimezone(tz=query.tzinfo) return not relop_gt(db, query, field_count) self.date_search_relops = { @@ -417,7 +429,7 @@ class ResultCache(SearchQueryParser): # {{{ continue v = item[loc] if isinstance(v, (bytes, str)): - v = parse_date(v) + v = parse_date(v, as_utc=False) if relop(v, qd, field_count): matches.add(item[0]) return matches