From 770c35ddc1066d4315f6c33dc78c536b25f0e7b6 Mon Sep 17 00:00:00 2001 From: PascalSenn Date: Sat, 21 Nov 2020 21:39:46 +0100 Subject: [PATCH] fixed nested projections of filtering and sorting (#2633) --- .../Expressions/Interceptor/QueryableFilterInterceptor.cs | 4 +++- .../Expressions/Interceptor/QueryableSortInterceptor.cs | 4 +++- .../Data/src/Data/Sorting/Visitor/SortVisitorBase`2.cs | 3 ++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/HotChocolate/Data/src/Data/Projections/Expressions/Interceptor/QueryableFilterInterceptor.cs b/src/HotChocolate/Data/src/Data/Projections/Expressions/Interceptor/QueryableFilterInterceptor.cs index 2ed5dc07822..de9c10b9c4b 100644 --- a/src/HotChocolate/Data/src/Data/Projections/Expressions/Interceptor/QueryableFilterInterceptor.cs +++ b/src/HotChocolate/Data/src/Data/Projections/Expressions/Interceptor/QueryableFilterInterceptor.cs @@ -7,6 +7,7 @@ using HotChocolate.Data.Projections.Expressions; using HotChocolate.Data.Projections.Expressions.Handlers; using HotChocolate.Execution.Processing; +using HotChocolate.Language; using HotChocolate.Types; using static HotChocolate.Data.ErrorHelper; using static HotChocolate.Data.Filters.Expressions.QueryableFilterProvider; @@ -40,7 +41,8 @@ public class QueryableFilterInterceptor out IReadOnlyDictionary? coercedArgs) && coercedArgs.TryGetValue(argumentName, out var argumentValue) && argumentValue.Argument.Type is IFilterInputType filterInputType && - argumentValue.ValueLiteral is {} valueNode) + argumentValue.ValueLiteral is {} valueNode && + valueNode is not NullValueNode) { QueryableFilterContext filterContext = argumentVisitor(valueNode, filterInputType, false); diff --git a/src/HotChocolate/Data/src/Data/Projections/Expressions/Interceptor/QueryableSortInterceptor.cs b/src/HotChocolate/Data/src/Data/Projections/Expressions/Interceptor/QueryableSortInterceptor.cs index 3e7ecaa98e8..dd03ffa0278 100644 --- a/src/HotChocolate/Data/src/Data/Projections/Expressions/Interceptor/QueryableSortInterceptor.cs +++ b/src/HotChocolate/Data/src/Data/Projections/Expressions/Interceptor/QueryableSortInterceptor.cs @@ -6,6 +6,7 @@ using HotChocolate.Data.Sorting; using HotChocolate.Data.Sorting.Expressions; using HotChocolate.Execution.Processing; +using HotChocolate.Language; using HotChocolate.Types; using static HotChocolate.Data.ErrorHelper; using static HotChocolate.Data.Sorting.Expressions.QueryableSortProvider; @@ -41,7 +42,8 @@ public class QueryableSortInterceptor argumentValue.Argument.Type is ListType lt && lt.ElementType is NonNullType nn && nn.NamedType() is ISortInputType sortInputType && - argumentValue.ValueLiteral is {} valueNode) + argumentValue.ValueLiteral is {} valueNode && + valueNode is not NullValueNode) { QueryableSortContext sortContext = argumentVisitor(valueNode, sortInputType, false); diff --git a/src/HotChocolate/Data/src/Data/Sorting/Visitor/SortVisitorBase`2.cs b/src/HotChocolate/Data/src/Data/Sorting/Visitor/SortVisitorBase`2.cs index 93fde2752da..ea0b37e3513 100644 --- a/src/HotChocolate/Data/src/Data/Sorting/Visitor/SortVisitorBase`2.cs +++ b/src/HotChocolate/Data/src/Data/Sorting/Visitor/SortVisitorBase`2.cs @@ -46,7 +46,8 @@ protected override ISyntaxVisitorAction Enter(IValueNode node, TContext context) { base.Enter(node, context); - if (context.Fields.Peek() is ISortField field && + if (node is not NullValueNode && + context.Fields.Peek() is ISortField field && field.Type is SortEnumType sortType && node is EnumValueNode enumValueNode) {