Skip to content

Commit 3a76639

Browse files
committed
Query: Factories used during compilation time should take QueryCompilationContext as argument
Part of #18923
1 parent 8bd99a9 commit 3a76639

18 files changed

+44
-49
lines changed

src/EFCore.Cosmos/Query/Internal/CosmosQueryableMethodTranslatingExpressionVisitor.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,16 @@ public class CosmosQueryableMethodTranslatingExpressionVisitor : QueryableMethod
3636
/// </summary>
3737
public CosmosQueryableMethodTranslatingExpressionVisitor(
3838
[NotNull] QueryableMethodTranslatingExpressionVisitorDependencies dependencies,
39-
[NotNull] IModel model,
39+
[NotNull] QueryCompilationContext queryCompilationContext,
4040
[NotNull] ISqlExpressionFactory sqlExpressionFactory,
4141
[NotNull] IMemberTranslatorProvider memberTranslatorProvider,
4242
[NotNull] IMethodCallTranslatorProvider methodCallTranslatorProvider)
4343
: base(dependencies, subquery: false)
4444
{
45-
_model = model;
45+
_model = queryCompilationContext.Model;
4646
_sqlExpressionFactory = sqlExpressionFactory;
4747
_sqlTranslator = new CosmosSqlTranslatingExpressionVisitor(
48-
model,
48+
_model,
4949
sqlExpressionFactory,
5050
memberTranslatorProvider,
5151
methodCallTranslatorProvider);

src/EFCore.Cosmos/Query/Internal/CosmosQueryableMethodTranslatingExpressionVisitorFactory.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,13 @@ public CosmosQueryableMethodTranslatingExpressionVisitorFactory(
5353
/// any release. You should only use it directly in your code with extreme caution and knowing that
5454
/// doing so can result in application failures when updating to a new Entity Framework Core release.
5555
/// </summary>
56-
public virtual QueryableMethodTranslatingExpressionVisitor Create(IModel model)
56+
public virtual QueryableMethodTranslatingExpressionVisitor Create(QueryCompilationContext queryCompilationContext)
5757
{
58-
Check.NotNull(model, nameof(model));
58+
Check.NotNull(queryCompilationContext, nameof(queryCompilationContext));
5959

6060
return new CosmosQueryableMethodTranslatingExpressionVisitor(
6161
_dependencies,
62-
model,
62+
queryCompilationContext,
6363
_sqlExpressionFactory,
6464
_memberTranslatorProvider,
6565
_methodCallTranslatorProvider);

src/EFCore.InMemory/Query/Internal/InMemoryQueryableMethodTranslatingExpressionVisitor.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
using Microsoft.EntityFrameworkCore.InMemory.Internal;
1313
using Microsoft.EntityFrameworkCore.Internal;
1414
using Microsoft.EntityFrameworkCore.Metadata;
15-
using Microsoft.EntityFrameworkCore.Metadata.Internal;
1615
using Microsoft.EntityFrameworkCore.Query;
1716
using Microsoft.EntityFrameworkCore.Storage;
1817
using Microsoft.EntityFrameworkCore.Utilities;
@@ -30,13 +29,13 @@ public class InMemoryQueryableMethodTranslatingExpressionVisitor : QueryableMeth
3029

3130
public InMemoryQueryableMethodTranslatingExpressionVisitor(
3231
[NotNull] QueryableMethodTranslatingExpressionVisitorDependencies dependencies,
33-
[NotNull] IModel model)
32+
[NotNull] QueryCompilationContext queryCompilationContext)
3433
: base(dependencies, subquery: false)
3534
{
36-
_expressionTranslator = new InMemoryExpressionTranslatingExpressionVisitor(this, model);
35+
_expressionTranslator = new InMemoryExpressionTranslatingExpressionVisitor(this, queryCompilationContext.Model);
3736
_weakEntityExpandingExpressionVisitor = new WeakEntityExpandingExpressionVisitor(_expressionTranslator);
3837
_projectionBindingExpressionVisitor = new InMemoryProjectionBindingExpressionVisitor(this, _expressionTranslator);
39-
_model = model;
38+
_model = queryCompilationContext.Model;
4039
}
4140

4241
protected InMemoryQueryableMethodTranslatingExpressionVisitor(

src/EFCore.InMemory/Query/Internal/InMemoryQueryableMethodTranslatingExpressionVisitorFactory.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ public InMemoryQueryableMethodTranslatingExpressionVisitorFactory(
3232
_dependencies = dependencies;
3333
}
3434

35-
public virtual QueryableMethodTranslatingExpressionVisitor Create(IModel model)
35+
public virtual QueryableMethodTranslatingExpressionVisitor Create(QueryCompilationContext queryCompilationContext)
3636
{
37-
Check.NotNull(model, nameof(model));
37+
Check.NotNull(queryCompilationContext, nameof(queryCompilationContext));
3838

39-
return new InMemoryQueryableMethodTranslatingExpressionVisitor(_dependencies, model);
39+
return new InMemoryQueryableMethodTranslatingExpressionVisitor(_dependencies, queryCompilationContext);
4040
}
4141
}
4242
}

src/EFCore.Relational/Query/IRelationalSqlTranslatingExpressionVisitorFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ namespace Microsoft.EntityFrameworkCore.Query
2020
public interface IRelationalSqlTranslatingExpressionVisitorFactory
2121
{
2222
RelationalSqlTranslatingExpressionVisitor Create(
23-
[NotNull] IModel model,
23+
[NotNull] QueryCompilationContext queryCompilationContext,
2424
[NotNull] QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor);
2525
}
2626
}

