From 9162c178346421275a7d1fc4d2a7b6c3169dbff5 Mon Sep 17 00:00:00 2001 From: Shadowghost Date: Fri, 7 Aug 2026 07:23:50 +0200 Subject: Apply review suggestions --- .../JellyfinQueryHelperExtensions.cs | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinQueryHelperExtensions.cs b/src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinQueryHelperExtensions.cs index 5602ae2052..0dfce732ce 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinQueryHelperExtensions.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinQueryHelperExtensions.cs @@ -24,6 +24,7 @@ public static class JellyfinQueryHelperExtensions private static readonly MethodInfo _containsMethodGenericCache = typeof(Enumerable).GetMethods(BindingFlags.Public | BindingFlags.Static).First(m => m.Name == nameof(Enumerable.Contains) && m.GetParameters().Length == 2); private static readonly MethodInfo _efParameterInstruction = typeof(EF).GetMethod(nameof(EF.Parameter), BindingFlags.Public | BindingFlags.Static)!; private static readonly ConcurrentDictionary _containsQueryCache = new(); + private static readonly ConcurrentDictionary _efParameterCache = new(); /// /// Builds an optimised query checking one property against a list of values while maintaining an optimal query. @@ -65,7 +66,7 @@ public static class JellyfinQueryHelperExtensions { var value = Expression.Call( null, - _efParameterInstruction.MakeGenericMethod(typeof(TProperty)), + EfParameterFor(typeof(TProperty)), Expression.Constant(oneOf[0], typeof(TProperty))); return Expression.Lambda>( @@ -83,11 +84,16 @@ public static class JellyfinQueryHelperExtensions Expression.Call( null, containsMethodInfo, - Expression.Call(null, _efParameterInstruction.MakeGenericMethod(oneOf.GetType()), Expression.Constant(oneOf)), + Expression.Call(null, EfParameterFor(oneOf.GetType()), Expression.Constant(oneOf)), property.Body), parameter); } + private static MethodInfo EfParameterFor(Type type) + { + return _efParameterCache.GetOrAdd(type, static (key) => _efParameterInstruction.MakeGenericMethod(key)); + } + /// /// Builds a query that checks referenced ItemValues for a cross BaseItem lookup. /// @@ -246,16 +252,6 @@ public static class JellyfinQueryHelperExtensions IReadOnlyList existenceOnly, IReadOnlyList specificValues) { - if (specificValues.Count == 0) - { - return existenceOnly.OneOrManyExpressionBuilder(p => p.ProviderId); - } - - if (existenceOnly.Count == 0) - { - return specificValues.OneOrManyExpressionBuilder(p => p.ProviderId + ":" + p.ProviderValue); - } - var byProvider = existenceOnly.OneOrManyExpressionBuilder(p => p.ProviderId); var byPair = specificValues.OneOrManyExpressionBuilder(p => p.ProviderId + ":" + p.ProviderValue); -- cgit v1.2.3