Fix test failing on Windows

Use an AUTOINCREMENT id rather than epoch which is not predictable
since system clocks can change.
This commit is contained in:
Kovid Goyal 2022-12-15 19:47:49 +05:30
parent 1704e13460
commit 4fa7648de4
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -11,7 +11,7 @@ from time import time_ns
from calibre.constants import cache_dir
creation_sql = '''
CREATE TABLE IF NOT EXISTS last_read_positions ( id INTEGER PRIMARY KEY,
CREATE TABLE IF NOT EXISTS last_read_positions ( id INTEGER PRIMARY KEY AUTOINCREMENT,
library_id TEXT NOT NULL,
book INTEGER NOT NULL,
format TEXT NOT NULL COLLATE NOCASE,
@ -57,10 +57,10 @@ class LastReadCache:
self.execute(
'INSERT OR REPLACE INTO last_read_positions(library_id,book,format,user,cfi,epoch,pos_frac,tooltip) VALUES (?,?,?,?,?,?,?,?)',
(library_id, book_id, fmt, user, cfi, epoch, pos_frac, tooltip))
items = tuple(self.get('SELECT epoch FROM last_read_positions WHERE user=? ORDER BY epoch DESC', (user,), all=True))
items = tuple(self.get('SELECT id FROM last_read_positions WHERE user=? ORDER BY epoch DESC', (user,), all=True))
if len(items) > self.limit:
limit_epoch = items[self.limit][0]
self.execute('DELETE FROM last_read_positions WHERE user=? AND epoch <= ?', (user, limit_epoch))
limit_id = items[self.limit][0]
self.execute('DELETE FROM last_read_positions WHERE user=? AND id <= ?', (user, limit_id))
return epoch
def get_recently_read(self, user):