src/EFCore.Relational/Query/Internal/RelationalProjectionBindingExpressionVisitor.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ public class RelationalProjectionBindingExpressionVisitor : ExpressionVisitor
2323

2424
private SelectExpression _selectExpression;
2525
private bool _clientEval;
26-
private readonly IModel _model;
2726

2827
private readonly IDictionary<ProjectionMember, Expression> _projectionMapping
2928
= new Dictionary<ProjectionMember, Expression>();
@@ -32,12 +31,10 @@ private readonly IDictionary<ProjectionMember, Expression> _projectionMapping
3231

3332
public RelationalProjectionBindingExpressionVisitor(
3433
[NotNull] RelationalQueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor,
35-
[NotNull] RelationalSqlTranslatingExpressionVisitor sqlTranslatingExpressionVisitor,
36-
[NotNull] IModel model)
34+
[NotNull] RelationalSqlTranslatingExpressionVisitor sqlTranslatingExpressionVisitor)
3735
{
3836
_queryableMethodTranslatingExpressionVisitor = queryableMethodTranslatingExpressionVisitor;
3937
_sqlTranslator = sqlTranslatingExpressionVisitor;
40-
_model = model;
4138
}
4239

4340
public virtual Expression Translate([NotNull] SelectExpression selectExpression, [NotNull] Expression expression)

src/EFCore.Relational/Query/Internal/RelationalQueryableMethodTranslatingExpressionVisitorFactory.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,14 @@ public RelationalQueryableMethodTranslatingExpressionVisitorFactory(
3131
_relationalDependencies = relationalDependencies;
3232
}
3333

34-
public virtual QueryableMethodTranslatingExpressionVisitor Create(IModel model)
34+
public virtual QueryableMethodTranslatingExpressionVisitor Create(QueryCompilationContext queryCompilationContext)
3535
{
36-
Check.NotNull(model, nameof(model));
36+
Check.NotNull(queryCompilationContext, nameof(queryCompilationContext));
3737

3838
return new RelationalQueryableMethodTranslatingExpressionVisitor(
3939
_dependencies,
4040
_relationalDependencies,
41-
model);
41+
queryCompilationContext);
4242
}
4343
}
4444
}

src/EFCore.Relational/Query/Internal/RelationalSqlTranslatingExpressionVisitorFactory.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,15 @@ public RelationalSqlTranslatingExpressionVisitorFactory(
1818
}
1919

2020
public virtual RelationalSqlTranslatingExpressionVisitor Create(
21-
IModel model,
21+
QueryCompilationContext queryCompilationContext,
2222
QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
2323
{
24-
Check.NotNull(model, nameof(model));
24+
Check.NotNull(queryCompilationContext, nameof(queryCompilationContext));
2525
Check.NotNull(queryableMethodTranslatingExpressionVisitor, nameof(queryableMethodTranslatingExpressionVisitor));
2626

2727
return new RelationalSqlTranslatingExpressionVisitor(
2828
_dependencies,
29-
model,
29+
queryCompilationContext,
3030
queryableMethodTranslatingExpressionVisitor);
3131
}
3232
}

