Skip to content

Commit 45aeeda

Browse files
committed
feat: port Pomelo.EntityFrameworkCore.MySql to .NET 10 / EF Core 10
- Target net10.0 in Directory.Build.props and Directory.Packages.props - Add VisitRightJoin(RightJoinExpression) in MySqlBoolOptimizingExpressionVisitor (EF Core 10) - Update MySqlParameterBasedSqlProcessor.ProcessSqlNullability to (Expression, ParametersCacheDecorator) - Mark Optimize and IsValidSelectExpressionForExecuteDelete as [Obsolete] per base class - Replace TranslateParameterizedCollectionsToConstants with UseParameterizedCollectionMode(ParameterTranslationMode.Constant) - Replace QueryParameterPrefix with hardcoded "__", QueryContext.ParameterValues with Parameters - Update MySqlQueryCompilationContext constructor (remove 5-param overload) - Replace AbstractionsStrings calls with inline messages in Check.cs - Integrate ported Pomelo via ProjectReference in ZahelLibrary, IdentityProvider, Admin, ServiceTest
1 parent 14c2cd5 commit 45aeeda

13 files changed

Lines changed: 75 additions & 38 deletions

.vscode/settings.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"markdown.styles": [
3+
"https://socialsimulation.net/css/post.min.css"
4+
]
5+
}

.vscode/tasks.json

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
11
{
2-
"version": "0.1.0",
2+
"version": "2.0.0",
33
"command": "dotnet",
4-
"isShellCommand": true,
54
"args": [],
65
"tasks": [
76
{
8-
"taskName": "build",
7+
"label": "build",
8+
"type": "shell",
9+
"command": "dotnet",
910
"args": [
11+
"build",
1012
"${workspaceRoot}/test/EFCore.MySql.IntegrationTests/EFCore.MySql.IntegrationTests.csproj"
1113
],
12-
"isBuildCommand": true,
13-
"problemMatcher": "$msCompile"
14+
"problemMatcher": "$msCompile",
15+
"group": {
16+
"_id": "build",
17+
"isDefault": false
18+
}
1419
}
1520
]
1621
}

.vscode/tasks.json.old

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"version": "0.1.0",
3+
"command": "dotnet",
4+
"isShellCommand": true,
5+
"args": [],
6+
"tasks": [
7+
{
8+
"taskName": "build",
9+
"args": [
10+
"${workspaceRoot}/test/EFCore.MySql.IntegrationTests/EFCore.MySql.IntegrationTests.csproj"
11+
],
12+
"isBuildCommand": true,
13+
"problemMatcher": "$msCompile"
14+
}
15+
]
16+
}

Directory.Build.props

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@
2626
</PropertyGroup>
2727

2828
<PropertyGroup>
29-
<PomeloTargetFramework>net8.0</PomeloTargetFramework>
30-
<PomeloTestTargetFramework>net9.0</PomeloTestTargetFramework>
31-
<EfCoreTargetFramework>net8.0</EfCoreTargetFramework>
32-
<EfCoreTestTargetFramework>net9.0</EfCoreTestTargetFramework>
29+
<PomeloTargetFramework>net10.0</PomeloTargetFramework>
30+
<PomeloTestTargetFramework>net10.0</PomeloTestTargetFramework>
31+
<EfCoreTargetFramework>net10.0</EfCoreTargetFramework>
32+
<EfCoreTestTargetFramework>net10.0</EfCoreTestTargetFramework>
3333
<MySqlConnectorTargetFramework>net8.0</MySqlConnectorTargetFramework>
3434
<MySqlConnectorDependencyInjectionTargetFramework>net8.0</MySqlConnectorDependencyInjectionTargetFramework>
3535
</PropertyGroup>

Directory.Packages.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<!-- We shoud try: [9.0.0,9.1.0-0)
44
`-0` is the smallest possible prerelease version according to SemVer2.
55
-->
6-
<EFCoreVersion>[9.0.0,9.0.999]</EFCoreVersion>
6+
<EFCoreVersion>[10.0.0,10.0.999]</EFCoreVersion>
77
</PropertyGroup>
88

99
<ItemGroup Label="Dependencies">

