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 . QueryStrings ;
10+ using JsonApiDotNetCore . RequestServices ;
1011using Microsoft . AspNetCore . Http ;
1112using Microsoft . AspNetCore . WebUtilities ;
1213using Microsoft . Extensions . Logging . Abstractions ;
@@ -17,56 +18,59 @@ namespace Benchmarks.Query
1718 public class QueryParserBenchmarks
1819 {
1920 private readonly FakeRequestQueryStringAccessor _queryStringAccessor = new FakeRequestQueryStringAccessor ( ) ;
20- private readonly QueryParameterParser _queryParameterParserForSort ;
21- private readonly QueryParameterParser _queryParameterParserForAll ;
21+ private readonly QueryStringReader _queryStringReaderForSort ;
22+ private readonly QueryStringReader _queryStringReaderForAll ;
2223
2324 public QueryParserBenchmarks ( )
2425 {
25- IJsonApiOptions options = new JsonApiOptions ( ) ;
26+ IJsonApiOptions options = new JsonApiOptions
27+ {
28+ EnableLegacyFilterNotation = true
29+ } ;
30+
2631 IResourceGraph resourceGraph = DependencyFactory . CreateResourceGraph ( options ) ;
27-
28- var currentRequest = new CurrentRequest ( ) ;
29- currentRequest . SetRequestResource ( resourceGraph . GetResourceContext ( typeof ( BenchmarkResource ) ) ) ;
3032
31- IResourceDefinitionProvider resourceDefinitionProvider = DependencyFactory . CreateResourceDefinitionProvider ( resourceGraph ) ;
33+ var currentRequest = new CurrentRequest
34+ {
35+ PrimaryResource = resourceGraph . GetResourceContext ( typeof ( BenchmarkResource ) )
36+ } ;
3237
33- _queryParameterParserForSort = CreateQueryParameterDiscoveryForSort ( resourceGraph , currentRequest , resourceDefinitionProvider , options , _queryStringAccessor ) ;
34- _queryParameterParserForAll = CreateQueryParameterDiscoveryForAll ( resourceGraph , currentRequest , resourceDefinitionProvider , options , _queryStringAccessor ) ;
38+ _queryStringReaderForSort = CreateQueryParameterDiscoveryForSort ( resourceGraph , currentRequest , options , _queryStringAccessor ) ;
39+ _queryStringReaderForAll = CreateQueryParameterDiscoveryForAll ( resourceGraph , currentRequest , options , _queryStringAccessor ) ;
3540 }
3641
37- private static QueryParameterParser CreateQueryParameterDiscoveryForSort ( IResourceGraph resourceGraph ,
38- CurrentRequest currentRequest , IResourceDefinitionProvider resourceDefinitionProvider ,
42+ private static QueryStringReader CreateQueryParameterDiscoveryForSort ( IResourceGraph resourceGraph ,
43+ CurrentRequest currentRequest ,
3944 IJsonApiOptions options , FakeRequestQueryStringAccessor queryStringAccessor )
4045 {
41- ISortService sortService = new SortService ( resourceDefinitionProvider , resourceGraph , currentRequest ) ;
42-
43- var queryServices = new List < IQueryParameterService >
46+ var sortReader = new SortQueryStringParameterReader ( currentRequest , resourceGraph ) ;
47+
48+ var readers = new List < IQueryStringParameterReader >
4449 {
45- sortService
50+ sortReader
4651 } ;
4752
48- return new QueryParameterParser ( options , queryStringAccessor , queryServices , NullLoggerFactory . Instance ) ;
53+ return new QueryStringReader ( options , queryStringAccessor , readers , NullLoggerFactory . Instance ) ;
4954 }
5055
51- private static QueryParameterParser CreateQueryParameterDiscoveryForAll ( IResourceGraph resourceGraph ,
52- CurrentRequest currentRequest , IResourceDefinitionProvider resourceDefinitionProvider ,
53- IJsonApiOptions options , FakeRequestQueryStringAccessor queryStringAccessor )
56+ private static QueryStringReader CreateQueryParameterDiscoveryForAll ( IResourceGraph resourceGraph ,
57+ CurrentRequest currentRequest , IJsonApiOptions options , FakeRequestQueryStringAccessor queryStringAccessor )
5458 {
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 >
59+ var resourceFactory = new ResourceFactory ( new ServiceContainer ( ) ) ;
60+
61+ var filterReader = new FilterQueryStringParameterReader ( currentRequest , resourceGraph , resourceFactory , options ) ;
62+ var sortReader = new SortQueryStringParameterReader ( currentRequest , resourceGraph ) ;
63+ var sparseFieldSetReader = new SparseFieldSetQueryStringParameterReader ( currentRequest , resourceGraph ) ;
64+ var paginationReader = new PaginationQueryStringParameterReader ( currentRequest , resourceGraph , options ) ;
65+ var defaultsReader = new DefaultsQueryStringParameterReader ( options ) ;
66+ var nullsReader = new NullsQueryStringParameterReader ( options ) ;
67+
68+ var readers = new List < IQueryStringParameterReader >
6469 {
65- includeService , filterService , sortService , sparseFieldsService , pageService , defaultsService ,
66- nullsService
70+ filterReader , sortReader , sparseFieldSetReader , paginationReader , defaultsReader , nullsReader
6771 } ;
6872
69- return new QueryParameterParser ( options , queryStringAccessor , queryServices , NullLoggerFactory . Instance ) ;
73+ return new QueryStringReader ( options , queryStringAccessor , readers , NullLoggerFactory . Instance ) ;
7074 }
7175
7276 [ Benchmark ]
@@ -75,7 +79,7 @@ public void AscendingSort()
7579 var queryString = $ "?sort={ BenchmarkResourcePublicNames . NameAttr } ";
7680
7781 _queryStringAccessor . SetQueryString ( queryString ) ;
78- _queryParameterParserForSort . Parse ( null ) ;
82+ _queryStringReaderForSort . ReadAll ( null ) ;
7983 }
8084
8185 [ Benchmark ]
@@ -84,7 +88,7 @@ public void DescendingSort()
8488 var queryString = $ "?sort=-{ BenchmarkResourcePublicNames . NameAttr } ";
8589
8690 _queryStringAccessor . SetQueryString ( queryString ) ;
87- _queryParameterParserForSort . Parse ( null ) ;
91+ _queryStringReaderForSort . ReadAll ( null ) ;
8892 }
8993
9094 [ Benchmark ]
@@ -93,7 +97,7 @@ public void ComplexQuery() => Run(100, () =>
9397 var queryString = $ "?filter[{ BenchmarkResourcePublicNames . NameAttr } ]=abc,eq:abc&sort=-{ BenchmarkResourcePublicNames . NameAttr } &include=child&page[size]=1&fields={ BenchmarkResourcePublicNames . NameAttr } ";
9498
9599 _queryStringAccessor . SetQueryString ( queryString ) ;
96- _queryParameterParserForAll . Parse ( null ) ;
100+ _queryStringReaderForAll . ReadAll ( null ) ;
97101 } ) ;
98102
99103 private void Run ( int iterations , Action action ) {
0 commit comments