src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,20 +29,20 @@ public class RelationalQueryableMethodTranslatingExpressionVisitor : QueryableMe
2929
public RelationalQueryableMethodTranslatingExpressionVisitor(
3030
[NotNull] QueryableMethodTranslatingExpressionVisitorDependencies dependencies,
3131
[NotNull] RelationalQueryableMethodTranslatingExpressionVisitorDependencies relationalDependencies,
32-
[NotNull] IModel model)
32+
[NotNull] QueryCompilationContext queryCompilationContext)
3333
: base(dependencies, subquery: false)
3434
{
3535
Check.NotNull(dependencies, nameof(dependencies));
3636
Check.NotNull(relationalDependencies, nameof(relationalDependencies));
37-
Check.NotNull(model, nameof(model));
37+
Check.NotNull(queryCompilationContext, nameof(queryCompilationContext));
3838

3939
RelationalDependencies = relationalDependencies;
4040

4141
var sqlExpressionFactory = relationalDependencies.SqlExpressionFactory;
42-
_sqlTranslator = relationalDependencies.RelationalSqlTranslatingExpressionVisitorFactory.Create(model, this);
42+
_model = queryCompilationContext.Model;
43+
_sqlTranslator = relationalDependencies.RelationalSqlTranslatingExpressionVisitorFactory.Create(queryCompilationContext, this);
4344
_weakEntityExpandingExpressionVisitor = new WeakEntityExpandingExpressionVisitor(_sqlTranslator, sqlExpressionFactory);
44-
_projectionBindingExpressionVisitor = new RelationalProjectionBindingExpressionVisitor(this, _sqlTranslator, model);
45-
_model = model;
45+
_projectionBindingExpressionVisitor = new RelationalProjectionBindingExpressionVisitor(this, _sqlTranslator);
4646
_sqlExpressionFactory = sqlExpressionFactory;
4747
_subquery = false;
4848
}
@@ -57,7 +57,7 @@ protected RelationalQueryableMethodTranslatingExpressionVisitor(
5757
_model = parentVisitor._model;
5858
_sqlTranslator = parentVisitor._sqlTranslator;
5959
_weakEntityExpandingExpressionVisitor = parentVisitor._weakEntityExpandingExpressionVisitor;
60-
_projectionBindingExpressionVisitor = new RelationalProjectionBindingExpressionVisitor(this, _sqlTranslator, _model);
60+
_projectionBindingExpressionVisitor = new RelationalProjectionBindingExpressionVisitor(this, _sqlTranslator);
6161
_sqlExpressionFactory = parentVisitor._sqlExpressionFactory;
6262
_subquery = true;
6363
}

src/EFCore.Relational/Query/RelationalSqlTranslatingExpressionVisitor.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
using JetBrains.Annotations;
1010
using Microsoft.EntityFrameworkCore.Diagnostics;
1111
using Microsoft.EntityFrameworkCore.Infrastructure;
12-
using Microsoft.EntityFrameworkCore.Internal;
1312
using Microsoft.EntityFrameworkCore.Metadata;
1413
using Microsoft.EntityFrameworkCore.Query.Internal;
1514
using Microsoft.EntityFrameworkCore.Query.SqlExpressions;
@@ -27,17 +26,17 @@ public class RelationalSqlTranslatingExpressionVisitor : ExpressionVisitor
2726

2827
public RelationalSqlTranslatingExpressionVisitor(
2928
[NotNull] RelationalSqlTranslatingExpressionVisitorDependencies dependencies,
30-
[NotNull] IModel model,
29+
[NotNull] QueryCompilationContext queryCompilationContext,
3130
[NotNull] QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
3231
{
3332
Check.NotNull(dependencies, nameof(dependencies));
34-
Check.NotNull(model, nameof(model));
33+
Check.NotNull(queryCompilationContext, nameof(queryCompilationContext));
3534
Check.NotNull(queryableMethodTranslatingExpressionVisitor, nameof(queryableMethodTranslatingExpressionVisitor));
3635

3736
Dependencies = dependencies;
3837
SqlExpressionFactory = dependencies.SqlExpressionFactory;
3938

40-
_model = model;
39+
_model = queryCompilationContext.Model;
4140
_queryableMethodTranslatingExpressionVisitor = queryableMethodTranslatingExpressionVisitor;
4241
_sqlTypeMappingVerifyingExpressionVisitor = new SqlTypeMappingVerifyingExpressionVisitor();
4342
}

src/EFCore.SqlServer/Query/Internal/SqlServerSqlTranslatingExpressionVisitor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ private static readonly HashSet<ExpressionType> _arithmeticOperatorTypes
3535

3636
public SqlServerSqlTranslatingExpressionVisitor(
3737
[NotNull] RelationalSqlTranslatingExpressionVisitorDependencies dependencies,
38-
[NotNull] IModel model,
38+
[NotNull] QueryCompilationContext queryCompilationContext,
3939
[NotNull] QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
40-
: base(dependencies, model, queryableMethodTranslatingExpressionVisitor)
40+
: base(dependencies, queryCompilationContext, queryableMethodTranslatingExpressionVisitor)
4141
{
4242
}
4343

src/EFCore.SqlServer/Query/Internal/SqlServerSqlTranslatingExpressionVisitorFactory.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ public SqlServerSqlTranslatingExpressionVisitorFactory(
1818
}
1919

2020
public virtual RelationalSqlTranslatingExpressionVisitor Create(
21-
IModel model,
21+
QueryCompilationContext queryCompilationContext,
2222
QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
2323
=> new SqlServerSqlTranslatingExpressionVisitor(
2424
_dependencies,
25-
model,
25+
queryCompilationContext,
2626
queryableMethodTranslatingExpressionVisitor);
2727
}
2828
}

src/EFCore.Sqlite.Core/Query/Internal/SqliteQueryableMethodTranslatingExpressionVisitor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ public class SqliteQueryableMethodTranslatingExpressionVisitor : RelationalQuery
1919
public SqliteQueryableMethodTranslatingExpressionVisitor(
2020
[NotNull] QueryableMethodTranslatingExpressionVisitorDependencies dependencies,
2121
[NotNull] RelationalQueryableMethodTranslatingExpressionVisitorDependencies relationalDependencies,
22-
[NotNull] IModel model)
23-
: base(dependencies, relationalDependencies, model)
22+
[NotNull] QueryCompilationContext queryCompilationContext)
23+
: base(dependencies, relationalDependencies, queryCompilationContext)
2424
{
2525
}
2626

