From 252cb62591e56f4dc4a717722de0d87ba9dbf715 Mon Sep 17 00:00:00 2001 From: Harshith Mohan <26010946+harshithmohan@users.noreply.github.com> Date: Fri, 10 Jan 2025 21:15:55 +0530 Subject: [PATCH] Fix duplicate-file SQL queries --- .../Cached/AnimeEpisodeRepository.cs | 50 +++++++++++-------- .../Cached/AnimeSeriesRepository.cs | 19 ++++--- 2 files changed, 39 insertions(+), 30 deletions(-) diff --git a/Shoko.Server/Repositories/Cached/AnimeEpisodeRepository.cs b/Shoko.Server/Repositories/Cached/AnimeEpisodeRepository.cs index 9316d79a1..2a6de772d 100644 --- a/Shoko.Server/Repositories/Cached/AnimeEpisodeRepository.cs +++ b/Shoko.Server/Repositories/Cached/AnimeEpisodeRepository.cs @@ -132,25 +132,28 @@ public IEnumerable GetWithMultipleReleases(bool ignoreVariatio FROM ( SELECT - vlp.VideoLocal_Place_ID, vl.FileSize, vl.Hash FROM VideoLocal AS vl - INNER JOIN - VideoLocal_Place AS vlp - ON vlp.VideoLocalID = vl.VideoLocalID WHERE + VideoLocalID IN ( + SELECT + VideoLocalID + FROM + VideoLocal_Place + GROUP BY + VideoLocalID + HAVING + COUNT(VideoLocal_Place_ID) > 1 + ) + AND vl.Hash != '' - GROUP BY - vl.VideoLocalID - HAVING - COUNT(vl.VideoLocalID) > 1 - ) AS filtered_vlp + ) AS vlp_selected INNER JOIN CrossRef_File_Episode ani - ON filtered_vlp.Hash = ani.Hash - AND filtered_vlp.FileSize = ani.FileSize + ON vlp_selected.Hash = ani.Hash + AND vlp_selected.FileSize = ani.FileSize WHERE ani.AnimeID = :animeID GROUP BY ani.EpisodeID @@ -162,25 +165,28 @@ GROUP BY FROM ( SELECT - vlp.VideoLocal_Place_ID, vl.FileSize, vl.Hash FROM VideoLocal AS vl - INNER JOIN - VideoLocal_Place AS vlp - ON vlp.VideoLocalID = vl.VideoLocalID WHERE + VideoLocalID IN ( + SELECT + VideoLocalID + FROM + VideoLocal_Place + GROUP BY + VideoLocalID + HAVING + COUNT(VideoLocal_Place_ID) > 1 + ) + AND vl.Hash != '' - GROUP BY - vl.VideoLocalID - HAVING - COUNT(vl.VideoLocalID) > 1 - ) AS filtered_vlp + ) AS vlp_selected INNER JOIN CrossRef_File_Episode ani - ON filtered_vlp.Hash = ani.Hash - AND filtered_vlp.FileSize = ani.FileSize + ON vlp_selected.Hash = ani.Hash + AND vlp_selected.FileSize = ani.FileSize GROUP BY ani.EpisodeID "; diff --git a/Shoko.Server/Repositories/Cached/AnimeSeriesRepository.cs b/Shoko.Server/Repositories/Cached/AnimeSeriesRepository.cs index 2cca0bcd6..2fc677560 100644 --- a/Shoko.Server/Repositories/Cached/AnimeSeriesRepository.cs +++ b/Shoko.Server/Repositories/Cached/AnimeSeriesRepository.cs @@ -348,20 +348,23 @@ SELECT DISTINCT FROM ( SELECT - vlp.VideoLocal_Place_ID, vl.FileSize, vl.Hash FROM VideoLocal AS vl - INNER JOIN - VideoLocal_Place AS vlp - ON vlp.VideoLocalID = vl.VideoLocalID WHERE + VideoLocalID IN ( + SELECT + VideoLocalID + FROM + VideoLocal_Place + GROUP BY + VideoLocalID + HAVING + COUNT(VideoLocal_Place_ID) > 1 + ) + AND vl.Hash != '' - GROUP BY - vl.VideoLocalID - HAVING - COUNT(vl.VideoLocalID) > 1 ) AS vlp_selected INNER JOIN CrossRef_File_Episode ani