1
1
using System ;
2
2
using System . Collections . Generic ;
3
+ using System . ComponentModel . Design ;
3
4
using BenchmarkDotNet . Attributes ;
4
5
using JsonApiDotNetCore . Configuration ;
6
+ using JsonApiDotNetCore . Internal ;
5
7
using 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 ;
10
11
using Microsoft . AspNetCore . Http ;
11
12
using Microsoft . AspNetCore . WebUtilities ;
12
13
using Microsoft . Extensions . Logging . Abstractions ;
@@ -17,56 +18,59 @@ namespace Benchmarks.Query
17
18
public class QueryParserBenchmarks
18
19
{
19
20
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 ;
22
23
23
24
public QueryParserBenchmarks ( )
24
25
{
25
- IJsonApiOptions options = new JsonApiOptions ( ) ;
26
+ IJsonApiOptions options = new JsonApiOptions
27
+ {
28
+ EnableLegacyFilterNotation = true
29
+ } ;
30
+
26
31
IResourceGraph resourceGraph = DependencyFactory . CreateResourceGraph ( options ) ;
27
-
28
- var currentRequest = new CurrentRequest ( ) ;
29
- currentRequest . SetRequestResource ( resourceGraph . GetResourceContext ( typeof ( BenchmarkResource ) ) ) ;
30
32
31
- IResourceDefinitionProvider resourceDefinitionProvider = DependencyFactory . CreateResourceDefinitionProvider ( resourceGraph ) ;
33
+ var currentRequest = new CurrentRequest
34
+ {
35
+ PrimaryResource = resourceGraph . GetResourceContext ( typeof ( BenchmarkResource ) )
36
+ } ;
32
37
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 ) ;
35
40
}
36
41
37
- private static QueryParameterParser CreateQueryParameterDiscoveryForSort ( IResourceGraph resourceGraph ,
38
- CurrentRequest currentRequest , IResourceDefinitionProvider resourceDefinitionProvider ,
42
+ private static QueryStringReader CreateQueryParameterDiscoveryForSort ( IResourceGraph resourceGraph ,
43
+ CurrentRequest currentRequest ,
39
44
IJsonApiOptions options , FakeRequestQueryStringAccessor queryStringAccessor )
40
45
{
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 >
44
49
{
45
- sortService
50
+ sortReader
46
51
} ;
47
52
48
- return new QueryParameterParser ( options , queryStringAccessor , queryServices , NullLoggerFactory . Instance ) ;
53
+ return new QueryStringReader ( options , queryStringAccessor , readers , NullLoggerFactory . Instance ) ;
49
54
}
50
55
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 )
54
58
{
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 >
64
69
{
65
- includeService , filterService , sortService , sparseFieldsService , pageService , defaultsService ,
66
- nullsService
70
+ filterReader , sortReader , sparseFieldSetReader , paginationReader , defaultsReader , nullsReader
67
71
} ;
68
72
69
- return new QueryParameterParser ( options , queryStringAccessor , queryServices , NullLoggerFactory . Instance ) ;
73
+ return new QueryStringReader ( options , queryStringAccessor , readers , NullLoggerFactory . Instance ) ;
70
74
}
71
75
72
76
[ Benchmark ]
@@ -75,7 +79,7 @@ public void AscendingSort()
75
79
var queryString = $ "?sort={ BenchmarkResourcePublicNames . NameAttr } ";
76
80
77
81
_queryStringAccessor . SetQueryString ( queryString ) ;
78
- _queryParameterParserForSort . Parse ( null ) ;
82
+ _queryStringReaderForSort . ReadAll ( null ) ;
79
83
}
80
84
81
85
[ Benchmark ]
@@ -84,7 +88,7 @@ public void DescendingSort()
84
88
var queryString = $ "?sort=-{ BenchmarkResourcePublicNames . NameAttr } ";
85
89
86
90
_queryStringAccessor . SetQueryString ( queryString ) ;
87
- _queryParameterParserForSort . Parse ( null ) ;
91
+ _queryStringReaderForSort . ReadAll ( null ) ;
88
92
}
89
93
90
94
[ Benchmark ]
@@ -93,7 +97,7 @@ public void ComplexQuery() => Run(100, () =>
93
97
var queryString = $ "?filter[{ BenchmarkResourcePublicNames . NameAttr } ]=abc,eq:abc&sort=-{ BenchmarkResourcePublicNames . NameAttr } &include=child&page[size]=1&fields={ BenchmarkResourcePublicNames . NameAttr } ";
94
98
95
99
_queryStringAccessor . SetQueryString ( queryString ) ;
96
- _queryParameterParserForAll . Parse ( null ) ;
100
+ _queryStringReaderForAll . ReadAll ( null ) ;
97
101
} ) ;
98
102
99
103
private void Run ( int iterations , Action action ) {
0 commit comments