Skip to content

Commit 76ca65b

Browse files
authored
Merge 38a4a83 into fe64052
2 parents fe64052 + 38a4a83 commit 76ca65b

File tree

207 files changed

+8004
-2628
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

207 files changed

+8004
-2628
lines changed

benchmarks/QueryString/QueryStringParserBenchmarks.cs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
using JsonApiDotNetCore;
55
using JsonApiDotNetCore.Configuration;
66
using JsonApiDotNetCore.Middleware;
7+
using JsonApiDotNetCore.Queries.Parsing;
78
using JsonApiDotNetCore.QueryStrings;
8-
using JsonApiDotNetCore.QueryStrings.Internal;
99
using JsonApiDotNetCore.Resources;
1010
using Microsoft.Extensions.Logging.Abstractions;
1111

@@ -37,11 +37,23 @@ public QueryStringParserBenchmarks()
3737

3838
var resourceFactory = new ResourceFactory(new ServiceContainer());
3939

40-
var includeReader = new IncludeQueryStringParameterReader(request, resourceGraph, options);
41-
var filterReader = new FilterQueryStringParameterReader(request, resourceGraph, resourceFactory, options);
42-
var sortReader = new SortQueryStringParameterReader(request, resourceGraph);
43-
var sparseFieldSetReader = new SparseFieldSetQueryStringParameterReader(request, resourceGraph);
44-
var paginationReader = new PaginationQueryStringParameterReader(request, resourceGraph, options);
40+
var includeParser = new IncludeParser(options);
41+
var includeReader = new IncludeQueryStringParameterReader(includeParser, request, resourceGraph);
42+
43+
var filterScopeParser = new QueryStringParameterScopeParser();
44+
var filterValueParser = new FilterParser(resourceFactory);
45+
var filterReader = new FilterQueryStringParameterReader(filterScopeParser, filterValueParser, request, resourceGraph, options);
46+
47+
var sortScopeParser = new QueryStringParameterScopeParser();
48+
var sortValueParser = new SortParser();
49+
var sortReader = new SortQueryStringParameterReader(sortScopeParser, sortValueParser, request, resourceGraph);
50+
51+
var sparseFieldSetScopeParser = new SparseFieldTypeParser(resourceGraph);
52+
var sparseFieldSetValueParser = new SparseFieldSetParser();
53+
var sparseFieldSetReader = new SparseFieldSetQueryStringParameterReader(sparseFieldSetScopeParser, sparseFieldSetValueParser, request, resourceGraph);
54+
55+
var paginationParser = new PaginationParser();
56+
var paginationReader = new PaginationQueryStringParameterReader(paginationParser, request, resourceGraph, options);
4557

4658
IQueryStringParameterReader[] readers = ArrayFactory.Create<IQueryStringParameterReader>(includeReader, filterReader, sortReader,
4759
sparseFieldSetReader, paginationReader);

benchmarks/Serialization/OperationsSerializationBenchmarks.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using JsonApiDotNetCore.Configuration;
44
using JsonApiDotNetCore.Middleware;
55
using JsonApiDotNetCore.Queries;
6-
using JsonApiDotNetCore.Queries.Internal;
76
using JsonApiDotNetCore.Resources;
87
using JsonApiDotNetCore.Serialization.Objects;
98

benchmarks/Serialization/ResourceSerializationBenchmarks.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
using JsonApiDotNetCore.Middleware;
77
using JsonApiDotNetCore.Queries;
88
using JsonApiDotNetCore.Queries.Expressions;
9-
using JsonApiDotNetCore.Queries.Internal;
109
using JsonApiDotNetCore.Resources.Annotations;
1110
using JsonApiDotNetCore.Serialization.Objects;
1211

benchmarks/Serialization/SerializationBenchmarkBase.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using JsonApiDotNetCore.Configuration;
66
using JsonApiDotNetCore.Middleware;
77
using JsonApiDotNetCore.Queries;
8-
using JsonApiDotNetCore.Queries.Internal;
98
using JsonApiDotNetCore.Resources;
109
using JsonApiDotNetCore.Resources.Annotations;
1110
using JsonApiDotNetCore.Serialization.Response;

