aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShadowghost <Ghost_of_Stone@web.de>2026-08-07 07:23:50 +0200
committerShadowghost <Ghost_of_Stone@web.de>2026-08-07 07:23:50 +0200
commit9162c178346421275a7d1fc4d2a7b6c3169dbff5 (patch)
tree1374656f35968468fc88892433a3ff2912b3dd2d /src
parent5b3da3bcd754ab21ae777623a1dfa611b70a9f67 (diff)
Apply review suggestions
Diffstat (limited to 'src')
-rw-r--r--src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinQueryHelperExtensions.cs20
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);