From 7784f9dd1ff4c8079bb92cd7594aad75fdac58f3 Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Wed, 19 Feb 2020 14:23:54 +0100 Subject: [PATCH 1/2] Fixed inefficient cache usage. By turning constant expressions (whose value comes from query string) into parameters, the parsed query can be reused for varying query string parameters. --- .../Extensions/IQueryableExtensions.cs | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/src/JsonApiDotNetCore/Extensions/IQueryableExtensions.cs b/src/JsonApiDotNetCore/Extensions/IQueryableExtensions.cs index 2f66d34837..c52fc88bbc 100644 --- a/src/JsonApiDotNetCore/Extensions/IQueryableExtensions.cs +++ b/src/JsonApiDotNetCore/Extensions/IQueryableExtensions.cs @@ -247,7 +247,7 @@ private static IQueryable CallGenericWhereMethod(IQueryable CallGenericWhereMethod(IQueryable 1 var convertedValue = TypeHelper.ConvertType(filter.Value, property.PropertyType); - // {1} - right = Expression.Constant(convertedValue, property.PropertyType); + + right = CreateTupleAccessForConstantExpression(convertedValue, property.PropertyType); } var body = GetFilterExpressionLambda(left, right, filter.Operation); @@ -302,6 +302,31 @@ private static IQueryable CallGenericWhereMethod(IQueryable(value)), "Item1") + // Which represents the next C# code: + // Tuple.Create(value).Item1; + + MethodInfo tupleCreateMethod = typeof(Tuple).GetMethods() + .Single(m => m.Name == "Create" && m.IsGenericMethod && m.GetGenericArguments().Length == 1); + MethodInfo constructedTupleCreateMethod = tupleCreateMethod.MakeGenericMethod(type); + + ConstantExpression constantExpression = Expression.Constant(value, type); + + MethodCallExpression tupleCreateCall = Expression.Call(constructedTupleCreateMethod, constantExpression); + return Expression.Property(tupleCreateCall, "Item1"); + } + private static IQueryable CallGenericSelectMethod(IQueryable source, List columns) { var sourceBindings = new List(); From 70b34f6a93c6bcad3b674be5568f571d6053c103 Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Wed, 19 Feb 2020 17:05:59 +0100 Subject: [PATCH 2/2] Empty commit to restart timed-out Travis build