src/EFCore.MySql/Extensions/MySqlDbContextOptionsBuilderExtensions.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public static DbContextOptionsBuilder UseMySql(
6262
ConfigureWarnings(optionsBuilder);
6363

6464
var mySqlDbContextOptionsBuilder = new MySqlDbContextOptionsBuilder(optionsBuilder)
65-
.TranslateParameterizedCollectionsToConstants();
65+
.UseParameterizedCollectionMode(ParameterTranslationMode.Constant);
6666

6767
mySqlOptionsAction?.Invoke(mySqlDbContextOptionsBuilder);
6868

@@ -108,7 +108,7 @@ public static DbContextOptionsBuilder UseMySql(
108108
ConfigureWarnings(optionsBuilder);
109109

110110
var mySqlDbContextOptionsBuilder = new MySqlDbContextOptionsBuilder(optionsBuilder)
111-
.TranslateParameterizedCollectionsToConstants();
111+
.UseParameterizedCollectionMode(ParameterTranslationMode.Constant);
112112

113113
mySqlOptionsAction?.Invoke(mySqlDbContextOptionsBuilder);
114114

@@ -158,7 +158,7 @@ public static DbContextOptionsBuilder UseMySql(
158158
ConfigureWarnings(optionsBuilder);
159159

160160
var mySqlDbContextOptionsBuilder = new MySqlDbContextOptionsBuilder(optionsBuilder)
161-
.TranslateParameterizedCollectionsToConstants();
161+
.UseParameterizedCollectionMode(ParameterTranslationMode.Constant);
162162

163163
mySqlOptionsAction?.Invoke(mySqlDbContextOptionsBuilder);
164164

@@ -205,7 +205,7 @@ public static DbContextOptionsBuilder UseMySql(
205205
ConfigureWarnings(optionsBuilder);
206206

207207
var mySqlDbContextOptionsBuilder = new MySqlDbContextOptionsBuilder(optionsBuilder)
208-
.TranslateParameterizedCollectionsToConstants();
208+
.UseParameterizedCollectionMode(ParameterTranslationMode.Constant);
209209

210210
mySqlOptionsAction?.Invoke(mySqlDbContextOptionsBuilder);
211211

src/EFCore.MySql/Query/ExpressionTranslators/Internal/MySqlStringComparisonMethodTranslator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,7 @@ protected virtual SqlExpression GetLikeExpressionUsingParameter(
525525
StartsEndsWithContains methodType)
526526
{
527527
if (pattern is SqlParameterExpression patternParameter &&
528-
patternParameter.Name.StartsWith(QueryCompilationContext.QueryParameterPrefix, StringComparison.Ordinal))
528+
patternParameter.Name.StartsWith("__", StringComparison.Ordinal))
529529
{
530530
// The pattern is a parameter, register a runtime parameter that will contain the rewritten LIKE pattern, where
531531
// all special characters have been escaped.
@@ -718,7 +718,7 @@ private static string ConstructLikePatternParameter(
718718
QueryContext queryContext,
719719
string baseParameterName,
720720
StartsEndsWithContains methodType)
721-
=> queryContext.ParameterValues[baseParameterName] switch
721+
=> queryContext.Parameters[baseParameterName] switch
722722
{
723723
null => null,
724724

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,20 @@ protected override Expression VisitLeftJoin(LeftJoinExpression leftJoinExpressio
541541
return leftJoinExpression.Update(table, joinPredicate);
542542
}
543543

544+
protected override Expression VisitRightJoin(RightJoinExpression rightJoinExpression)
545+
{
546+
Check.NotNull(rightJoinExpression, nameof(rightJoinExpression));
547+
548+
var parentOptimize = _optimize;
549+
_optimize = false;
550+
var table = (TableExpressionBase)Visit(rightJoinExpression.Table);
551+
_optimize = true;
552+
var joinPredicate = (SqlExpression)Visit(rightJoinExpression.JoinPredicate);
553+
_optimize = parentOptimize;
554+
555+
return rightJoinExpression.Update(table, joinPredicate);
556+
}
557+
544558
protected override Expression VisitRowValue(RowValueExpression rowValueExpression)
545559
{
546560
var parentOptimize = _optimize;

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

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
// Copyright (c) Pomelo Foundation. All rights reserved.
1+
// Copyright (c) Pomelo Foundation. All rights reserved.
22
// Licensed under the MIT. See LICENSE in the project root for license information.
33

44
#nullable enable
55

6+
using System;
67
using System.Collections.Generic;
78
using System.Linq.Expressions;
89
using Microsoft.EntityFrameworkCore.Query;
@@ -25,6 +26,7 @@ public MySqlParameterBasedSqlProcessor(
2526
_options = options;
2627
}
2728

29+
[Obsolete("RelationalParameterBasedSqlProcessor.Optimize is obsolete")]
2830
public override Expression Optimize(
2931
Expression queryExpression,
3032
IReadOnlyDictionary<string, object?> parametersValues,
@@ -62,16 +64,13 @@ public override Expression Optimize(
6264
/// <inheritdoc />
6365
protected override Expression ProcessSqlNullability(
6466
Expression queryExpression,
65-
IReadOnlyDictionary<string, object?> parametersValues,
66-
out bool canCache)
67+
ParametersCacheDecorator parametersDecorator)
6768
{
6869
Check.NotNull(queryExpression, nameof(queryExpression));
69-
Check.NotNull(parametersValues, nameof(parametersValues));
70+
Check.NotNull(parametersDecorator, nameof(parametersDecorator));
7071

71-
queryExpression = new MySqlSqlNullabilityProcessor(Dependencies, Parameters)
72-
.Process(queryExpression, parametersValues, out canCache);
73-
74-
return queryExpression;
72+
return new MySqlSqlNullabilityProcessor(Dependencies, Parameters)
73+
.Process(queryExpression, parametersDecorator);
7574
}
7675
}
7776
}

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) Pomelo Foundation. All rights reserved.
1+
// Copyright (c) Pomelo Foundation. All rights reserved.
22
// Licensed under the MIT. See LICENSE in the project root for license information.
33

44
using System.Collections.Generic;
@@ -21,9 +21,8 @@ public MySqlQueryCompilationContext(
2121
[NotNull] QueryCompilationContextDependencies dependencies,
2222
[NotNull] RelationalQueryCompilationContextDependencies relationalDependencies,
2323
bool async,
24-
bool precompiling,
25-
IReadOnlySet<string> nonNullableReferenceTypeParameters)
26-
: base(dependencies, relationalDependencies, async, precompiling, nonNullableReferenceTypeParameters)
24+
bool precompiling)
25+
: base(dependencies, relationalDependencies, async, precompiling)
2726
{
2827
}
2928

0 commit comments

Comments
 (0)