aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Server.Implementations/Item/FolderAwareFilterExtensions.cs
diff options
context:
space:
mode:
authorShadowghost <Ghost_of_Stone@web.de>2026-01-17 19:39:12 +0100
committerShadowghost <Ghost_of_Stone@web.de>2026-01-18 19:48:46 +0100
commit89427af41cdcad519bf865ee14278acf1ce1baed (patch)
treeea9bedf6384108441ed34cb9aa83bf19571feda2 /Jellyfin.Server.Implementations/Item/FolderAwareFilterExtensions.cs
parent5996c4afce11249804d24f1caa3a99b390543c4d (diff)
Fixes after rebase
Diffstat (limited to 'Jellyfin.Server.Implementations/Item/FolderAwareFilterExtensions.cs')
-rw-r--r--Jellyfin.Server.Implementations/Item/FolderAwareFilterExtensions.cs21
1 files changed, 7 insertions, 14 deletions
diff --git a/Jellyfin.Server.Implementations/Item/FolderAwareFilterExtensions.cs b/Jellyfin.Server.Implementations/Item/FolderAwareFilterExtensions.cs
index c63d99d54d..d7b2567f37 100644
--- a/Jellyfin.Server.Implementations/Item/FolderAwareFilterExtensions.cs
+++ b/Jellyfin.Server.Implementations/Item/FolderAwareFilterExtensions.cs
@@ -1,3 +1,5 @@
+#pragma warning disable RS0030 // Do not use banned APIs
+
using System;
using System.Linq;
using System.Linq.Expressions;
@@ -24,17 +26,13 @@ internal static class FolderAwareFilterExtensions
JellyfinDbContext context,
Expression<Func<BaseItemEntity, bool>> condition)
{
+ // Use correlated Any() subqueries instead of UNION + Contains for better index utilization
var matchingIds = context.BaseItems.Where(condition).Select(b => b.Id);
- var foldersWithMatchingDescendants = context.AncestorIds
- .Where(a => matchingIds.Contains(a.ItemId))
- .Select(a => a.ParentItemId)
- .Union(context.LinkedChildren
- .Where(lc => matchingIds.Contains(lc.ChildId))
- .Select(lc => lc.ParentId));
return query.Where(e =>
matchingIds.Contains(e.Id)
- || foldersWithMatchingDescendants.Contains(e.Id));
+ || context.AncestorIds.Any(a => a.ParentItemId == e.Id && matchingIds.Contains(a.ItemId))
+ || context.LinkedChildren.Any(lc => lc.ParentId == e.Id && matchingIds.Contains(lc.ChildId)));
}
/// <summary>
@@ -51,15 +49,10 @@ internal static class FolderAwareFilterExtensions
Expression<Func<BaseItemEntity, bool>> condition)
{
var matchingIds = context.BaseItems.Where(condition).Select(b => b.Id);
- var foldersWithMatchingDescendants = context.AncestorIds
- .Where(a => matchingIds.Contains(a.ItemId))
- .Select(a => a.ParentItemId)
- .Union(context.LinkedChildren
- .Where(lc => matchingIds.Contains(lc.ChildId))
- .Select(lc => lc.ParentId));
return query.Where(e =>
!matchingIds.Contains(e.Id)
- && !foldersWithMatchingDescendants.Contains(e.Id));
+ && !context.AncestorIds.Any(a => a.ParentItemId == e.Id && matchingIds.Contains(a.ItemId))
+ && !context.LinkedChildren.Any(lc => lc.ParentId == e.Id && matchingIds.Contains(lc.ChildId)));
}
}