benchmarks/Tools/NeverResourceDefinitionAccessor.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using JsonApiDotNetCore.Configuration;
33
using JsonApiDotNetCore.Middleware;
44
using JsonApiDotNetCore.Queries.Expressions;
5+
using JsonApiDotNetCore.Queries.QueryableBuilding;
56
using JsonApiDotNetCore.Resources;
67
using JsonApiDotNetCore.Resources.Annotations;
78

@@ -13,6 +14,7 @@ namespace Benchmarks.Tools;
1314
internal sealed class NeverResourceDefinitionAccessor : IResourceDefinitionAccessor
1415
{
1516
bool IResourceDefinitionAccessor.IsReadOnlyRequest => throw new NotImplementedException();
17+
public IQueryableBuilder QueryableBuilder => throw new NotImplementedException();
1618

1719
public IImmutableSet<IncludeElementExpression> OnApplyIncludes(ResourceType resourceType, IImmutableSet<IncludeElementExpression> existingIncludes)
1820
{

src/Examples/NoEntityFrameworkExample/QueryLayerToLinqConverter.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
using System.Collections;
22
using System.Linq.Expressions;
33
using JsonApiDotNetCore.Queries;
4-
using JsonApiDotNetCore.Queries.Internal.QueryableBuilding;
4+
using JsonApiDotNetCore.Queries.QueryableBuilding;
55
using JsonApiDotNetCore.Resources;
66
using Microsoft.EntityFrameworkCore.Metadata;
77

88
namespace NoEntityFrameworkExample;
99

1010
internal sealed class QueryLayerToLinqConverter
1111
{
12-
private readonly IResourceFactory _resourceFactory;
1312
private readonly IModel _model;
13+
private readonly IQueryableBuilder _queryableBuilder;
1414

15-
public QueryLayerToLinqConverter(IResourceFactory resourceFactory, IModel model)
15+
public QueryLayerToLinqConverter(IModel model, IQueryableBuilder queryableBuilder)
1616
{
17-
_resourceFactory = resourceFactory;
1817
_model = model;
18+
_queryableBuilder = queryableBuilder;
1919
}
2020

2121
public IEnumerable<TResource> ApplyQueryLayer<TResource>(QueryLayer queryLayer, IEnumerable<TResource> resources)
@@ -26,10 +26,9 @@ public IEnumerable<TResource> ApplyQueryLayer<TResource>(QueryLayer queryLayer,
2626
converter.ConvertIncludesToSelections();
2727

2828
// Convert QueryLayer into LINQ expression.
29-
Expression source = ((IEnumerable)resources).AsQueryable().Expression;
30-
var nameFactory = new LambdaParameterNameFactory();
31-
var queryableBuilder = new QueryableBuilder(source, queryLayer.ResourceType.ClrType, typeof(Enumerable), nameFactory, _resourceFactory, _model);
32-
Expression expression = queryableBuilder.ApplyQuery(queryLayer);
29+
IQueryable source = ((IEnumerable)resources).AsQueryable();
30+
var context = QueryableBuilderContext.CreateRoot(source, typeof(Enumerable), _model, null);
31+
Expression expression = _queryableBuilder.ApplyQuery(queryLayer, context);
3332

3433
// Insert null checks to prevent a NullReferenceException during execution of expressions such as:
3534
// 'todoItems => todoItems.Where(todoItem => todoItem.Assignee.Id == 1)' when a TodoItem doesn't have an assignee.

src/Examples/NoEntityFrameworkExample/Repositories/InMemoryResourceRepository.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using JsonApiDotNetCore.Configuration;
22
using JsonApiDotNetCore.Queries;
33
using JsonApiDotNetCore.Queries.Expressions;
4-
using JsonApiDotNetCore.Queries.Internal.QueryableBuilding;
4+
using JsonApiDotNetCore.Queries.QueryableBuilding;
55
using JsonApiDotNetCore.Repositories;
66
using JsonApiDotNetCore.Resources;
77
using NoEntityFrameworkExample.Data;
@@ -25,12 +25,12 @@ public abstract class InMemoryResourceRepository<TResource, TId> : IResourceRead
2525
private readonly ResourceType _resourceType;
2626
private readonly QueryLayerToLinqConverter _queryLayerToLinqConverter;
2727

28-
protected InMemoryResourceRepository(IResourceGraph resourceGraph, IResourceFactory resourceFactory)
28+
protected InMemoryResourceRepository(IResourceGraph resourceGraph, IQueryableBuilder queryableBuilder)
2929
{
3030
_resourceType = resourceGraph.GetResourceType<TResource>();
3131

3232
var model = new InMemoryModel(resourceGraph);
33-
_queryLayerToLinqConverter = new QueryLayerToLinqConverter(resourceFactory, model);
33+
_queryLayerToLinqConverter = new QueryLayerToLinqConverter(model, queryableBuilder);
3434
}
3535

3636
/// <inheritdoc />

src/Examples/NoEntityFrameworkExample/Repositories/PersonRepository.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using JetBrains.Annotations;
22
using JsonApiDotNetCore.Configuration;
3-
using JsonApiDotNetCore.Resources;
3+
using JsonApiDotNetCore.Queries.QueryableBuilding;
44
using NoEntityFrameworkExample.Data;
55
using NoEntityFrameworkExample.Models;
66

@@ -9,8 +9,8 @@ namespace NoEntityFrameworkExample.Repositories;
99
[UsedImplicitly(ImplicitUseKindFlags.InstantiatedNoFixedConstructorSignature)]
1010
public sealed class PersonRepository : InMemoryResourceRepository<Person, long>
1111
{
12-
public PersonRepository(IResourceGraph resourceGraph, IResourceFactory resourceFactory)
13-
: base(resourceGraph, resourceFactory)
12+
public PersonRepository(IResourceGraph resourceGraph, IQueryableBuilder queryableBuilder)
13+
: base(resourceGraph, queryableBuilder)
1414
{
1515
}
1616

src/Examples/NoEntityFrameworkExample/Repositories/TagRepository.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using JetBrains.Annotations;
22
using JsonApiDotNetCore.Configuration;
3-
using JsonApiDotNetCore.Resources;
3+
using JsonApiDotNetCore.Queries.QueryableBuilding;
44
using NoEntityFrameworkExample.Data;
55
using NoEntityFrameworkExample.Models;
66

@@ -9,8 +9,8 @@ namespace NoEntityFrameworkExample.Repositories;
99
[UsedImplicitly(ImplicitUseKindFlags.InstantiatedNoFixedConstructorSignature)]
1010
public sealed class TagRepository : InMemoryResourceRepository<Tag, long>
1111
{
12-
public TagRepository(IResourceGraph resourceGraph, IResourceFactory resourceFactory)
13-
: base(resourceGraph, resourceFactory)
12+
public TagRepository(IResourceGraph resourceGraph, IQueryableBuilder queryableBuilder)
13+
: base(resourceGraph, queryableBuilder)
1414
{
1515
}
1616

src/Examples/NoEntityFrameworkExample/Repositories/TodoItemRepository.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using JetBrains.Annotations;
22
using JsonApiDotNetCore.Configuration;
3-
using JsonApiDotNetCore.Resources;
3+
using JsonApiDotNetCore.Queries.QueryableBuilding;
44
using NoEntityFrameworkExample.Data;
55
using NoEntityFrameworkExample.Models;
66

@@ -9,8 +9,8 @@ namespace NoEntityFrameworkExample.Repositories;
99
[UsedImplicitly(ImplicitUseKindFlags.InstantiatedNoFixedConstructorSignature)]
1010
public sealed class TodoItemRepository : InMemoryResourceRepository<TodoItem, long>
1111
{
12-
public TodoItemRepository(IResourceGraph resourceGraph, IResourceFactory resourceFactory)
13-
: base(resourceGraph, resourceFactory)
12+
public TodoItemRepository(IResourceGraph resourceGraph, IQueryableBuilder queryableBuilder)
13+
: base(resourceGraph, queryableBuilder)
1414
{
1515
}
1616

0 commit comments

Comments
 (0)