Skip to content

Commit

Permalink
Query: Factories used during compilation time should take QueryCompil…
Browse files Browse the repository at this point in the history
…ationContext as argument

Part of #18923
  • Loading branch information
smitpatel committed Mar 26, 2020
1 parent bf325f0 commit 83ba357
Show file tree
Hide file tree
Showing 18 changed files with 44 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,16 +36,16 @@ public class CosmosQueryableMethodTranslatingExpressionVisitor : QueryableMethod
/// </summary>
public CosmosQueryableMethodTranslatingExpressionVisitor(
[NotNull] QueryableMethodTranslatingExpressionVisitorDependencies dependencies,
[NotNull] IModel model,
[NotNull] QueryCompilationContext queryCompilationContext,
[NotNull] ISqlExpressionFactory sqlExpressionFactory,
[NotNull] IMemberTranslatorProvider memberTranslatorProvider,
[NotNull] IMethodCallTranslatorProvider methodCallTranslatorProvider)
: base(dependencies, subquery: false)
{
_model = model;
_model = queryCompilationContext.Model;
_sqlExpressionFactory = sqlExpressionFactory;
_sqlTranslator = new CosmosSqlTranslatingExpressionVisitor(
model,
_model,
sqlExpressionFactory,
memberTranslatorProvider,
methodCallTranslatorProvider);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,13 @@ public CosmosQueryableMethodTranslatingExpressionVisitorFactory(
/// any release. You should only use it directly in your code with extreme caution and knowing that
/// doing so can result in application failures when updating to a new Entity Framework Core release.
/// </summary>
public virtual QueryableMethodTranslatingExpressionVisitor Create(IModel model)
public virtual QueryableMethodTranslatingExpressionVisitor Create(QueryCompilationContext queryCompilationContext)
{
Check.NotNull(model, nameof(model));
Check.NotNull(queryCompilationContext, nameof(queryCompilationContext));

return new CosmosQueryableMethodTranslatingExpressionVisitor(
_dependencies,
model,
queryCompilationContext,
_sqlExpressionFactory,
_memberTranslatorProvider,
_methodCallTranslatorProvider);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
using Microsoft.EntityFrameworkCore.InMemory.Internal;
using Microsoft.EntityFrameworkCore.Internal;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using Microsoft.EntityFrameworkCore.Query;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.EntityFrameworkCore.Utilities;
Expand All @@ -30,13 +29,13 @@ public class InMemoryQueryableMethodTranslatingExpressionVisitor : QueryableMeth

public InMemoryQueryableMethodTranslatingExpressionVisitor(
[NotNull] QueryableMethodTranslatingExpressionVisitorDependencies dependencies,
[NotNull] IModel model)
[NotNull] QueryCompilationContext queryCompilationContext)
: base(dependencies, subquery: false)
{
_expressionTranslator = new InMemoryExpressionTranslatingExpressionVisitor(this, model);
_expressionTranslator = new InMemoryExpressionTranslatingExpressionVisitor(this, queryCompilationContext.Model);
_weakEntityExpandingExpressionVisitor = new WeakEntityExpandingExpressionVisitor(_expressionTranslator);
_projectionBindingExpressionVisitor = new InMemoryProjectionBindingExpressionVisitor(this, _expressionTranslator);
_model = model;
_model = queryCompilationContext.Model;
}

protected InMemoryQueryableMethodTranslatingExpressionVisitor(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,11 @@ public InMemoryQueryableMethodTranslatingExpressionVisitorFactory(
_dependencies = dependencies;
}

public virtual QueryableMethodTranslatingExpressionVisitor Create(IModel model)
public virtual QueryableMethodTranslatingExpressionVisitor Create(QueryCompilationContext queryCompilationContext)
{
Check.NotNull(model, nameof(model));
Check.NotNull(queryCompilationContext, nameof(queryCompilationContext));

return new InMemoryQueryableMethodTranslatingExpressionVisitor(_dependencies, model);
return new InMemoryQueryableMethodTranslatingExpressionVisitor(_dependencies, queryCompilationContext);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ namespace Microsoft.EntityFrameworkCore.Query
public interface IRelationalSqlTranslatingExpressionVisitorFactory
{
RelationalSqlTranslatingExpressionVisitor Create(
[NotNull] IModel model,
[NotNull] QueryCompilationContext queryCompilationContext,
[NotNull] QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ public class RelationalProjectionBindingExpressionVisitor : ExpressionVisitor

private SelectExpression _selectExpression;
private bool _clientEval;
private readonly IModel _model;

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

public RelationalProjectionBindingExpressionVisitor(
[NotNull] RelationalQueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor,
[NotNull] RelationalSqlTranslatingExpressionVisitor sqlTranslatingExpressionVisitor,
[NotNull] IModel model)
[NotNull] RelationalSqlTranslatingExpressionVisitor sqlTranslatingExpressionVisitor)
{
_queryableMethodTranslatingExpressionVisitor = queryableMethodTranslatingExpressionVisitor;
_sqlTranslator = sqlTranslatingExpressionVisitor;
_model = model;
}

public virtual Expression Translate([NotNull] SelectExpression selectExpression, [NotNull] Expression expression)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,14 @@ public RelationalQueryableMethodTranslatingExpressionVisitorFactory(
_relationalDependencies = relationalDependencies;
}

public virtual QueryableMethodTranslatingExpressionVisitor Create(IModel model)
public virtual QueryableMethodTranslatingExpressionVisitor Create(QueryCompilationContext queryCompilationContext)
{
Check.NotNull(model, nameof(model));
Check.NotNull(queryCompilationContext, nameof(queryCompilationContext));

return new RelationalQueryableMethodTranslatingExpressionVisitor(
_dependencies,
_relationalDependencies,
model);
queryCompilationContext);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@ public RelationalSqlTranslatingExpressionVisitorFactory(
}

public virtual RelationalSqlTranslatingExpressionVisitor Create(
IModel model,
QueryCompilationContext queryCompilationContext,
QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
{
Check.NotNull(model, nameof(model));
Check.NotNull(queryCompilationContext, nameof(queryCompilationContext));
Check.NotNull(queryableMethodTranslatingExpressionVisitor, nameof(queryableMethodTranslatingExpressionVisitor));

return new RelationalSqlTranslatingExpressionVisitor(
_dependencies,
model,
queryCompilationContext,
queryableMethodTranslatingExpressionVisitor);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,20 +29,20 @@ public class RelationalQueryableMethodTranslatingExpressionVisitor : QueryableMe
public RelationalQueryableMethodTranslatingExpressionVisitor(
[NotNull] QueryableMethodTranslatingExpressionVisitorDependencies dependencies,
[NotNull] RelationalQueryableMethodTranslatingExpressionVisitorDependencies relationalDependencies,
[NotNull] IModel model)
[NotNull] QueryCompilationContext queryCompilationContext)
: base(dependencies, subquery: false)
{
Check.NotNull(dependencies, nameof(dependencies));
Check.NotNull(relationalDependencies, nameof(relationalDependencies));
Check.NotNull(model, nameof(model));
Check.NotNull(queryCompilationContext, nameof(queryCompilationContext));

RelationalDependencies = relationalDependencies;

var sqlExpressionFactory = relationalDependencies.SqlExpressionFactory;
_sqlTranslator = relationalDependencies.RelationalSqlTranslatingExpressionVisitorFactory.Create(model, this);
_model = queryCompilationContext.Model;
_sqlTranslator = relationalDependencies.RelationalSqlTranslatingExpressionVisitorFactory.Create(queryCompilationContext, this);
_weakEntityExpandingExpressionVisitor = new WeakEntityExpandingExpressionVisitor(_sqlTranslator, sqlExpressionFactory);
_projectionBindingExpressionVisitor = new RelationalProjectionBindingExpressionVisitor(this, _sqlTranslator, model);
_model = model;
_projectionBindingExpressionVisitor = new RelationalProjectionBindingExpressionVisitor(this, _sqlTranslator);
_sqlExpressionFactory = sqlExpressionFactory;
_subquery = false;
}
Expand All @@ -57,7 +57,7 @@ protected RelationalQueryableMethodTranslatingExpressionVisitor(
_model = parentVisitor._model;
_sqlTranslator = parentVisitor._sqlTranslator;
_weakEntityExpandingExpressionVisitor = parentVisitor._weakEntityExpandingExpressionVisitor;
_projectionBindingExpressionVisitor = new RelationalProjectionBindingExpressionVisitor(this, _sqlTranslator, _model);
_projectionBindingExpressionVisitor = new RelationalProjectionBindingExpressionVisitor(this, _sqlTranslator);
_sqlExpressionFactory = parentVisitor._sqlExpressionFactory;
_subquery = true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
using JetBrains.Annotations;
using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Internal;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Query.Internal;
using Microsoft.EntityFrameworkCore.Query.SqlExpressions;
Expand All @@ -27,17 +26,17 @@ public class RelationalSqlTranslatingExpressionVisitor : ExpressionVisitor

public RelationalSqlTranslatingExpressionVisitor(
[NotNull] RelationalSqlTranslatingExpressionVisitorDependencies dependencies,
[NotNull] IModel model,
[NotNull] QueryCompilationContext queryCompilationContext,
[NotNull] QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
{
Check.NotNull(dependencies, nameof(dependencies));
Check.NotNull(model, nameof(model));
Check.NotNull(queryCompilationContext, nameof(queryCompilationContext));
Check.NotNull(queryableMethodTranslatingExpressionVisitor, nameof(queryableMethodTranslatingExpressionVisitor));

Dependencies = dependencies;
SqlExpressionFactory = dependencies.SqlExpressionFactory;

_model = model;
_model = queryCompilationContext.Model;
_queryableMethodTranslatingExpressionVisitor = queryableMethodTranslatingExpressionVisitor;
_sqlTypeMappingVerifyingExpressionVisitor = new SqlTypeMappingVerifyingExpressionVisitor();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ private static readonly HashSet<ExpressionType> _arithmeticOperatorTypes

public SqlServerSqlTranslatingExpressionVisitor(
[NotNull] RelationalSqlTranslatingExpressionVisitorDependencies dependencies,
[NotNull] IModel model,
[NotNull] QueryCompilationContext queryCompilationContext,
[NotNull] QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
: base(dependencies, model, queryableMethodTranslatingExpressionVisitor)
: base(dependencies, queryCompilationContext, queryableMethodTranslatingExpressionVisitor)
{
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ public SqlServerSqlTranslatingExpressionVisitorFactory(
}

public virtual RelationalSqlTranslatingExpressionVisitor Create(
IModel model,
QueryCompilationContext queryCompilationContext,
QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
=> new SqlServerSqlTranslatingExpressionVisitor(
_dependencies,
model,
queryCompilationContext,
queryableMethodTranslatingExpressionVisitor);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ public class SqliteQueryableMethodTranslatingExpressionVisitor : RelationalQuery
public SqliteQueryableMethodTranslatingExpressionVisitor(
[NotNull] QueryableMethodTranslatingExpressionVisitorDependencies dependencies,
[NotNull] RelationalQueryableMethodTranslatingExpressionVisitorDependencies relationalDependencies,
[NotNull] IModel model)
: base(dependencies, relationalDependencies, model)
[NotNull] QueryCompilationContext queryCompilationContext)
: base(dependencies, relationalDependencies, queryCompilationContext)
{
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@ public SqliteQueryableMethodTranslatingExpressionVisitorFactory(
_relationalDependencies = relationalDependencies;
}

public virtual QueryableMethodTranslatingExpressionVisitor Create(IModel model)
public virtual QueryableMethodTranslatingExpressionVisitor Create(QueryCompilationContext queryCompilationContext)
{
Check.NotNull(model, nameof(model));
Check.NotNull(queryCompilationContext, nameof(queryCompilationContext));

return new SqliteQueryableMethodTranslatingExpressionVisitor(_dependencies, _relationalDependencies, model);
return new SqliteQueryableMethodTranslatingExpressionVisitor(_dependencies, _relationalDependencies, queryCompilationContext);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,9 @@ private static readonly IReadOnlyDictionary<ExpressionType, IReadOnlyCollection<

public SqliteSqlTranslatingExpressionVisitor(
[NotNull] RelationalSqlTranslatingExpressionVisitorDependencies dependencies,
[NotNull] IModel model,
[NotNull] QueryCompilationContext queryCompilationContext,
[NotNull] QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
: base(dependencies, model, queryableMethodTranslatingExpressionVisitor)
: base(dependencies, queryCompilationContext, queryableMethodTranslatingExpressionVisitor)
{
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ public SqliteSqlTranslatingExpressionVisitorFactory(
}

public virtual RelationalSqlTranslatingExpressionVisitor Create(
IModel model,
QueryCompilationContext queryCompilationContext,
QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
=> new SqliteSqlTranslatingExpressionVisitor(
_dependencies,
model,
queryCompilationContext,
queryableMethodTranslatingExpressionVisitor);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@ namespace Microsoft.EntityFrameworkCore.Query
/// </summary>
public interface IQueryableMethodTranslatingExpressionVisitorFactory
{
QueryableMethodTranslatingExpressionVisitor Create([NotNull] IModel model);
QueryableMethodTranslatingExpressionVisitor Create([NotNull] QueryCompilationContext queryCompilationContext);
}
}
2 changes: 1 addition & 1 deletion src/EFCore/Query/QueryCompilationContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public virtual Func<QueryContext, TResult> CreateQueryExecutor<TResult>([NotNull

query = _queryTranslationPreprocessorFactory.Create(this).Process(query);
// Convert EntityQueryable to ShapedQueryExpression
query = _queryableMethodTranslatingExpressionVisitorFactory.Create(Model).Visit(query);
query = _queryableMethodTranslatingExpressionVisitorFactory.Create(this).Visit(query);
query = _queryTranslationPostprocessorFactory.Create(this).Process(query);

// Inject actual entity materializer
Expand Down

0 comments on commit 83ba357

Please sign in to comment.