11using System ;
22using System . Collections . Generic ;
3+ using System . ComponentModel . Design ;
34using BenchmarkDotNet . Attributes ;
45using JsonApiDotNetCore . Configuration ;
6+ using JsonApiDotNetCore . Internal ;
57using JsonApiDotNetCore . Internal . Contracts ;
6- using JsonApiDotNetCore . Managers ;
7- using JsonApiDotNetCore . Query ;
8- using JsonApiDotNetCore . QueryParameterServices . Common ;
9- using JsonApiDotNetCore . Services ;
8+ using JsonApiDotNetCore . Internal . QueryStrings ;
9+ using JsonApiDotNetCore . RequestServices ;
1010using Microsoft . AspNetCore . Http ;
1111using Microsoft . AspNetCore . WebUtilities ;
1212using Microsoft . Extensions . Logging . Abstractions ;
@@ -17,56 +17,59 @@ 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 currentRequest = new CurrentRequest
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 , currentRequest , options , _queryStringAccessor ) ;
38+ _queryStringReaderForAll = CreateQueryParameterDiscoveryForAll ( resourceGraph , currentRequest , options , _queryStringAccessor ) ;
3539 }
3640
37- private static QueryParameterParser CreateQueryParameterDiscoveryForSort ( IResourceGraph resourceGraph ,
38- CurrentRequest currentRequest , IResourceDefinitionProvider resourceDefinitionProvider ,
41+ private static QueryStringReader CreateQueryParameterDiscoveryForSort ( IResourceGraph resourceGraph ,
42+ CurrentRequest currentRequest ,
3943 IJsonApiOptions options , FakeRequestQueryStringAccessor queryStringAccessor )
4044 {
41- ISortService sortService = new SortService ( resourceDefinitionProvider , resourceGraph , currentRequest ) ;
42-
43- var queryServices = new List < IQueryParameterService >
45+ var sortReader = new SortQueryStringParameterReader ( currentRequest , resourceGraph ) ;
46+
47+ var readers = new List < IQueryStringParameterReader >
4448 {
45- sortService
49+ sortReader
4650 } ;
4751
48- return new QueryParameterParser ( options , queryStringAccessor , queryServices , NullLoggerFactory . Instance ) ;
52+ return new QueryStringReader ( options , queryStringAccessor , readers , NullLoggerFactory . Instance ) ;
4953 }
5054
51- private static QueryParameterParser CreateQueryParameterDiscoveryForAll ( IResourceGraph resourceGraph ,
52- CurrentRequest currentRequest , IResourceDefinitionProvider resourceDefinitionProvider ,
53- IJsonApiOptions options , FakeRequestQueryStringAccessor queryStringAccessor )
55+ private static QueryStringReader CreateQueryParameterDiscoveryForAll ( IResourceGraph resourceGraph ,
56+ CurrentRequest currentRequest , IJsonApiOptions options , FakeRequestQueryStringAccessor queryStringAccessor )
5457 {
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 >
58+ var resourceFactory = new ResourceFactory ( new ServiceContainer ( ) ) ;
59+
60+ var filterReader = new FilterQueryStringParameterReader ( currentRequest , resourceGraph , resourceFactory , options ) ;
61+ var sortReader = new SortQueryStringParameterReader ( currentRequest , resourceGraph ) ;
62+ var sparseFieldSetReader = new SparseFieldSetQueryStringParameterReader ( currentRequest , resourceGraph ) ;
63+ var paginationReader = new PaginationQueryStringParameterReader ( currentRequest , resourceGraph , options ) ;
64+ var defaultsReader = new DefaultsQueryStringParameterReader ( options ) ;
65+ var nullsReader = new NullsQueryStringParameterReader ( options ) ;
66+
67+ var readers = new List < IQueryStringParameterReader >
6468 {
65- includeService , filterService , sortService , sparseFieldsService , pageService , defaultsService ,
66- nullsService
69+ filterReader , sortReader , sparseFieldSetReader , paginationReader , defaultsReader , nullsReader
6770 } ;
6871
69- return new QueryParameterParser ( options , queryStringAccessor , queryServices , NullLoggerFactory . Instance ) ;
72+ return new QueryStringReader ( options , queryStringAccessor , readers , NullLoggerFactory . Instance ) ;
7073 }
7174
7275 [ Benchmark ]
@@ -75,7 +78,7 @@ public void AscendingSort()
7578 var queryString = $ "?sort={ BenchmarkResourcePublicNames . NameAttr } ";
7679
7780 _queryStringAccessor . SetQueryString ( queryString ) ;
78- _queryParameterParserForSort . Parse ( null ) ;
81+ _queryStringReaderForSort . ReadAll ( null ) ;
7982 }
8083
8184 [ Benchmark ]
@@ -84,7 +87,7 @@ public void DescendingSort()
8487 var queryString = $ "?sort=-{ BenchmarkResourcePublicNames . NameAttr } ";
8588
8689 _queryStringAccessor . SetQueryString ( queryString ) ;
87- _queryParameterParserForSort . Parse ( null ) ;
90+ _queryStringReaderForSort . ReadAll ( null ) ;
8891 }
8992
9093 [ Benchmark ]
@@ -93,7 +96,7 @@ public void ComplexQuery() => Run(100, () =>
9396 var queryString = $ "?filter[{ BenchmarkResourcePublicNames . NameAttr } ]=abc,eq:abc&sort=-{ BenchmarkResourcePublicNames . NameAttr } &include=child&page[size]=1&fields={ BenchmarkResourcePublicNames . NameAttr } ";
9497
9598 _queryStringAccessor . SetQueryString ( queryString ) ;
96- _queryParameterParserForAll . Parse ( null ) ;
99+ _queryStringReaderForAll . ReadAll ( null ) ;
97100 } ) ;
98101
99102 private void Run ( int iterations , Action action ) {
0 commit comments