Skip to content

Commit 0c1b1d8

Browse files
Copilotrenemadsen
andcommitted
Update query processor for EF Core 10 API changes
Replace obsolete Optimize method with Process method that uses ParametersCacheDecorator instead of IReadOnlyDictionary for parameter handling. Co-authored-by: renemadsen <[email protected]>
1 parent 1ad5a3e commit 0c1b1d8

File tree

3 files changed

+20
-35
lines changed

3 files changed

+20
-35
lines changed

src/EFCore.MySql/Query/ExpressionVisitors/Internal/MySqlParameterInliningExpressionVisitor.cs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ public class MySqlParameterInliningExpressionVisitor : ExpressionVisitor
2323
private readonly ISqlExpressionFactory _sqlExpressionFactory;
2424
private readonly IMySqlOptions _options;
2525

26-
private IReadOnlyDictionary<string, object> _parametersValues;
27-
private bool _canCache;
26+
private ParametersCacheDecorator _parametersDecorator;
2827

2928
private bool _shouldInlineParameters;
3029

@@ -38,18 +37,15 @@ public MySqlParameterInliningExpressionVisitor(
3837
_options = options;
3938
}
4039

41-
public virtual Expression Process(Expression expression, IReadOnlyDictionary<string, object> parametersValues, out bool canCache)
40+
public virtual Expression Process(Expression expression, ParametersCacheDecorator parametersDecorator)
4241
{
4342
Check.NotNull(expression, nameof(expression));
4443

45-
_parametersValues = parametersValues;
46-
_canCache = true;
44+
_parametersDecorator = parametersDecorator;
4745
_shouldInlineParameters = false;
4846

4947
var result = Visit(expression);
5048

51-
canCache = _canCache;
52-
5349
return result;
5450
}
5551

@@ -103,12 +99,12 @@ protected virtual Expression VisitSqlParameter(SqlParameterExpression sqlParamet
10399
return sqlParameterExpression;
104100
}
105101

106-
_canCache = false;
102+
var parameterValues = _parametersDecorator.GetAndDisableCaching();
107103

108104
return new MySqlInlinedParameterExpression(
109105
sqlParameterExpression,
110106
(SqlConstantExpression)_sqlExpressionFactory.Constant(
111-
_parametersValues[sqlParameterExpression.Name],
107+
parameterValues[sqlParameterExpression.Name],
112108
sqlParameterExpression.TypeMapping));
113109
}
114110

src/EFCore.MySql/Query/Internal/MySqlParameterBasedSqlProcessor.cs

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33

44
#nullable enable
55

6-
using System;
7-
using System.Collections.Generic;
86
using System.Linq.Expressions;
97
using Microsoft.EntityFrameworkCore.Query;
108
using Microsoft.EntityFrameworkCore.Utilities;
@@ -26,20 +24,14 @@ public MySqlParameterBasedSqlProcessor(
2624
_options = options;
2725
}
2826

29-
[Obsolete]
30-
public override Expression Optimize(
31-
Expression queryExpression,
32-
IReadOnlyDictionary<string, object?> parametersValues,
33-
out bool canCache)
27+
public override Expression Process(Expression queryExpression, ParametersCacheDecorator parametersDecorator)
3428
{
35-
queryExpression = base.Optimize(queryExpression, parametersValues, out canCache);
29+
queryExpression = base.Process(queryExpression, parametersDecorator);
3630

3731
if (_options.ServerVersion.Supports.MySqlBugLimit0Offset0ExistsWorkaround)
3832
{
3933
queryExpression = new SkipTakeCollapsingExpressionVisitor(Dependencies.SqlExpressionFactory)
40-
.Process(queryExpression, parametersValues, out var canCache2);
41-
42-
canCache &= canCache2;
34+
.Process(queryExpression, parametersDecorator);
4335
}
4436

4537
if (_options.IndexOptimizedBooleanColumns)
@@ -51,14 +43,16 @@ public override Expression Optimize(
5143
queryExpression = new MySqlParameterInliningExpressionVisitor(
5244
Dependencies.TypeMappingSource,
5345
Dependencies.SqlExpressionFactory,
54-
_options).Process(queryExpression, parametersValues, out var canCache3);
55-
56-
canCache &= canCache3;
46+
_options).Process(queryExpression, parametersDecorator);
5747

5848
// Run the compatibility checks as late in the query pipeline (before the actual SQL translation happens) as reasonable.
5949
queryExpression = new MySqlCompatibilityExpressionVisitor(_options).Visit(queryExpression);
6050

6151
return queryExpression;
6252
}
53+
54+
/// <inheritdoc />
55+
protected override Expression ProcessSqlNullability(Expression selectExpression, ParametersCacheDecorator parametersDecorator)
56+
=> new MySqlSqlNullabilityProcessor(Dependencies, Parameters).Process(selectExpression, parametersDecorator);
6357
}
6458
}

src/EFCore.MySql/Query/Internal/SkipTakeCollapsingExpressionVisitor.cs

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,32 +15,27 @@ public class SkipTakeCollapsingExpressionVisitor : ExpressionVisitor
1515
{
1616
private readonly ISqlExpressionFactory _sqlExpressionFactory;
1717

18-
private IReadOnlyDictionary<string, object?> _parameterValues;
19-
private bool _canCache;
18+
private ParametersCacheDecorator _parametersDecorator;
2019

2120
public SkipTakeCollapsingExpressionVisitor(ISqlExpressionFactory sqlExpressionFactory)
2221
{
2322
Check.NotNull(sqlExpressionFactory, nameof(sqlExpressionFactory));
2423

2524
_sqlExpressionFactory = sqlExpressionFactory;
26-
_parameterValues = null!;
25+
_parametersDecorator = null!;
2726
}
2827

2928
public virtual Expression Process(
3029
Expression selectExpression,
31-
IReadOnlyDictionary<string, object?> parametersValues,
32-
out bool canCache)
30+
ParametersCacheDecorator parametersDecorator)
3331
{
3432
Check.NotNull(selectExpression, nameof(selectExpression));
35-
Check.NotNull(parametersValues, nameof(parametersValues));
33+
Check.NotNull(parametersDecorator, nameof(parametersDecorator));
3634

37-
_parameterValues = parametersValues;
38-
_canCache = true;
35+
_parametersDecorator = parametersDecorator;
3936

4037
var result = Visit(selectExpression);
4138

42-
canCache = _canCache;
43-
4439
return result;
4540
}
4641

@@ -74,8 +69,8 @@ bool IsZero(SqlExpression? sqlExpression)
7469
when constant.Value is int intValue:
7570
return intValue == 0;
7671
case SqlParameterExpression parameter:
77-
_canCache = false;
78-
return _parameterValues[parameter.Name] is int value && value == 0;
72+
var parameterValues = _parametersDecorator.GetAndDisableCaching();
73+
return parameterValues[parameter.Name] is int value && value == 0;
7974

8075
default:
8176
return false;

0 commit comments

Comments
 (0)