mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Add db table to track last read positions
This commit is contained in:
parent
7d1773ab73
commit
e6c53ab033
@ -128,6 +128,17 @@ CREATE TABLE tags ( id INTEGER PRIMARY KEY,
|
|||||||
name TEXT NOT NULL COLLATE NOCASE,
|
name TEXT NOT NULL COLLATE NOCASE,
|
||||||
UNIQUE (name)
|
UNIQUE (name)
|
||||||
);
|
);
|
||||||
|
CREATE TABLE last_read_positions ( id INTEGER PRIMARY KEY,
|
||||||
|
book INTEGER NOT NULL,
|
||||||
|
format TEXT NOT NULL COLLATE NOCASE,
|
||||||
|
user TEXT NOT NULL,
|
||||||
|
device TEXT NOT NULL,
|
||||||
|
cfi TEXT NOT NULL,
|
||||||
|
epoch REAL NOT NULL,
|
||||||
|
extra TEXT DEFAULT '',
|
||||||
|
UNIQUE(user, device, book, format)
|
||||||
|
);
|
||||||
|
|
||||||
CREATE VIEW meta AS
|
CREATE VIEW meta AS
|
||||||
SELECT id, title,
|
SELECT id, title,
|
||||||
(SELECT sortconcat(bal.id, name) FROM books_authors_link AS bal JOIN authors ON(author = authors.id) WHERE book = books.id) authors,
|
(SELECT sortconcat(bal.id, name) FROM books_authors_link AS bal JOIN authors ON(author = authors.id) WHERE book = books.id) authors,
|
||||||
@ -278,6 +289,7 @@ CREATE INDEX conversion_options_idx_a ON conversion_options (format COLLATE NOCA
|
|||||||
CREATE INDEX conversion_options_idx_b ON conversion_options (book);
|
CREATE INDEX conversion_options_idx_b ON conversion_options (book);
|
||||||
CREATE INDEX custom_columns_idx ON custom_columns (label);
|
CREATE INDEX custom_columns_idx ON custom_columns (label);
|
||||||
CREATE INDEX data_idx ON data (book);
|
CREATE INDEX data_idx ON data (book);
|
||||||
|
CREATE INDEX lrp_idx ON last_read_positions (book);
|
||||||
CREATE INDEX formats_idx ON data (format);
|
CREATE INDEX formats_idx ON data (format);
|
||||||
CREATE INDEX languages_idx ON languages (lang_code COLLATE NOCASE);
|
CREATE INDEX languages_idx ON languages (lang_code COLLATE NOCASE);
|
||||||
CREATE INDEX publishers_idx ON publishers (name COLLATE NOCASE);
|
CREATE INDEX publishers_idx ON publishers (name COLLATE NOCASE);
|
||||||
@ -293,6 +305,7 @@ CREATE TRIGGER books_delete_trg
|
|||||||
DELETE FROM books_tags_link WHERE book=OLD.id;
|
DELETE FROM books_tags_link WHERE book=OLD.id;
|
||||||
DELETE FROM books_languages_link WHERE book=OLD.id;
|
DELETE FROM books_languages_link WHERE book=OLD.id;
|
||||||
DELETE FROM data WHERE book=OLD.id;
|
DELETE FROM data WHERE book=OLD.id;
|
||||||
|
DELETE FROM last_read_positions WHERE book=OLD.id;
|
||||||
DELETE FROM comments WHERE book=OLD.id;
|
DELETE FROM comments WHERE book=OLD.id;
|
||||||
DELETE FROM conversion_options WHERE book=OLD.id;
|
DELETE FROM conversion_options WHERE book=OLD.id;
|
||||||
DELETE FROM books_plugin_data WHERE book=OLD.id;
|
DELETE FROM books_plugin_data WHERE book=OLD.id;
|
||||||
@ -340,6 +353,22 @@ CREATE TRIGGER fkc_data_update
|
|||||||
THEN RAISE(ABORT, 'Foreign key violation: book not in books')
|
THEN RAISE(ABORT, 'Foreign key violation: book not in books')
|
||||||
END;
|
END;
|
||||||
END;
|
END;
|
||||||
|
CREATE TRIGGER fkc_lrp_insert
|
||||||
|
BEFORE INSERT ON last_read_positions
|
||||||
|
BEGIN
|
||||||
|
SELECT CASE
|
||||||
|
WHEN (SELECT id from books WHERE id=NEW.book) IS NULL
|
||||||
|
THEN RAISE(ABORT, 'Foreign key violation: book not in books')
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
CREATE TRIGGER fkc_lrp_update
|
||||||
|
BEFORE UPDATE OF book ON last_read_positions
|
||||||
|
BEGIN
|
||||||
|
SELECT CASE
|
||||||
|
WHEN (SELECT id from books WHERE id=NEW.book) IS NULL
|
||||||
|
THEN RAISE(ABORT, 'Foreign key violation: book not in books')
|
||||||
|
END;
|
||||||
|
END;
|
||||||
CREATE TRIGGER fkc_delete_on_authors
|
CREATE TRIGGER fkc_delete_on_authors
|
||||||
BEFORE DELETE ON authors
|
BEFORE DELETE ON authors
|
||||||
BEGIN
|
BEGIN
|
||||||
@ -546,4 +575,4 @@ CREATE TRIGGER series_update_trg
|
|||||||
BEGIN
|
BEGIN
|
||||||
UPDATE series SET sort=title_sort(NEW.name) WHERE id=NEW.id;
|
UPDATE series SET sort=title_sort(NEW.name) WHERE id=NEW.id;
|
||||||
END;
|
END;
|
||||||
pragma user_version=22;
|
pragma user_version=23;
|
||||||
|
@ -641,3 +641,58 @@ class SchemaUpgrade(object):
|
|||||||
'''
|
'''
|
||||||
self.db.execute(script)
|
self.db.execute(script)
|
||||||
|
|
||||||
|
def upgrade_version_22(self):
|
||||||
|
''' Create the last_read_positions table '''
|
||||||
|
self.db.execute('''
|
||||||
|
DROP TABLE IF EXISTS last_read_positions;
|
||||||
|
CREATE TABLE last_read_positions ( id INTEGER PRIMARY KEY,
|
||||||
|
book INTEGER NOT NULL,
|
||||||
|
format TEXT NOT NULL COLLATE NOCASE,
|
||||||
|
user TEXT NOT NULL,
|
||||||
|
device TEXT NOT NULL,
|
||||||
|
cfi TEXT NOT NULL,
|
||||||
|
epoch REAL NOT NULL,
|
||||||
|
extra TEXT DEFAULT '',
|
||||||
|
UNIQUE(user, device, book, format)
|
||||||
|
);
|
||||||
|
DROP INDEX IF EXISTS lrp_idx;
|
||||||
|
CREATE INDEX lrp_idx ON last_read_positions (book);
|
||||||
|
|
||||||
|
DROP TRIGGER IF EXISTS books_delete_trg;
|
||||||
|
CREATE TRIGGER books_delete_trg
|
||||||
|
AFTER DELETE ON books
|
||||||
|
BEGIN
|
||||||
|
DELETE FROM books_authors_link WHERE book=OLD.id;
|
||||||
|
DELETE FROM books_publishers_link WHERE book=OLD.id;
|
||||||
|
DELETE FROM books_ratings_link WHERE book=OLD.id;
|
||||||
|
DELETE FROM books_series_link WHERE book=OLD.id;
|
||||||
|
DELETE FROM books_tags_link WHERE book=OLD.id;
|
||||||
|
DELETE FROM books_languages_link WHERE book=OLD.id;
|
||||||
|
DELETE FROM data WHERE book=OLD.id;
|
||||||
|
DELETE FROM last_read_positions WHERE book=OLD.id;
|
||||||
|
DELETE FROM comments WHERE book=OLD.id;
|
||||||
|
DELETE FROM conversion_options WHERE book=OLD.id;
|
||||||
|
DELETE FROM books_plugin_data WHERE book=OLD.id;
|
||||||
|
DELETE FROM identifiers WHERE book=OLD.id;
|
||||||
|
END;
|
||||||
|
|
||||||
|
DROP TRIGGER IF EXISTS fkc_lrp_insert;
|
||||||
|
DROP TRIGGER IF EXISTS fkc_lrp_update;
|
||||||
|
CREATE TRIGGER fkc_lrp_insert
|
||||||
|
BEFORE INSERT ON last_read_positions
|
||||||
|
BEGIN
|
||||||
|
SELECT CASE
|
||||||
|
WHEN (SELECT id from books WHERE id=NEW.book) IS NULL
|
||||||
|
THEN RAISE(ABORT, 'Foreign key violation: book not in books')
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
CREATE TRIGGER fkc_lrp_update
|
||||||
|
BEFORE UPDATE OF book ON last_read_positions
|
||||||
|
BEGIN
|
||||||
|
SELECT CASE
|
||||||
|
WHEN (SELECT id from books WHERE id=NEW.book) IS NULL
|
||||||
|
THEN RAISE(ABORT, 'Foreign key violation: book not in books')
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
|
||||||
|
''')
|
||||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user