diff options
| author | Shadowghost <Ghost_of_Stone@web.de> | 2026-08-07 07:23:50 +0200 |
|---|---|---|
| committer | Shadowghost <Ghost_of_Stone@web.de> | 2026-08-07 07:23:50 +0200 |
| commit | 9162c178346421275a7d1fc4d2a7b6c3169dbff5 (patch) | |
| tree | 1374656f35968468fc88892433a3ff2912b3dd2d /src | |
| parent | 5b3da3bcd754ab21ae777623a1dfa611b70a9f67 (diff) | |
Apply review suggestions
Diffstat (limited to 'src')
| -rw-r--r-- | src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinQueryHelperExtensions.cs | 20 |
1 files changed, 8 insertions, 12 deletions
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<Type, MethodInfo> _containsQueryCache = new(); + private static readonly ConcurrentDictionary<Type, MethodInfo> _efParameterCache = new(); /// <summary> /// 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<Func<TEntity, bool>>( @@ -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)); + } + /// <summary> /// Builds a query that checks referenced ItemValues for a cross BaseItem lookup. /// </summary> @@ -246,16 +252,6 @@ public static class JellyfinQueryHelperExtensions IReadOnlyList<string> existenceOnly, IReadOnlyList<string> specificValues) { - if (specificValues.Count == 0) - { - return existenceOnly.OneOrManyExpressionBuilder<BaseItemProvider, string>(p => p.ProviderId); - } - - if (existenceOnly.Count == 0) - { - return specificValues.OneOrManyExpressionBuilder<BaseItemProvider, string>(p => p.ProviderId + ":" + p.ProviderValue); - } - var byProvider = existenceOnly.OneOrManyExpressionBuilder<BaseItemProvider, string>(p => p.ProviderId); var byPair = specificValues.OneOrManyExpressionBuilder<BaseItemProvider, string>(p => p.ProviderId + ":" + p.ProviderValue); |
