diff --git a/src/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupOrphanedImportListMoviesFixture.cs b/src/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupOrphanedImportListMoviesFixture.cs index 0e7f87440..bb9ded93a 100644 --- a/src/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupOrphanedImportListMoviesFixture.cs +++ b/src/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupOrphanedImportListMoviesFixture.cs @@ -4,6 +4,7 @@ using NzbDrone.Core.Housekeeping.Housekeepers; using NzbDrone.Core.ImportLists; using NzbDrone.Core.ImportLists.ImportListMovies; +using NzbDrone.Core.Movies; using NzbDrone.Core.Test.Framework; namespace NzbDrone.Core.Test.Housekeeping.Housekeepers @@ -42,8 +43,13 @@ public void should_not_delete_unorphaned_importlistmovies() { GivenImportList(); + var movieMetadata = Builder.CreateNew().BuildNew(); + + Db.Insert(movieMetadata); + var status = Builder.CreateNew() .With(h => h.ListId = _importList.Id) + .With(b => b.MovieMetadataId = movieMetadata.Id) .BuildNew(); Db.Insert(status); diff --git a/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedImportListMovies.cs b/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedImportListMovies.cs index baf211c8a..5ee800e93 100644 --- a/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedImportListMovies.cs +++ b/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedImportListMovies.cs @@ -13,15 +13,33 @@ public CleanupOrphanedImportListMovies(IMainDatabase database) } public void Clean() + { + CleanupOrphanedByImportLists(); + CleanupOrphanedByMovieMetadata(); + } + + private void CleanupOrphanedByImportLists() { using var mapper = _database.OpenConnection(); mapper.Execute(@"DELETE FROM ""ImportListMovies"" - WHERE ""Id"" IN ( - SELECT ""ImportListMovies"".""Id"" FROM ""ImportListMovies"" - LEFT OUTER JOIN ""ImportLists"" - ON ""ImportListMovies"".""ListId"" = ""ImportLists"".""Id"" - WHERE ""ImportLists"".""Id"" IS NULL)"); + WHERE ""Id"" IN ( + SELECT ""ImportListMovies"".""Id"" + FROM ""ImportListMovies"" + LEFT OUTER JOIN ""ImportLists"" ON ""ImportListMovies"".""ListId"" = ""ImportLists"".""Id"" + WHERE ""ImportLists"".""Id"" IS NULL)"); + } + + private void CleanupOrphanedByMovieMetadata() + { + using var mapper = _database.OpenConnection(); + + mapper.Execute(@"DELETE FROM ""ImportListMovies"" + WHERE ""Id"" IN ( + SELECT ""ImportListMovies"".""Id"" + FROM ""ImportListMovies"" + LEFT OUTER JOIN ""MovieMetadata"" ON ""ImportListMovies"".""MovieMetadataId"" = ""MovieMetadata"".""Id"" + WHERE ""MovieMetadata"".""Id"" IS NULL)"); } } }