Skip to content

Commit 02d2a77

Browse files
author
Bart Koelman
authored
Reduced copied code from JADNC. (#6)
Pinned to the minimal version of JADNC required to run.
1 parent 08b6231 commit 02d2a77

File tree

3 files changed

+11
-90
lines changed

3 files changed

+11
-90
lines changed

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<PropertyGroup>
33
<NetCoreAppVersion>netcoreapp3.1</NetCoreAppVersion>
44
<AspNetCoreVersion>3.1.*</AspNetCoreVersion>
5-
<JsonApiDotNetCoreVersion>4.0.*</JsonApiDotNetCoreVersion>
5+
<JsonApiDotNetCoreVersion>4.0.2</JsonApiDotNetCoreVersion>
66
<MongoDBDriverVersion>2.11.*</MongoDBDriverVersion>
77
</PropertyGroup>
88

Lines changed: 8 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,120 +1,41 @@
11
using System;
2-
using System.Collections.Generic;
3-
using System.Linq;
42
using System.Linq.Expressions;
53
using JsonApiDotNetCore.Configuration;
64
using JsonApiDotNetCore.Queries;
75
using JsonApiDotNetCore.Queries.Expressions;
86
using JsonApiDotNetCore.Queries.Internal.QueryableBuilding;
97
using JsonApiDotNetCore.Resources;
10-
using JsonApiDotNetCore.Resources.Annotations;
118
using Microsoft.EntityFrameworkCore.Metadata;
129

1310
namespace JsonApiDotNetCore.MongoDb.Queries.Internal.QueryableBuilding
1411
{
1512
/// <summary>
1613
/// Drives conversion from <see cref="QueryLayer"/> into system <see cref="Expression"/> trees.
1714
/// </summary>
18-
/// <remarks>
19-
/// This class was copied from JsonApiDotNetCore, so it can use <see cref="MongoDbWhereClauseBuilder"/> instead.
20-
/// </remarks>
21-
public sealed class MongoDbQueryableBuilder
15+
public sealed class MongoDbQueryableBuilder : QueryableBuilder
2216
{
23-
private readonly Expression _source;
2417
private readonly Type _elementType;
2518
private readonly Type _extensionType;
26-
private readonly LambdaParameterNameFactory _nameFactory;
27-
private readonly IResourceFactory _resourceFactory;
28-
private readonly IResourceContextProvider _resourceContextProvider;
29-
private readonly IModel _entityModel;
3019
private readonly LambdaScopeFactory _lambdaScopeFactory;
3120

32-
public MongoDbQueryableBuilder(Expression source, Type elementType, Type extensionType, LambdaParameterNameFactory nameFactory,
33-
IResourceFactory resourceFactory, IResourceContextProvider resourceContextProvider, IModel entityModel,
21+
public MongoDbQueryableBuilder(Expression source, Type elementType, Type extensionType,
22+
LambdaParameterNameFactory nameFactory, IResourceFactory resourceFactory,
23+
IResourceContextProvider resourceContextProvider, IModel entityModel,
3424
LambdaScopeFactory lambdaScopeFactory = null)
25+
: base(source, elementType, extensionType, nameFactory, resourceFactory, resourceContextProvider,
26+
entityModel, lambdaScopeFactory)
3527
{
36-
_source = source ?? throw new ArgumentNullException(nameof(source));
3728
_elementType = elementType ?? throw new ArgumentNullException(nameof(elementType));
3829
_extensionType = extensionType ?? throw new ArgumentNullException(nameof(extensionType));
39-
_nameFactory = nameFactory ?? throw new ArgumentNullException(nameof(nameFactory));
40-
_resourceFactory = resourceFactory ?? throw new ArgumentNullException(nameof(resourceFactory));
41-
_resourceContextProvider = resourceContextProvider ?? throw new ArgumentNullException(nameof(resourceContextProvider));
42-
_entityModel = entityModel ?? throw new ArgumentNullException(nameof(entityModel));
43-
_lambdaScopeFactory = lambdaScopeFactory ?? new LambdaScopeFactory(_nameFactory);
30+
_lambdaScopeFactory = lambdaScopeFactory ?? new LambdaScopeFactory(nameFactory);
4431
}
4532

46-
public Expression ApplyQuery(QueryLayer layer)
47-
{
48-
if (layer == null) throw new ArgumentNullException(nameof(layer));
49-
50-
Expression expression = _source;
51-
52-
if (layer.Include != null)
53-
{
54-
expression = ApplyInclude(expression, layer.Include, layer.ResourceContext);
55-
}
56-
57-
if (layer.Filter != null)
58-
{
59-
expression = ApplyFilter(expression, layer.Filter);
60-
}
61-
62-
if (layer.Sort != null)
63-
{
64-
expression = ApplySort(expression, layer.Sort);
65-
}
66-
67-
if (layer.Pagination != null)
68-
{
69-
expression = ApplyPagination(expression, layer.Pagination);
70-
}
71-
72-
if (layer.Projection != null && layer.Projection.Any())
73-
{
74-
expression = ApplyProjection(expression, layer.Projection, layer.ResourceContext);
75-
}
76-
77-
return expression;
78-
}
79-
80-
private Expression ApplyInclude(Expression source, IncludeExpression include, ResourceContext resourceContext)
81-
{
82-
using var lambdaScope = _lambdaScopeFactory.CreateScope(_elementType);
83-
84-
var builder = new IncludeClauseBuilder(source, lambdaScope, resourceContext, _resourceContextProvider);
85-
return builder.ApplyInclude(include);
86-
}
87-
88-
private Expression ApplyFilter(Expression source, FilterExpression filter)
33+
protected override Expression ApplyFilter(Expression source, FilterExpression filter)
8934
{
9035
using var lambdaScope = _lambdaScopeFactory.CreateScope(_elementType);
9136

9237
var builder = new MongoDbWhereClauseBuilder(source, lambdaScope, _extensionType);
9338
return builder.ApplyWhere(filter);
9439
}
95-
96-
private Expression ApplySort(Expression source, SortExpression sort)
97-
{
98-
using var lambdaScope = _lambdaScopeFactory.CreateScope(_elementType);
99-
100-
var builder = new OrderClauseBuilder(source, lambdaScope, _extensionType);
101-
return builder.ApplyOrderBy(sort);
102-
}
103-
104-
private Expression ApplyPagination(Expression source, PaginationExpression pagination)
105-
{
106-
using var lambdaScope = _lambdaScopeFactory.CreateScope(_elementType);
107-
108-
var builder = new SkipTakeClauseBuilder(source, lambdaScope, _extensionType);
109-
return builder.ApplySkipTake(pagination);
110-
}
111-
112-
private Expression ApplyProjection(Expression source, IDictionary<ResourceFieldAttribute, QueryLayer> projection, ResourceContext resourceContext)
113-
{
114-
using var lambdaScope = _lambdaScopeFactory.CreateScope(_elementType);
115-
116-
var builder = new SelectClauseBuilder(source, lambdaScope, _entityModel, _extensionType, _nameFactory, _resourceFactory, _resourceContextProvider);
117-
return builder.ApplySelect(projection, resourceContext);
118-
}
11940
}
12041
}

src/JsonApiDotNetCore.MongoDb/Queries/Internal/QueryableBuilding/MongoDbWhereClauseBuilder.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ namespace JsonApiDotNetCore.MongoDb.Queries.Internal.QueryableBuilding
88
/// <inheritdoc />
99
public class MongoDbWhereClauseBuilder : WhereClauseBuilder
1010
{
11-
public MongoDbWhereClauseBuilder(Expression source, LambdaScope lambdaScope, Type extensionType) : base(source,
12-
lambdaScope, extensionType)
11+
public MongoDbWhereClauseBuilder(Expression source, LambdaScope lambdaScope, Type extensionType)
12+
: base(source, lambdaScope, extensionType)
1313
{
1414
}
1515

0 commit comments

Comments
 (0)