DROP INDEX IF EXISTS chapters_manga_id_index; DROP INDEX IF EXISTS chapters_unread_by_manga_index; DROP INDEX IF EXISTS history_history_chapter_id_index; DROP INDEX IF EXISTS library_favorite_index; DROP INDEX IF EXISTS mangas_url_index; ALTER TABLE mangas RENAME TO manga_temp; CREATE TABLE mangas( _id INTEGER NOT NULL PRIMARY KEY, source INTEGER NOT NULL, url TEXT NOT NULL, artist TEXT, author TEXT, description TEXT, genre TEXT, title TEXT NOT NULL, status INTEGER NOT NULL, thumbnail_url TEXT, favorite INTEGER NOT NULL, last_update INTEGER AS Long, next_update INTEGER AS Long, initialized INTEGER AS Boolean NOT NULL, viewer INTEGER NOT NULL, chapter_flags INTEGER NOT NULL, cover_last_modified INTEGER AS Long NOT NULL, date_added INTEGER AS Long NOT NULL ); INSERT INTO mangas SELECT _id,source,url,artist,author,description,genre,title,status,thumbnail_url,favorite,last_update,next_update,initialized,viewer,chapter_flags,cover_last_modified,date_added FROM manga_temp; ALTER TABLE categories RENAME TO categories_temp; CREATE TABLE categories( _id INTEGER NOT NULL PRIMARY KEY, name TEXT NOT NULL, sort INTEGER NOT NULL, flags INTEGER NOT NULL ); INSERT INTO categories SELECT _id,name,sort,flags FROM categories_temp; ALTER TABLE chapters RENAME TO chapters_temp; CREATE TABLE chapters( _id INTEGER NOT NULL PRIMARY KEY, manga_id INTEGER NOT NULL, url TEXT NOT NULL, name TEXT NOT NULL, scanlator TEXT, read INTEGER AS Boolean NOT NULL, bookmark INTEGER AS Boolean NOT NULL, last_page_read INTEGER NOT NULL, chapter_number REAL AS Float NOT NULL, source_order INTEGER NOT NULL, date_fetch INTEGER AS Long NOT NULL, date_upload INTEGER AS Long NOT NULL, FOREIGN KEY(manga_id) REFERENCES mangas (_id) ON DELETE CASCADE ); INSERT INTO chapters SELECT _id,manga_id,url,name,scanlator,read,bookmark,last_page_read,chapter_number,source_order,date_fetch,date_upload FROM chapters_temp; ALTER TABLE history RENAME TO history_temp; CREATE TABLE history( history_id INTEGER NOT NULL PRIMARY KEY, history_chapter_id INTEGER NOT NULL UNIQUE, history_last_read INTEGER AS Long, history_time_read INTEGER AS Long, FOREIGN KEY(history_chapter_id) REFERENCES chapters (_id) ON DELETE CASCADE ); INSERT INTO history SELECT history_id, history_chapter_id, history_last_read, history_time_read FROM history_temp; ALTER TABLE mangas_categories RENAME TO mangas_categories_temp; CREATE TABLE mangas_categories( _id INTEGER NOT NULL PRIMARY KEY, manga_id INTEGER NOT NULL, category_id INTEGER NOT NULL, FOREIGN KEY(category_id) REFERENCES categories (_id) ON DELETE CASCADE, FOREIGN KEY(manga_id) REFERENCES mangas (_id) ON DELETE CASCADE ); INSERT INTO mangas_categories SELECT _id, manga_id, category_id FROM mangas_categories_temp; ALTER TABLE manga_sync RENAME TO manga_sync_temp; CREATE TABLE manga_sync( _id INTEGER NOT NULL PRIMARY KEY, manga_id INTEGER NOT NULL, sync_id INTEGER NOT NULL, remote_id INTEGER NOT NULL, library_id INTEGER, title TEXT NOT NULL, last_chapter_read REAL NOT NULL, total_chapters INTEGER NOT NULL, status INTEGER NOT NULL, score REAL AS Float NOT NULL, remote_url TEXT NOT NULL, start_date INTEGER AS Long NOT NULL, finish_date INTEGER AS Long NOT NULL, UNIQUE (manga_id, sync_id) ON CONFLICT REPLACE, FOREIGN KEY(manga_id) REFERENCES mangas (_id) ON DELETE CASCADE ); INSERT INTO manga_sync SELECT _id, manga_id, sync_id, remote_id, library_id, title, last_chapter_read, total_chapters, status, score, remote_url, start_date, finish_date FROM manga_sync_temp; CREATE INDEX chapters_manga_id_index ON chapters(manga_id); CREATE INDEX chapters_unread_by_manga_index ON chapters(manga_id, read) WHERE read = 0; CREATE INDEX history_history_chapter_id_index ON history(history_chapter_id); CREATE INDEX library_favorite_index ON mangas(favorite) WHERE favorite = 1; CREATE INDEX mangas_url_index ON mangas(url); CREATE VIEW IF NOT EXISTS historyView AS SELECT history.history_id AS id, mangas._id AS mangaId, chapters._id AS chapterId, mangas.title, mangas.thumbnail_url AS thumnailUrl, chapters.chapter_number AS chapterNumber, history.history_last_read AS readAt, max_last_read.history_last_read AS maxReadAt, max_last_read.history_chapter_id AS maxReadAtChapterId FROM mangas JOIN chapters ON mangas._id = chapters.manga_id JOIN history ON chapters._id = history.history_chapter_id JOIN ( SELECT chapters.manga_id,chapters._id AS history_chapter_id, MAX(history.history_last_read) AS history_last_read FROM chapters JOIN history ON chapters._id = history.history_chapter_id GROUP BY chapters.manga_id ) AS max_last_read ON chapters.manga_id = max_last_read.manga_id; DROP TABLE IF EXISTS manga_sync_temp; DROP TABLE IF EXISTS mangas_categories_temp; DROP TABLE IF EXISTS history_temp; DROP TABLE IF EXISTS chapters_temp; DROP TABLE IF EXISTS categories_temp; DROP TABLE IF EXISTS manga_temp;