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,
|
||||
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
|
||||
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,
|
||||
@ -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 custom_columns_idx ON custom_columns (label);
|
||||
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 languages_idx ON languages (lang_code 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_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;
|
||||
@ -340,6 +353,22 @@ CREATE TRIGGER fkc_data_update
|
||||
THEN RAISE(ABORT, 'Foreign key violation: book not in books')
|
||||
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
|
||||
BEFORE DELETE ON authors
|
||||
BEGIN
|
||||
@ -546,4 +575,4 @@ CREATE TRIGGER series_update_trg
|
||||
BEGIN
|
||||
UPDATE series SET sort=title_sort(NEW.name) WHERE id=NEW.id;
|
||||
END;
|
||||
pragma user_version=22;
|
||||
pragma user_version=23;
|
||||
|
@ -641,3 +641,58 @@ class SchemaUpgrade(object):
|
||||
'''
|
||||
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