src/EFCore.Sqlite.Core/Query/Internal/SqliteQueryableMethodTranslatingExpressionVisitorFactory.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ public SqliteQueryableMethodTranslatingExpressionVisitorFactory(
2121
_relationalDependencies = relationalDependencies;
2222
}
2323

24-
public virtual QueryableMethodTranslatingExpressionVisitor Create(IModel model)
24+
public virtual QueryableMethodTranslatingExpressionVisitor Create(QueryCompilationContext queryCompilationContext)
2525
{
26-
Check.NotNull(model, nameof(model));
26+
Check.NotNull(queryCompilationContext, nameof(queryCompilationContext));
2727

28-
return new SqliteQueryableMethodTranslatingExpressionVisitor(_dependencies, _relationalDependencies, model);
28+
return new SqliteQueryableMethodTranslatingExpressionVisitor(_dependencies, _relationalDependencies, queryCompilationContext);
2929
}
3030
}
3131
}

src/EFCore.Sqlite.Core/Query/Internal/SqliteSqlTranslatingExpressionVisitor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,9 @@ private static readonly IReadOnlyDictionary<ExpressionType, IReadOnlyCollection<
8080

8181
public SqliteSqlTranslatingExpressionVisitor(
8282
[NotNull] RelationalSqlTranslatingExpressionVisitorDependencies dependencies,
83-
[NotNull] IModel model,
83+
[NotNull] QueryCompilationContext queryCompilationContext,
8484
[NotNull] QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
85-
: base(dependencies, model, queryableMethodTranslatingExpressionVisitor)
85+
: base(dependencies, queryCompilationContext, queryableMethodTranslatingExpressionVisitor)
8686
{
8787
}
8888

src/EFCore.Sqlite.Core/Query/Internal/SqliteSqlTranslatingExpressionVisitorFactory.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ public SqliteSqlTranslatingExpressionVisitorFactory(
1818
}
1919

2020
public virtual RelationalSqlTranslatingExpressionVisitor Create(
21-
IModel model,
21+
QueryCompilationContext queryCompilationContext,
2222
QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
2323
=> new SqliteSqlTranslatingExpressionVisitor(
2424
_dependencies,
25-
model,
25+
queryCompilationContext,
2626
queryableMethodTranslatingExpressionVisitor);
2727
}
2828
}

src/EFCore/Query/IQueryableMethodTranslatingExpressionVisitorFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ namespace Microsoft.EntityFrameworkCore.Query
1919
/// </summary>
2020
public interface IQueryableMethodTranslatingExpressionVisitorFactory
2121
{
22-
QueryableMethodTranslatingExpressionVisitor Create([NotNull] IModel model);
22+
QueryableMethodTranslatingExpressionVisitor Create([NotNull] QueryCompilationContext queryCompilationContext);
2323
}
2424
}

src/EFCore/Query/QueryCompilationContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public virtual Func<QueryContext, TResult> CreateQueryExecutor<TResult>([NotNull
7373

7474
query = _queryTranslationPreprocessorFactory.Create(this).Process(query);
7575
// Convert EntityQueryable to ShapedQueryExpression
76-
query = _queryableMethodTranslatingExpressionVisitorFactory.Create(Model).Visit(query);
76+
query = _queryableMethodTranslatingExpressionVisitorFactory.Create(this).Visit(query);
7777
query = _queryTranslationPostprocessorFactory.Create(this).Process(query);
7878

7979
// Inject actual entity materializer

0 commit comments

Comments
 (0)