11using System ;
22using System . Collections . Generic ;
3+ using System . ComponentModel . Design ;
34using BenchmarkDotNet . Attributes ;
45using JsonApiDotNetCore . Configuration ;
5- using JsonApiDotNetCore . Internal . Contracts ;
6- using JsonApiDotNetCore . Managers ;
7- using JsonApiDotNetCore . Query ;
8- using JsonApiDotNetCore . QueryParameterServices . Common ;
9- using JsonApiDotNetCore . Services ;
6+ using JsonApiDotNetCore . Middleware ;
7+ using JsonApiDotNetCore . QueryStrings ;
8+ using JsonApiDotNetCore . QueryStrings . Internal ;
9+ using JsonApiDotNetCore . Resources ;
1010using Microsoft . AspNetCore . Http ;
1111using Microsoft . AspNetCore . WebUtilities ;
1212using Microsoft . Extensions . Logging . Abstractions ;
@@ -17,56 +17,58 @@ namespace Benchmarks.Query
1717 public class QueryParserBenchmarks
1818 {
1919 private readonly FakeRequestQueryStringAccessor _queryStringAccessor = new FakeRequestQueryStringAccessor ( ) ;
20- private readonly QueryParameterParser _queryParameterParserForSort ;
21- private readonly QueryParameterParser _queryParameterParserForAll ;
20+ private readonly QueryStringReader _queryStringReaderForSort ;
21+ private readonly QueryStringReader _queryStringReaderForAll ;
2222
2323 public QueryParserBenchmarks ( )
2424 {
25- IJsonApiOptions options = new JsonApiOptions ( ) ;
25+ IJsonApiOptions options = new JsonApiOptions
26+ {
27+ EnableLegacyFilterNotation = true
28+ } ;
29+
2630 IResourceGraph resourceGraph = DependencyFactory . CreateResourceGraph ( options ) ;
27-
28- var currentRequest = new CurrentRequest ( ) ;
29- currentRequest . SetRequestResource ( resourceGraph . GetResourceContext ( typeof ( BenchmarkResource ) ) ) ;
3031
31- IResourceDefinitionProvider resourceDefinitionProvider = DependencyFactory . CreateResourceDefinitionProvider ( resourceGraph ) ;
32+ var request = new JsonApiRequest
33+ {
34+ PrimaryResource = resourceGraph . GetResourceContext ( typeof ( BenchmarkResource ) )
35+ } ;
3236
33- _queryParameterParserForSort = CreateQueryParameterDiscoveryForSort ( resourceGraph , currentRequest , resourceDefinitionProvider , options , _queryStringAccessor ) ;
34- _queryParameterParserForAll = CreateQueryParameterDiscoveryForAll ( resourceGraph , currentRequest , resourceDefinitionProvider , options , _queryStringAccessor ) ;
37+ _queryStringReaderForSort = CreateQueryParameterDiscoveryForSort ( resourceGraph , request , options , _queryStringAccessor ) ;
38+ _queryStringReaderForAll = CreateQueryParameterDiscoveryForAll ( resourceGraph , request , options , _queryStringAccessor ) ;
3539 }
3640
37- private static QueryParameterParser CreateQueryParameterDiscoveryForSort ( IResourceGraph resourceGraph ,
38- CurrentRequest currentRequest , IResourceDefinitionProvider resourceDefinitionProvider ,
39- IJsonApiOptions options , FakeRequestQueryStringAccessor queryStringAccessor )
41+ private static QueryStringReader CreateQueryParameterDiscoveryForSort ( IResourceGraph resourceGraph ,
42+ JsonApiRequest request , IJsonApiOptions options , FakeRequestQueryStringAccessor queryStringAccessor )
4043 {
41- ISortService sortService = new SortService ( resourceDefinitionProvider , resourceGraph , currentRequest ) ;
42-
43- var queryServices = new List < IQueryParameterService >
44+ var sortReader = new SortQueryStringParameterReader ( request , resourceGraph ) ;
45+
46+ var readers = new List < IQueryStringParameterReader >
4447 {
45- sortService
48+ sortReader
4649 } ;
4750
48- return new QueryParameterParser ( options , queryStringAccessor , queryServices , NullLoggerFactory . Instance ) ;
51+ return new QueryStringReader ( options , queryStringAccessor , readers , NullLoggerFactory . Instance ) ;
4952 }
5053
51- private static QueryParameterParser CreateQueryParameterDiscoveryForAll ( IResourceGraph resourceGraph ,
52- CurrentRequest currentRequest , IResourceDefinitionProvider resourceDefinitionProvider ,
53- IJsonApiOptions options , FakeRequestQueryStringAccessor queryStringAccessor )
54+ private static QueryStringReader CreateQueryParameterDiscoveryForAll ( IResourceGraph resourceGraph ,
55+ JsonApiRequest request , IJsonApiOptions options , FakeRequestQueryStringAccessor queryStringAccessor )
5456 {
55- IIncludeService includeService = new IncludeService ( resourceGraph , currentRequest ) ;
56- IFilterService filterService = new FilterService ( resourceDefinitionProvider , resourceGraph , currentRequest ) ;
57- ISortService sortService = new SortService ( resourceDefinitionProvider , resourceGraph , currentRequest ) ;
58- ISparseFieldsService sparseFieldsService = new SparseFieldsService ( resourceGraph , currentRequest ) ;
59- IPageService pageService = new PageService ( options , resourceGraph , currentRequest ) ;
60- IDefaultsService defaultsService = new DefaultsService ( options ) ;
61- INullsService nullsService = new NullsService ( options ) ;
62-
63- var queryServices = new List < IQueryParameterService >
57+ var resourceFactory = new ResourceFactory ( new ServiceContainer ( ) ) ;
58+
59+ var filterReader = new FilterQueryStringParameterReader ( request , resourceGraph , resourceFactory , options ) ;
60+ var sortReader = new SortQueryStringParameterReader ( request , resourceGraph ) ;
61+ var sparseFieldSetReader = new SparseFieldSetQueryStringParameterReader ( request , resourceGraph ) ;
62+ var paginationReader = new PaginationQueryStringParameterReader ( request , resourceGraph , options ) ;
63+ var defaultsReader = new DefaultsQueryStringParameterReader ( options ) ;
64+ var nullsReader = new NullsQueryStringParameterReader ( options ) ;
65+
66+ var readers = new List < IQueryStringParameterReader >
6467 {
65- includeService , filterService , sortService , sparseFieldsService , pageService , defaultsService ,
66- nullsService
68+ filterReader , sortReader , sparseFieldSetReader , paginationReader , defaultsReader , nullsReader
6769 } ;
6870
69- return new QueryParameterParser ( options , queryStringAccessor , queryServices , NullLoggerFactory . Instance ) ;
71+ return new QueryStringReader ( options , queryStringAccessor , readers , NullLoggerFactory . Instance ) ;
7072 }
7173
7274 [ Benchmark ]
@@ -75,7 +77,7 @@ public void AscendingSort()
7577 var queryString = $ "?sort={ BenchmarkResourcePublicNames . NameAttr } ";
7678
7779 _queryStringAccessor . SetQueryString ( queryString ) ;
78- _queryParameterParserForSort . Parse ( null ) ;
80+ _queryStringReaderForSort . ReadAll ( null ) ;
7981 }
8082
8183 [ Benchmark ]
@@ -84,7 +86,7 @@ public void DescendingSort()
8486 var queryString = $ "?sort=-{ BenchmarkResourcePublicNames . NameAttr } ";
8587
8688 _queryStringAccessor . SetQueryString ( queryString ) ;
87- _queryParameterParserForSort . Parse ( null ) ;
89+ _queryStringReaderForSort . ReadAll ( null ) ;
8890 }
8991
9092 [ Benchmark ]
@@ -93,7 +95,7 @@ public void ComplexQuery() => Run(100, () =>
9395 var queryString = $ "?filter[{ BenchmarkResourcePublicNames . NameAttr } ]=abc,eq:abc&sort=-{ BenchmarkResourcePublicNames . NameAttr } &include=child&page[size]=1&fields={ BenchmarkResourcePublicNames . NameAttr } ";
9496
9597 _queryStringAccessor . SetQueryString ( queryString ) ;
96- _queryParameterParserForAll . Parse ( null ) ;
98+ _queryStringReaderForAll . ReadAll ( null ) ;
9799 } ) ;
98100
99101 private void Run ( int iterations , Action action ) {
0 commit comments