mirror of
https://github.com/Suwayomi/Suwayomi-Server.git
synced 2026-07-03 10:54:38 -05:00
Add PostgreSQL support
This commit is contained in:
@@ -1,29 +1,102 @@
|
|||||||
package suwayomi.tachidesk.server.database.migration
|
package suwayomi.tachidesk.server.database.migration
|
||||||
|
|
||||||
import de.neonew.exposed.migrations.helpers.SQLMigration
|
import de.neonew.exposed.migrations.helpers.SQLMigration
|
||||||
|
import suwayomi.tachidesk.graphql.types.DatabaseType
|
||||||
|
import suwayomi.tachidesk.server.serverConfig
|
||||||
|
|
||||||
@Suppress("ClassName", "unused")
|
@Suppress("ClassName", "unused")
|
||||||
class M0053_SyncYomi : SQLMigration() {
|
class M0053_SyncYomi : SQLMigration() {
|
||||||
override val sql = """
|
override val sql = when (serverConfig.databaseType.value) {
|
||||||
ALTER TABLE MANGA ADD COLUMN VERSION BIGINT DEFAULT 0;
|
DatabaseType.POSTGRESQL -> postgresQuery()
|
||||||
ALTER TABLE MANGA ADD COLUMN IS_SYNCING BOOLEAN DEFAULT 0;
|
DatabaseType.H2 -> h2Query()
|
||||||
|
}
|
||||||
|
|
||||||
ALTER TABLE CHAPTER ADD COLUMN VERSION BIGINT DEFAULT 0;
|
fun postgresQuery(): String = """
|
||||||
ALTER TABLE CHAPTER ADD COLUMN IS_SYNCING BOOLEAN DEFAULT 0;
|
ALTER TABLE manga ADD COLUMN version BIGINT DEFAULT 0;
|
||||||
|
ALTER TABLE manga ADD COLUMN is_syncing BOOLEAN DEFAULT FALSE;
|
||||||
|
|
||||||
|
ALTER TABLE chapter ADD COLUMN version BIGINT DEFAULT 0;
|
||||||
|
ALTER TABLE chapter ADD COLUMN is_syncing BOOLEAN DEFAULT FALSE;
|
||||||
|
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION update_manga_version()
|
||||||
|
RETURNS trigger AS $$
|
||||||
|
BEGIN
|
||||||
|
IF NEW.is_syncing = FALSE AND (
|
||||||
|
NEW.url IS DISTINCT FROM OLD.url OR
|
||||||
|
NEW.description IS DISTINCT FROM OLD.description OR
|
||||||
|
NEW.in_library IS DISTINCT FROM OLD.in_library
|
||||||
|
) THEN
|
||||||
|
UPDATE manga SET version = version + 1 WHERE id = NEW.id;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
RETURN NEW;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
CREATE TRIGGER update_manga_version
|
||||||
|
AFTER UPDATE ON manga
|
||||||
|
FOR EACH ROW
|
||||||
|
EXECUTE FUNCTION update_manga_version();
|
||||||
|
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION update_chapter_and_manga_version()
|
||||||
|
RETURNS trigger AS $$
|
||||||
|
BEGIN
|
||||||
|
IF NEW.is_syncing = FALSE AND (
|
||||||
|
NEW.read IS DISTINCT FROM OLD.read OR
|
||||||
|
NEW.bookmark IS DISTINCT FROM OLD.bookmark OR
|
||||||
|
NEW.last_page_read IS DISTINCT FROM OLD.last_page_read
|
||||||
|
) THEN
|
||||||
|
UPDATE chapter SET version = version + 1 WHERE id = NEW.id;
|
||||||
|
UPDATE manga SET version = version + 1 WHERE id = NEW.manga AND is_syncing = FALSE;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
RETURN NEW;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
CREATE TRIGGER update_chapter_and_manga_version
|
||||||
|
AFTER UPDATE ON chapter
|
||||||
|
FOR EACH ROW
|
||||||
|
EXECUTE FUNCTION update_chapter_and_manga_version();
|
||||||
|
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION insert_manga_category_update_version()
|
||||||
|
RETURNS trigger AS $$
|
||||||
|
BEGIN
|
||||||
|
UPDATE manga SET version = version + 1 WHERE id = NEW.manga AND is_syncing = FALSE;
|
||||||
|
|
||||||
|
RETURN NEW;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
CREATE TRIGGER insert_manga_category_update_version
|
||||||
|
AFTER INSERT ON categorymanga
|
||||||
|
FOR EACH ROW
|
||||||
|
EXECUTE FUNCTION insert_manga_category_update_version();
|
||||||
|
""".trimIndent()
|
||||||
|
|
||||||
|
fun h2Query() = """
|
||||||
|
ALTER TABLE manga ADD COLUMN version BIGINT DEFAULT 0;
|
||||||
|
ALTER TABLE manga ADD COLUMN is_syncing BOOLEAN DEFAULT FALSE;
|
||||||
|
|
||||||
|
ALTER TABLE chapter ADD COLUMN version BIGINT DEFAULT 0;
|
||||||
|
ALTER TABLE chapter ADD COLUMN is_syncing BOOLEAN DEFAULT FALSE;
|
||||||
|
|
||||||
CREATE TRIGGER update_manga_version
|
CREATE TRIGGER update_manga_version
|
||||||
AFTER UPDATE ON MANGA
|
AFTER UPDATE ON manga
|
||||||
FOR EACH ROW
|
FOR EACH ROW
|
||||||
CALL "suwayomi.tachidesk.server.database.trigger.UpdateMangaVersionTrigger";
|
CALL "suwayomi.tachidesk.server.database.trigger.UpdateMangaVersionTrigger";
|
||||||
|
|
||||||
CREATE TRIGGER update_chapter_and_manga_version
|
CREATE TRIGGER update_chapter_and_manga_version
|
||||||
AFTER UPDATE ON CHAPTER
|
AFTER UPDATE ON chapter
|
||||||
FOR EACH ROW
|
FOR EACH ROW
|
||||||
CALL "suwayomi.tachidesk.server.database.trigger.UpdateChapterAndMangaVersionTrigger";
|
CALL "suwayomi.tachidesk.server.database.trigger.UpdateChapterAndMangaVersionTrigger";
|
||||||
|
|
||||||
CREATE TRIGGER insert_manga_category_update_version
|
CREATE TRIGGER insert_manga_category_update_version
|
||||||
AFTER INSERT ON CATEGORYMANGA
|
AFTER INSERT ON categorymanga
|
||||||
FOR EACH ROW
|
FOR EACH ROW
|
||||||
CALL "suwayomi.tachidesk.server.database.trigger.InsertMangaCategoryUpdateVersionTrigger";
|
CALL "suwayomi.tachidesk.server.database.trigger.InsertMangaCategoryUpdateVersionTrigger";
|
||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user