using Dapper; using NzbDrone.Core.Datastore; namespace NzbDrone.Core.Housekeeping.Housekeepers { public class CleanupOrphanedHistoryItems : IHousekeepingTask { private readonly IMainDatabase _database; public CleanupOrphanedHistoryItems(IMainDatabase database) { _database = database; } public void Clean() { CleanupOrphanedByArtist(); CleanupOrphanedByAlbum(); } private void CleanupOrphanedByArtist() { using (var mapper = _database.OpenConnection()) { mapper.Execute(@"DELETE FROM History WHERE Id IN ( SELECT History.Id FROM History LEFT OUTER JOIN Artists ON History.ArtistId = Artists.Id WHERE Artists.Id IS NULL)"); } } private void CleanupOrphanedByAlbum() { using (var mapper = _database.OpenConnection()) { mapper.Execute(@"DELETE FROM History WHERE Id IN ( SELECT History.Id FROM History LEFT OUTER JOIN Albums ON History.AlbumId = Albums.Id WHERE Albums.Id IS NULL)"); } } } }