From d6b4c4a9ed07cb3ba915022ba11eaf240dab9a10 Mon Sep 17 00:00:00 2001 From: ta264 Date: Wed, 13 Mar 2019 12:15:55 +0000 Subject: [PATCH] Partially recover databases for users for bad 023 migration (#670) --- .../028_clean_artistmetadata_table.cs | 55 +++++++++++++++++++ src/NzbDrone.Core/NzbDrone.Core.csproj | 3 +- 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/NzbDrone.Core/Datastore/Migration/028_clean_artistmetadata_table.cs diff --git a/src/NzbDrone.Core/Datastore/Migration/028_clean_artistmetadata_table.cs b/src/NzbDrone.Core/Datastore/Migration/028_clean_artistmetadata_table.cs new file mode 100644 index 000000000..51e835358 --- /dev/null +++ b/src/NzbDrone.Core/Datastore/Migration/028_clean_artistmetadata_table.cs @@ -0,0 +1,55 @@ +using FluentMigrator; +using NzbDrone.Core.Datastore.Migration.Framework; + +namespace NzbDrone.Core.Datastore.Migration +{ + [Migration(028)] + public class clean_artist_metadata_table : NzbDroneMigrationBase + { + protected override void MainDbUpgrade() + { + // Remove any artists linked to missing metadata + Execute.Sql(@"DELETE FROM Artists + WHERE Id in ( + SELECT Artists.Id from Artists + LEFT OUTER JOIN ArtistMetadata ON Artists.ArtistMetadataId = ArtistMetadata.Id + WHERE ArtistMetadata.Id IS NULL)"); + + // Remove any albums linked to missing metadata + Execute.Sql(@"DELETE FROM Albums + WHERE Id in ( + SELECT Albums.Id from Albums + LEFT OUTER JOIN ArtistMetadata ON Albums.ArtistMetadataId = ArtistMetadata.Id + WHERE ArtistMetadata.Id IS NULL)"); + + // Remove any album releases linked to albums that were deleted + Execute.Sql(@"DELETE FROM AlbumReleases + WHERE Id in ( + SELECT AlbumReleases.Id from AlbumReleases + LEFT OUTER JOIN Albums ON Albums.Id = AlbumReleases.AlbumId + WHERE Albums.Id IS NULL)"); + + // Remove any tracks linked to album releases that were deleted + Execute.Sql(@"DELETE FROM Tracks + WHERE Id in ( + SELECT Tracks.Id from Tracks + LEFT OUTER JOIN AlbumReleases ON Tracks.AlbumReleaseId = AlbumReleases.Id + WHERE AlbumReleases.Id IS NULL)"); + + // Remove any tracks linked to the original missing metadata + Execute.Sql(@"DELETE FROM Tracks + WHERE Id in ( + SELECT Tracks.Id from Tracks + LEFT OUTER JOIN ArtistMetadata ON Tracks.ArtistMetadataId = ArtistMetadata.Id + WHERE ArtistMetadata.Id IS NULL)"); + + // Remove any trackfiles linked to the deleted tracks + Execute.Sql(@"DELETE FROM TrackFiles + WHERE Id IN ( + SELECT TrackFiles.Id FROM TrackFiles + LEFT OUTER JOIN Tracks + ON TrackFiles.Id = Tracks.TrackFileId + WHERE Tracks.Id IS NULL)"); + } + } +} diff --git a/src/NzbDrone.Core/NzbDrone.Core.csproj b/src/NzbDrone.Core/NzbDrone.Core.csproj index 3a85b3ef5..656cef105 100644 --- a/src/NzbDrone.Core/NzbDrone.Core.csproj +++ b/src/NzbDrone.Core/NzbDrone.Core.csproj @@ -201,6 +201,7 @@ + @@ -1308,4 +1309,4 @@ --> - \ No newline at end of file +