diff --git a/data/src/commonMain/sqldelight/tachiyomi/migrations/27.sqm b/data/src/commonMain/sqldelight/tachiyomi/migrations/27.sqm new file mode 100644 index 0000000000..41a751d91b --- /dev/null +++ b/data/src/commonMain/sqldelight/tachiyomi/migrations/27.sqm @@ -0,0 +1,50 @@ +DROP VIEW IF EXISTS scanlators_view; +CREATE VIEW scanlators_view AS +SELECT S.* FROM ( + WITH RECURSIVE split(seq, _id, name, str) AS ( + SELECT 0, mangas._id, NULL, mangas.filtered_scanlators||' [.] ' FROM mangas WHERE mangas._id + UNION ALL SELECT + seq+1, + _id, + substr(str, 0, instr(str, ' [.] ')), + substr(str, instr(str, ' [.] ')+5) + FROM split WHERE str != '' + ) + SELECT _id AS manga_id, name FROM split WHERE name != '' ORDER BY split.seq ASC +) AS S; + +DROP VIEW IF EXISTS library_view; +CREATE VIEW library_view AS +SELECT + M.*, + coalesce(C.total, 0) AS total, + coalesce(C.read_count, 0) AS has_read, + coalesce(C.bookmark_count, 0) AS bookmark_count, + coalesce(MC.category_id, 0) AS category, + coalesce(C.latestUpload, 0) AS latestUpload, + coalesce(C.lastRead, 0) AS lastRead, + coalesce(C.lastFetch, 0) AS lastFetch +FROM mangas AS M +LEFT JOIN ( + SELECT + chapters.manga_id, + count(*) AS total, + sum(read) AS read_count, + sum(bookmark) AS bookmark_count, + coalesce(max(chapters.date_upload), 0) AS latestUpload, + coalesce(max(history.history_last_read), 0) AS lastRead, + coalesce(max(chapters.date_fetch), 0) AS lastFetch + FROM chapters + LEFT JOIN scanlators_view AS filtered_scanlators + ON chapters.manga_id = filtered_scanlators.manga_id + AND chapters.scanlator = filtered_scanlators.name + LEFT JOIN history + ON chapters._id = history.history_chapter_id + WHERE filtered_scanlators.name IS NULL + GROUP BY chapters.manga_id +) AS C +ON M._id = C.manga_id +LEFT JOIN (SELECT * FROM mangas_categories) AS MC +ON MC.manga_id = M._id +WHERE M.favorite = 1 +ORDER BY M.title; diff --git a/data/src/commonMain/sqldelight/tachiyomi/view/library_view.sq b/data/src/commonMain/sqldelight/tachiyomi/view/library_view.sq index 4a5bcde4b1..60cb170d9f 100644 --- a/data/src/commonMain/sqldelight/tachiyomi/view/library_view.sq +++ b/data/src/commonMain/sqldelight/tachiyomi/view/library_view.sq @@ -21,7 +21,7 @@ LEFT JOIN ( FROM chapters LEFT JOIN scanlators_view AS filtered_scanlators ON chapters.manga_id = filtered_scanlators.manga_id - AND ifnull(chapters.scanlator, 'N/A') = ifnull(filtered_scanlators.name, '//') -- I assume if it's N/A it shouldn't be filtered + AND chapters.scanlator = filtered_scanlators.name LEFT JOIN history ON chapters._id = history.history_chapter_id WHERE filtered_scanlators.name IS NULL diff --git a/data/src/commonMain/sqldelight/tachiyomi/view/scanlators_view.sq b/data/src/commonMain/sqldelight/tachiyomi/view/scanlators_view.sq index 744626d74e..d336ab90da 100644 --- a/data/src/commonMain/sqldelight/tachiyomi/view/scanlators_view.sq +++ b/data/src/commonMain/sqldelight/tachiyomi/view/scanlators_view.sq @@ -10,5 +10,5 @@ SELECT S.* FROM ( substr(str, instr(str, ' [.] ')+5) FROM split WHERE str != '' ) - SELECT _id AS manga_id, name FROM split WHERE split.seq != 0 ORDER BY split.seq ASC + SELECT _id AS manga_id, name FROM split WHERE name != '' ORDER BY split.seq ASC ) AS S;