diff options
Diffstat (limited to 'src/Jellyfin.Database/Jellyfin.Database.Implementations/IDescendantQueryProvider.cs')
| -rw-r--r-- | src/Jellyfin.Database/Jellyfin.Database.Implementations/IDescendantQueryProvider.cs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/Jellyfin.Database/Jellyfin.Database.Implementations/IDescendantQueryProvider.cs b/src/Jellyfin.Database/Jellyfin.Database.Implementations/IDescendantQueryProvider.cs new file mode 100644 index 0000000000..9e3d510b9c --- /dev/null +++ b/src/Jellyfin.Database/Jellyfin.Database.Implementations/IDescendantQueryProvider.cs @@ -0,0 +1,30 @@ +using System; +using System.Linq; +using Jellyfin.Database.Implementations.MatchCriteria; + +namespace Jellyfin.Database.Implementations; + +/// <summary> +/// Provider interface for descendant queries using recursive CTEs. +/// Each database provider implements this with provider-specific SQL. +/// </summary> +public interface IDescendantQueryProvider +{ + /// <summary> + /// Gets a queryable of all descendant IDs for a parent item. + /// Uses recursive CTE to traverse AncestorIds and LinkedChildren infinitely. + /// </summary> + /// <param name="context">Database context.</param> + /// <param name="parentId">Parent item ID.</param> + /// <returns>Queryable of descendant item IDs.</returns> + IQueryable<Guid> GetAllDescendantIds(JellyfinDbContext context, Guid parentId); + + /// <summary> + /// Gets a queryable of all folder IDs that have any descendant matching the specified criteria. + /// Uses recursive CTE for infinite depth traversal. Can be used in LINQ .Contains() expressions. + /// </summary> + /// <param name="context">Database context.</param> + /// <param name="criteria">The matching criteria to apply.</param> + /// <returns>Queryable of folder IDs.</returns> + IQueryable<Guid> GetFolderIdsMatching(JellyfinDbContext context, FolderMatchCriteria criteria); +} |
