From 1468c434a7daeed2e4e99456fd1c5b077618757d Mon Sep 17 00:00:00 2001 From: krbrs <57227244+krbrs@users.noreply.github.com> Date: Fri, 13 Dec 2024 16:12:45 +0100 Subject: [PATCH 1/4] Update datetime to datetime2 on TMDB Tables for MSSQL --- Shoko.Server/Databases/SQLServer.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Shoko.Server/Databases/SQLServer.cs b/Shoko.Server/Databases/SQLServer.cs index bb6a97092..bcf7b2e47 100644 --- a/Shoko.Server/Databases/SQLServer.cs +++ b/Shoko.Server/Databases/SQLServer.cs @@ -28,7 +28,7 @@ namespace Shoko.Server.Databases; public class SQLServer : BaseDatabase { public override string Name { get; } = "SQLServer"; - public override int RequiredVersion { get; } = 137; + public override int RequiredVersion { get; } = 138; public override void BackupDatabase(string fullfilename) { @@ -794,6 +794,15 @@ public override bool HasVersionsTable() new DatabaseCommand(137, 3, "ALTER TABLE TMDB_Show ADD HiddenEpisodeCount int NOT NULL DEFAULT 0;"), new DatabaseCommand(137, 4, "ALTER TABLE TMDB_AlternateOrdering_Season ADD HiddenEpisodeCount int NOT NULL DEFAULT 0;"), new DatabaseCommand(137, 5, "ALTER TABLE TMDB_AlternateOrdering ADD HiddenEpisodeCount int NOT NULL DEFAULT 0;"), + new DatabaseCommand(138, 1, "ALTER TABLE TMDB_Person ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Person ALTER COLUMN LastUpdatedAt datetime2"), + new DatabaseCommand(138, 2, "ALTER TABLE TMDB_Movie ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Movie ALTER COLUMN LastUpdatedAt datetime2"), + new DatabaseCommand(138, 3, "ALTER TABLE TMDB_Show ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Show ALTER COLUMN LastUpdatedAt datetime2"), + new DatabaseCommand(138, 4, "ALTER TABLE TMDB_Season ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Season ALTER COLUMN LastUpdatedAt datetime2"), + new DatabaseCommand(138, 5, "ALTER TABLE TMDB_Episode ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Episode ALTER COLUMN LastUpdatedAt datetime2"), + new DatabaseCommand(138, 6, "ALTER TABLE TMDB_AlternateOrdering ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_AlternateOrdering ALTER COLUMN LastUpdatedAt datetime2"), + new DatabaseCommand(138, 7, "ALTER TABLE TMDB_AlternateOrdering_Season ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_AlternateOrdering_Season ALTER COLUMN LastUpdatedAt datetime2"), + new DatabaseCommand(138, 8, "ALTER TABLE TMDB_AlternateOrdering_Episode ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_AlternateOrdering_Episode ALTER COLUMN LastUpdatedAt datetime2"), + new DatabaseCommand(138, 9, "ALTER TABLE TMDB_Collection ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Collection ALTER COLUMN LastUpdatedAt datetime2"), }; private static void AlterImdbMovieIDType() From f25524341f8a8a2d700202533156220e34b05f66 Mon Sep 17 00:00:00 2001 From: krbrs <57227244+krbrs@users.noreply.github.com> Date: Fri, 13 Dec 2024 16:20:22 +0100 Subject: [PATCH 2/4] Add semicolon at the end --- Shoko.Server/Databases/SQLServer.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Shoko.Server/Databases/SQLServer.cs b/Shoko.Server/Databases/SQLServer.cs index bcf7b2e47..4f5a2b9c2 100644 --- a/Shoko.Server/Databases/SQLServer.cs +++ b/Shoko.Server/Databases/SQLServer.cs @@ -794,15 +794,15 @@ public override bool HasVersionsTable() new DatabaseCommand(137, 3, "ALTER TABLE TMDB_Show ADD HiddenEpisodeCount int NOT NULL DEFAULT 0;"), new DatabaseCommand(137, 4, "ALTER TABLE TMDB_AlternateOrdering_Season ADD HiddenEpisodeCount int NOT NULL DEFAULT 0;"), new DatabaseCommand(137, 5, "ALTER TABLE TMDB_AlternateOrdering ADD HiddenEpisodeCount int NOT NULL DEFAULT 0;"), - new DatabaseCommand(138, 1, "ALTER TABLE TMDB_Person ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Person ALTER COLUMN LastUpdatedAt datetime2"), - new DatabaseCommand(138, 2, "ALTER TABLE TMDB_Movie ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Movie ALTER COLUMN LastUpdatedAt datetime2"), - new DatabaseCommand(138, 3, "ALTER TABLE TMDB_Show ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Show ALTER COLUMN LastUpdatedAt datetime2"), - new DatabaseCommand(138, 4, "ALTER TABLE TMDB_Season ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Season ALTER COLUMN LastUpdatedAt datetime2"), - new DatabaseCommand(138, 5, "ALTER TABLE TMDB_Episode ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Episode ALTER COLUMN LastUpdatedAt datetime2"), - new DatabaseCommand(138, 6, "ALTER TABLE TMDB_AlternateOrdering ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_AlternateOrdering ALTER COLUMN LastUpdatedAt datetime2"), - new DatabaseCommand(138, 7, "ALTER TABLE TMDB_AlternateOrdering_Season ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_AlternateOrdering_Season ALTER COLUMN LastUpdatedAt datetime2"), - new DatabaseCommand(138, 8, "ALTER TABLE TMDB_AlternateOrdering_Episode ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_AlternateOrdering_Episode ALTER COLUMN LastUpdatedAt datetime2"), - new DatabaseCommand(138, 9, "ALTER TABLE TMDB_Collection ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Collection ALTER COLUMN LastUpdatedAt datetime2"), + new DatabaseCommand(138, 1, "ALTER TABLE TMDB_Person ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Person ALTER COLUMN LastUpdatedAt datetime2;"), + new DatabaseCommand(138, 2, "ALTER TABLE TMDB_Movie ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Movie ALTER COLUMN LastUpdatedAt datetime2;"), + new DatabaseCommand(138, 3, "ALTER TABLE TMDB_Show ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Show ALTER COLUMN LastUpdatedAt datetime2;"), + new DatabaseCommand(138, 4, "ALTER TABLE TMDB_Season ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Season ALTER COLUMN LastUpdatedAt datetime2;"), + new DatabaseCommand(138, 5, "ALTER TABLE TMDB_Episode ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Episode ALTER COLUMN LastUpdatedAt datetime2;"), + new DatabaseCommand(138, 6, "ALTER TABLE TMDB_AlternateOrdering ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_AlternateOrdering ALTER COLUMN LastUpdatedAt datetime2;"), + new DatabaseCommand(138, 7, "ALTER TABLE TMDB_AlternateOrdering_Season ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_AlternateOrdering_Season ALTER COLUMN LastUpdatedAt datetime2;"), + new DatabaseCommand(138, 8, "ALTER TABLE TMDB_AlternateOrdering_Episode ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_AlternateOrdering_Episode ALTER COLUMN LastUpdatedAt datetime2;"), + new DatabaseCommand(138, 9, "ALTER TABLE TMDB_Collection ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Collection ALTER COLUMN LastUpdatedAt datetime2;"), }; private static void AlterImdbMovieIDType() From e46b160b4e18a2054b02055298c0d9021564ab33 Mon Sep 17 00:00:00 2001 From: krbrs <57227244+krbrs@users.noreply.github.com> Date: Fri, 13 Dec 2024 17:04:05 +0100 Subject: [PATCH 3/4] Alter Column one by one so if one migration fails, it won't be stuck because the other succeeded --- Shoko.Server/Databases/SQLServer.cs | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/Shoko.Server/Databases/SQLServer.cs b/Shoko.Server/Databases/SQLServer.cs index 4f5a2b9c2..fd8b1c9be 100644 --- a/Shoko.Server/Databases/SQLServer.cs +++ b/Shoko.Server/Databases/SQLServer.cs @@ -794,15 +794,24 @@ public override bool HasVersionsTable() new DatabaseCommand(137, 3, "ALTER TABLE TMDB_Show ADD HiddenEpisodeCount int NOT NULL DEFAULT 0;"), new DatabaseCommand(137, 4, "ALTER TABLE TMDB_AlternateOrdering_Season ADD HiddenEpisodeCount int NOT NULL DEFAULT 0;"), new DatabaseCommand(137, 5, "ALTER TABLE TMDB_AlternateOrdering ADD HiddenEpisodeCount int NOT NULL DEFAULT 0;"), - new DatabaseCommand(138, 1, "ALTER TABLE TMDB_Person ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Person ALTER COLUMN LastUpdatedAt datetime2;"), - new DatabaseCommand(138, 2, "ALTER TABLE TMDB_Movie ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Movie ALTER COLUMN LastUpdatedAt datetime2;"), - new DatabaseCommand(138, 3, "ALTER TABLE TMDB_Show ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Show ALTER COLUMN LastUpdatedAt datetime2;"), - new DatabaseCommand(138, 4, "ALTER TABLE TMDB_Season ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Season ALTER COLUMN LastUpdatedAt datetime2;"), - new DatabaseCommand(138, 5, "ALTER TABLE TMDB_Episode ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Episode ALTER COLUMN LastUpdatedAt datetime2;"), - new DatabaseCommand(138, 6, "ALTER TABLE TMDB_AlternateOrdering ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_AlternateOrdering ALTER COLUMN LastUpdatedAt datetime2;"), - new DatabaseCommand(138, 7, "ALTER TABLE TMDB_AlternateOrdering_Season ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_AlternateOrdering_Season ALTER COLUMN LastUpdatedAt datetime2;"), - new DatabaseCommand(138, 8, "ALTER TABLE TMDB_AlternateOrdering_Episode ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_AlternateOrdering_Episode ALTER COLUMN LastUpdatedAt datetime2;"), - new DatabaseCommand(138, 9, "ALTER TABLE TMDB_Collection ALTER COLUMN CreatedAt datetime2; ALTER TABLE TMDB_Collection ALTER COLUMN LastUpdatedAt datetime2;"), + new DatabaseCommand(138, 1, "ALTER TABLE TMDB_Person ALTER COLUMN CreatedAt datetime2;"), + new DatabaseCommand(138, 2, "ALTER TABLE TMDB_Person ALTER COLUMN LastUpdatedAt datetime2;"), + new DatabaseCommand(138, 3, "ALTER TABLE TMDB_Movie ALTER COLUMN CreatedAt datetime2;"), + new DatabaseCommand(138, 4, "ALTER TABLE TMDB_Movie ALTER COLUMN LastUpdatedAt datetime2;"), + new DatabaseCommand(138, 5, "ALTER TABLE TMDB_Show ALTER COLUMN CreatedAt datetime2;"), + new DatabaseCommand(138, 6, "ALTER TABLE TMDB_Show ALTER COLUMN LastUpdatedAt datetime2;"), + new DatabaseCommand(138, 7, "ALTER TABLE TMDB_Season ALTER COLUMN CreatedAt datetime2;"), + new DatabaseCommand(138, 8, "ALTER TABLE TMDB_Season ALTER COLUMN LastUpdatedAt datetime2;"), + new DatabaseCommand(138, 9, "ALTER TABLE TMDB_Episode ALTER COLUMN CreatedAt datetime2;"), + new DatabaseCommand(138, 10, "ALTER TABLE TMDB_Episode ALTER COLUMN LastUpdatedAt datetime2;"), + new DatabaseCommand(138, 11, "ALTER TABLE TMDB_AlternateOrdering ALTER COLUMN CreatedAt datetime2;"), + new DatabaseCommand(138, 12, "ALTER TABLE TMDB_AlternateOrdering ALTER COLUMN LastUpdatedAt datetime2;"), + new DatabaseCommand(138, 13, "ALTER TABLE TMDB_AlternateOrdering_Season ALTER COLUMN CreatedAt datetime2;"), + new DatabaseCommand(138, 14, "ALTER TABLE TMDB_AlternateOrdering_Season ALTER COLUMN LastUpdatedAt datetime2;"), + new DatabaseCommand(138, 15, "ALTER TABLE TMDB_AlternateOrdering_Episode ALTER COLUMN CreatedAt datetime2;"), + new DatabaseCommand(138, 16, "ALTER TABLE TMDB_AlternateOrdering_Episode ALTER COLUMN LastUpdatedAt datetime2;"), + new DatabaseCommand(138, 17, "ALTER TABLE TMDB_Collection ALTER COLUMN CreatedAt datetime2;"), + new DatabaseCommand(138, 18, "ALTER TABLE TMDB_Collection ALTER COLUMN LastUpdatedAt datetime2;"), }; private static void AlterImdbMovieIDType() From 9eb6276826257f02ac47cd088893b4acd882e0d6 Mon Sep 17 00:00:00 2001 From: krbrs <57227244+krbrs@users.noreply.github.com> Date: Fri, 13 Dec 2024 22:06:54 +0100 Subject: [PATCH 4/4] Update AniDB_Creator LastUpdatedAt Drop default constraint and change datetime to datetime2 --- Shoko.Server/Databases/SQLServer.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Shoko.Server/Databases/SQLServer.cs b/Shoko.Server/Databases/SQLServer.cs index fd8b1c9be..911bad11a 100644 --- a/Shoko.Server/Databases/SQLServer.cs +++ b/Shoko.Server/Databases/SQLServer.cs @@ -812,6 +812,8 @@ public override bool HasVersionsTable() new DatabaseCommand(138, 16, "ALTER TABLE TMDB_AlternateOrdering_Episode ALTER COLUMN LastUpdatedAt datetime2;"), new DatabaseCommand(138, 17, "ALTER TABLE TMDB_Collection ALTER COLUMN CreatedAt datetime2;"), new DatabaseCommand(138, 18, "ALTER TABLE TMDB_Collection ALTER COLUMN LastUpdatedAt datetime2;"), + new DatabaseCommand(138, 19, DropDefaultOnCreatorLastUpdatedAt), + new DatabaseCommand(138, 20, "ALTER TABLE AniDB_Creator ALTER COLUMN LastUpdatedAt datetime2;"), }; private static void AlterImdbMovieIDType() @@ -1044,6 +1046,11 @@ SELECT column_id FROM sys.columns session.CreateSQLQuery(query).ExecuteUpdate(); trans.Commit(); } + private static Tuple DropDefaultOnCreatorLastUpdatedAt(object connection) + { + DropDefaultConstraint("AniDB_Creator", "LastUpdatedAt"); + return Tuple.Create(true, null); + } protected override Tuple ExecuteCommand(SqlConnection connection, string command) {