From 9ad316a6f5efc7e26b794d7beaf1e1a7ec4df7fe Mon Sep 17 00:00:00 2001 From: Robin Dadswell <19610103+RobinDadswell@users.noreply.github.com> Date: Sat, 23 Apr 2022 21:26:13 +0100 Subject: [PATCH] Fix metadata migration --- .../Migration/207_movie_metadataFixture.cs | 42 +++++++++++++++++++ .../Datastore/Migration/207_movie_metadata.cs | 2 +- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core.Test/Datastore/Migration/207_movie_metadataFixture.cs b/src/NzbDrone.Core.Test/Datastore/Migration/207_movie_metadataFixture.cs index 26c229dc8..d50704407 100644 --- a/src/NzbDrone.Core.Test/Datastore/Migration/207_movie_metadataFixture.cs +++ b/src/NzbDrone.Core.Test/Datastore/Migration/207_movie_metadataFixture.cs @@ -285,6 +285,48 @@ namespace NzbDrone.Core.Test.Datastore.Migration listMovies.Should().HaveCount(1); listMovies.First().MovieMetadataId.Should().Be(metadata.First().Id); } + + [Test] + public void should_not_duplicate_metadata_from_lists() + { + var db = WithMigrationTestDb(c => + { + c.Insert.IntoTable("ImportListMovies").Row(new + { + Title = "Title", + Status = 3, + Images = new[] { new { CoverType = "Poster" } }.ToJson(), + Runtime = 90, + TmdbId = 123456, + ListId = 4, + Translations = new[] { new { } }.ToJson(), + Collection = new { Name = "Some Collection", TmdbId = 11 }.ToJson(), + }); + + c.Insert.IntoTable("ImportListMovies").Row(new + { + Title = "Title", + Status = 3, + Images = new[] { new { CoverType = "Poster" } }.ToJson(), + Runtime = 90, + TmdbId = 123456, + ListId = 5, + Translations = new[] { new { } }.ToJson(), + Collection = new { Name = "Some Collection", TmdbId = 11 }.ToJson(), + }); + }); + + var metadata = db.Query("SELECT \"Id\", \"Title\", \"TmdbId\" FROM \"MovieMetadata\""); + + metadata.Should().HaveCount(1); + metadata.First().TmdbId.Should().Be(123456); + metadata.First().Title.Should().Be("Title"); + + var listMovies = db.Query("SELECT \"Id\", \"MovieMetadataId\" FROM \"ImportListMovies\""); + + listMovies.Should().HaveCount(2); + listMovies.First().MovieMetadataId.Should().Be(metadata.First().Id); + } } public class MovieMetadata207 diff --git a/src/NzbDrone.Core/Datastore/Migration/207_movie_metadata.cs b/src/NzbDrone.Core/Datastore/Migration/207_movie_metadata.cs index e15bb2e87..fd79ae5e8 100644 --- a/src/NzbDrone.Core/Datastore/Migration/207_movie_metadata.cs +++ b/src/NzbDrone.Core/Datastore/Migration/207_movie_metadata.cs @@ -44,7 +44,7 @@ namespace NzbDrone.Core.Datastore.Migration // Transfer metadata from ImportListMovies to MovieMetadata if not already in Execute.Sql(@"INSERT INTO ""MovieMetadata"" (""TmdbId"", ""ImdbId"", ""Title"", ""SortTitle"", ""CleanTitle"", ""OriginalTitle"", ""CleanOriginalTitle"", ""OriginalLanguage"", ""Overview"", ""Status"", ""LastInfoSync"", ""Images"", ""Genres"", ""Ratings"", ""Runtime"", ""InCinemas"", ""PhysicalRelease"", ""DigitalRelease"", ""Year"", ""Recommendations"", ""Certification"", ""YouTubeTrailerId"", ""Studio"", ""Collection"", ""Website"") - SELECT ""TmdbId"", ""ImdbId"", ""Title"", ""SortTitle"", ""Title"", ""OriginalTitle"", ""OriginalTitle"", 1, ""Overview"", ""Status"", ""LastInfoSync"", ""Images"", ""Genres"", ""Ratings"", ""Runtime"", ""InCinemas"", ""PhysicalRelease"", ""DigitalRelease"", ""Year"", '[]', ""Certification"", ""YouTubeTrailerId"", ""Studio"", ""Collection"", ""Website"" + SELECT DISTINCT ""TmdbId"", ""ImdbId"", ""Title"", ""SortTitle"", ""Title"", ""OriginalTitle"", ""OriginalTitle"", 1, ""Overview"", ""Status"", ""LastInfoSync"", ""Images"", ""Genres"", ""Ratings"", ""Runtime"", ""InCinemas"", ""PhysicalRelease"", ""DigitalRelease"", ""Year"", '[]', ""Certification"", ""YouTubeTrailerId"", ""Studio"", ""Collection"", ""Website"" FROM ""ImportListMovies"" WHERE ""ImportListMovies"".""TmdbId"" NOT IN ( SELECT ""MovieMetadata"".""TmdbId"" FROM ""MovieMetadata"" )");