diff --git a/CHANGELOG.md b/CHANGELOG.md index 659e9e2e9..8c8336511 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - . ### Changed -- . +- (Database/H2) Use the latest H2 database engine ### Fixed - (CloudFlareInterceptor) Don't send the `cf_clearance` cookie back to Flaresolverr diff --git a/server/src/main/kotlin/suwayomi/tachidesk/global/model/table/GlobalMetaTable.kt b/server/src/main/kotlin/suwayomi/tachidesk/global/model/table/GlobalMetaTable.kt index ee99bf5d5..e3f079da1 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/global/model/table/GlobalMetaTable.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/global/model/table/GlobalMetaTable.kt @@ -13,6 +13,6 @@ import org.jetbrains.exposed.v1.core.dao.id.IntIdTable * Metadata storage for clients, server/global level. */ object GlobalMetaTable : IntIdTable() { - val key = varchar("key", 256) + val key = varchar("meta_key", 256) val value = varchar("value", 4096) } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/CategoryMetaTable.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/CategoryMetaTable.kt index 5067e9310..d1513f359 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/CategoryMetaTable.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/CategoryMetaTable.kt @@ -15,7 +15,7 @@ import suwayomi.tachidesk.manga.model.table.CategoryMetaTable.ref * Metadata storage for clients, about Category with id == [ref]. */ object CategoryMetaTable : IntIdTable() { - val key = varchar("key", 256) + val key = varchar("meta_key", 256) val value = varchar("value", 4096) val ref = reference("category_ref", CategoryTable, ReferenceOption.CASCADE) } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/ChapterMetaTable.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/ChapterMetaTable.kt index d400faac2..24a90fc38 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/ChapterMetaTable.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/ChapterMetaTable.kt @@ -26,7 +26,7 @@ import suwayomi.tachidesk.manga.model.table.ChapterMetaTable.ref * } */ object ChapterMetaTable : IntIdTable() { - val key = varchar("key", 256) + val key = varchar("meta_key", 256) val value = varchar("value", 4096) val ref = reference("chapter_ref", ChapterTable, ReferenceOption.CASCADE) } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/MangaMetaTable.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/MangaMetaTable.kt index cda6b7af6..b89b4597e 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/MangaMetaTable.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/MangaMetaTable.kt @@ -26,7 +26,7 @@ import suwayomi.tachidesk.manga.model.table.MangaMetaTable.ref * } */ object MangaMetaTable : IntIdTable() { - val key = varchar("key", 256) + val key = varchar("meta_key", 256) val value = varchar("value", 4096) val ref = reference("manga_ref", MangaTable, ReferenceOption.CASCADE) } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/SourceMetaTable.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/SourceMetaTable.kt index bc2eaa8fd..359da81e6 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/SourceMetaTable.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/SourceMetaTable.kt @@ -14,7 +14,7 @@ import suwayomi.tachidesk.manga.model.table.SourceMetaTable.ref * Metadata storage for clients, about Source with id == [ref]. */ object SourceMetaTable : IntIdTable() { - val key = varchar("key", 256) + val key = varchar("meta_key", 256) val value = varchar("value", 4096) val ref = long("source_ref") } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/DBManager.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/DBManager.kt index 34a12f1e2..a1cc41d2f 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/database/DBManager.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/database/DBManager.kt @@ -27,7 +27,6 @@ import suwayomi.tachidesk.server.util.ExitCode import suwayomi.tachidesk.server.util.shutdownApp import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get -import java.sql.SQLException import kotlin.time.Duration.Companion.minutes import kotlin.time.Duration.Companion.seconds @@ -184,7 +183,7 @@ fun databaseUp() { } val migrations = loadMigrationsFrom("suwayomi.tachidesk.server.database.migration", ServerConfig::class.java) runMigrations(migrations) - } catch (e: SQLException) { + } catch (e: Exception) { logger.error(e) { "Error up-to-database migration" } if (System.getProperty("crashOnFailedMigration").toBoolean()) { shutdownApp(ExitCode.DbMigrationFailure) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0023_CategoryMetaRefFix.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0023_CategoryMetaRefFix.kt index f0807181a..6292553f3 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0023_CategoryMetaRefFix.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0023_CategoryMetaRefFix.kt @@ -10,17 +10,10 @@ package suwayomi.tachidesk.server.database.migration * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ import de.neonew.exposed.migrations.helpers.SQLMigration -import org.jetbrains.exposed.v1.jdbc.transactions.TransactionManager +import suwayomi.tachidesk.server.database.migration.helpers.toSqlName @Suppress("ClassName", "unused") class M0023_CategoryMetaRefFix : SQLMigration() { - fun String.toSqlName(): String = - TransactionManager.defaultDatabase!!.identifierManager.let { - it.quoteIfNecessary( - it.inProperCase(this), - ) - } - private val CategoryMetaTable by lazy { "CategoryMeta".toSqlName() } private val CategoryRefColumn by lazy { "category_ref".toSqlName() } private val CategoryTable by lazy { "Category".toSqlName() } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0049_FixDuplicatedMetas.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0049_FixDuplicatedMetas.kt index a35ff941f..1916ddd1c 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0049_FixDuplicatedMetas.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0049_FixDuplicatedMetas.kt @@ -8,6 +8,7 @@ package suwayomi.tachidesk.server.database.migration * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ import de.neonew.exposed.migrations.helpers.SQLMigration +import suwayomi.tachidesk.server.database.migration.helpers.toSqlName @Suppress("ClassName", "unused") class M0049_FixDuplicatedMetas : SQLMigration() { @@ -15,7 +16,7 @@ class M0049_FixDuplicatedMetas : SQLMigration() { table: String, refColumn: String? = null, ): String { - val groupBy = listOfNotNull(refColumn, "KEY").joinToString(", ") + val groupBy = listOfNotNull(refColumn, "KEY".toSqlName()).joinToString(", ") return """ DELETE FROM $table @@ -30,10 +31,11 @@ class M0049_FixDuplicatedMetas : SQLMigration() { """.trimIndent() } - override val sql: String = + override val sql: String by lazy { createMigrationForTable("CATEGORYMETA", "CATEGORY_REF") + createMigrationForTable("CHAPTERMETA", "CHAPTER_REF") + createMigrationForTable("GLOBALMETA") + createMigrationForTable("MANGAMETA", "MANGA_REF") + createMigrationForTable("SOURCEMETA", "SOURCE_REF") + } } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0055_RenameMetaKeys.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0055_RenameMetaKeys.kt new file mode 100644 index 000000000..3e6d9f464 --- /dev/null +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0055_RenameMetaKeys.kt @@ -0,0 +1,38 @@ +package suwayomi.tachidesk.server.database.migration + +/* + * Copyright (C) Contributors to the Suwayomi project + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +import de.neonew.exposed.migrations.helpers.SQLMigration +import suwayomi.tachidesk.graphql.types.DatabaseType +import suwayomi.tachidesk.server.database.migration.helpers.toSqlName +import suwayomi.tachidesk.server.serverConfig + +@Suppress("ClassName", "unused") +class M0055_RenameMetaKeys : SQLMigration() { + fun postgresRename(table: String): String = + "ALTER TABLE $table " + + "RENAME COLUMN " + "KEY".toSqlName() + " TO META_KEY;" + + fun h2Rename(table: String): String = + "ALTER TABLE $table " + + "ALTER COLUMN " + "KEY".toSqlName() + " RENAME TO META_KEY;" + + fun createRenameMigration(table: String): String = + when (serverConfig.databaseType.value) { + DatabaseType.H2 -> h2Rename(table.toSqlName()) + DatabaseType.POSTGRESQL -> postgresRename(table.toSqlName()) + } + + override val sql: String by lazy { + createRenameMigration("CATEGORYMETA") + + createRenameMigration("CHAPTERMETA") + + createRenameMigration("GLOBALMETA") + + createRenameMigration("MANGAMETA") + + createRenameMigration("SOURCEMETA") + } +} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/helpers/RenameFieldMigration.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/helpers/RenameFieldMigration.kt index 45a50e666..6717e69ce 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/helpers/RenameFieldMigration.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/helpers/RenameFieldMigration.kt @@ -1,17 +1,9 @@ package suwayomi.tachidesk.server.database.migration.helpers import de.neonew.exposed.migrations.helpers.SQLMigration -import org.jetbrains.exposed.v1.jdbc.transactions.TransactionManager import suwayomi.tachidesk.graphql.types.DatabaseType import suwayomi.tachidesk.server.serverConfig -fun String.toSqlName(): String = - TransactionManager.current().db.identifierManager.let { - it.quoteIfNecessary( - it.inProperCase(this), - ) - } - abstract class RenameFieldMigration( tableName: String, originalName: String, diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/helpers/ToSqlName.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/helpers/ToSqlName.kt new file mode 100644 index 000000000..4e94f4388 --- /dev/null +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/helpers/ToSqlName.kt @@ -0,0 +1,10 @@ +package suwayomi.tachidesk.server.database.migration.helpers + +import org.jetbrains.exposed.v1.jdbc.transactions.TransactionManager + +fun String.toSqlName(): String = + TransactionManager.current().db.identifierManager.let { + it.quoteIfNecessary( + it.inProperCase(this), + ) + }