Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 6 additions & 9 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,12 @@ jobs:
fail-fast: false
matrix:
dbVersion:
- 8.4.3-mysql
- 8.0.40-mysql
- 11.6.2-mariadb
- 11.5.2-mariadb
- 11.4.4-mariadb
- 11.3.2-mariadb
- 10.11.10-mariadb
- 10.6.20-mariadb
- 10.5.27-mariadb
- 8.4.7-mysql
- 8.0.44-mysql
- 11.8.5-mariadb
- 11.4.9-mariadb
- 10.11.15-mariadb
- 10.6.24-mariadb
os:
- ubuntu-latest
- windows-latest
Expand Down
10 changes: 5 additions & 5 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@
</PropertyGroup>

<PropertyGroup>
<PomeloTargetFramework>net8.0</PomeloTargetFramework>
<PomeloTestTargetFramework>net9.0</PomeloTestTargetFramework>
<EfCoreTargetFramework>net8.0</EfCoreTargetFramework>
<EfCoreTestTargetFramework>net9.0</EfCoreTestTargetFramework>
<MySqlConnectorTargetFramework>net8.0</MySqlConnectorTargetFramework>
<PomeloTargetFramework>net10.0</PomeloTargetFramework>
<PomeloTestTargetFramework>net10.0</PomeloTestTargetFramework>
<EfCoreTargetFramework>net10.0</EfCoreTargetFramework>
<EfCoreTestTargetFramework>net10.0</EfCoreTestTargetFramework>
<MySqlConnectorTargetFramework>net10.0</MySqlConnectorTargetFramework>
<MySqlConnectorDependencyInjectionTargetFramework>net8.0</MySqlConnectorDependencyInjectionTargetFramework>
</PropertyGroup>

Expand Down
67 changes: 33 additions & 34 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<Project>
<PropertyGroup Label="Common Versions">
<!-- We shoud try: [9.0.0,9.1.0-0)
<!-- In theory, the following should work, but it doesn't: [10.0.0,10.1.0-0)
`-0` is the smallest possible prerelease version according to SemVer2.
-->
<EFCoreVersion>[9.0.0,9.0.999]</EFCoreVersion>
<EFCoreVersion>[10.0.0,10.0.999]</EFCoreVersion>
</PropertyGroup>

<ItemGroup Label="Dependencies">
Expand All @@ -12,49 +12,48 @@
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="$(EFCoreVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="$(EFCoreVersion)" />

<PackageVersion Include="MySqlConnector" Version="2.4.0" />
<PackageVersion Include="MySqlConnector.DependencyInjection" Version="2.4.0" />
<PackageVersion Include="MySqlConnector" Version="2.5.0" />
<PackageVersion Include="MySqlConnector.DependencyInjection" Version="2.5.0" />

<PackageVersion Include="NetTopologySuite" Version="2.5.0" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
<PackageVersion Include="NetTopologySuite" Version="2.6.0" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.4" />

<PackageVersion Include="Castle.Core" Version="5.1.1" />
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="9.0.0" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="9.0.0" />
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="9.0.0" />
<!--<PackageVersion Include="Microsoft.Bcl.HashCode" Version="1.1.1" />-->
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="9.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="9.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="9.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration.FileExtensions" Version="9.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="9.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="9.0.0" /> <!-- CHECK: used? -->
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="9.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyModel" Version="9.0.0" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="9.0.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageVersion Include="Castle.Core" Version="5.2.1" />
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="10.0.0" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="10.0.0" />
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration.FileExtensions" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="10.0.0" /> <!-- CHECK: used? -->
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyModel" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="10.0.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
<PackageVersion Include="Moq" Version="4.20.72" />
<PackageVersion Include="System.Collections.Immutable" Version="9.0.0" />
<PackageVersion Include="System.Collections.Immutable" Version="10.0.0" />
<PackageVersion Include="System.ComponentModel.TypeConverter" Version="4.3.0" />
<PackageVersion Include="System.Diagnostics.DiagnosticSource" Version="9.0.0" />
<PackageVersion Include="System.Diagnostics.DiagnosticSource" Version="10.0.0" />
<PackageVersion Include="GitHubActionsTestLogger" Version="2.4.1" />
<PackageVersion Include="Xunit.SkippableFact" Version="1.4.13" />
<PackageVersion Include="Xunit.SkippableFact" Version="1.5.23" />

<!-- Keep at the same level that the EF Core projects use. -->
<PackageVersion Include="xunit.assert" Version="2.9.2" />
<PackageVersion Include="xunit.core" Version="2.9.2" />
<PackageVersion Include="xunit.runner.console" Version="2.9.2" />
<PackageVersion Include="xunit.runner.visualstudio" Version="2.8.2" />
<PackageVersion Include="xunit.assert" Version="2.9.3" />
<PackageVersion Include="xunit.core" Version="2.9.3" />
<PackageVersion Include="xunit.runner.console" Version="2.9.3" />
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.5" />
<PackageVersion Include="DotNetAnalyzers.DocumentationAnalyzers" Version="1.0.0-beta.59" />
<PackageVersion Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="All" />

<!-- Needed when using EFCore.Design assembly from local EF Core repository. -->
<PackageVersion Include="Microsoft.CodeAnalysis" Version="4.10.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.10.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Features" Version="4.10.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.10.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.VisualBasic.Features" Version="4.10.0" />
<PackageVersion Include="System.Text.Json" Version="9.0.0" />
<PackageVersion Include="Microsoft.CodeAnalysis" Version="4.14.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.14.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Features" Version="4.14.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.14.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.VisualBasic.Features" Version="4.14.0" />
<PackageVersion Include="System.Text.Json" Version="10.0.0" />
</ItemGroup>
</Project>
6 changes: 3 additions & 3 deletions Version.props
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
We also used alpha/beta/silver release types in the past, but they mix poorly with the ones above when orderend according to SemVer2
rules.
-->
<VersionPrefix>9.0.1</VersionPrefix>
<PreReleaseVersionLabel>servicing</PreReleaseVersionLabel>
<VersionPrefix>10.0.0</VersionPrefix>
<PreReleaseVersionLabel>preview</PreReleaseVersionLabel>
<PreReleaseVersionIteration>1</PreReleaseVersionIteration>

<!--
Expand All @@ -22,7 +22,7 @@
Core `9.0.0-preview.1`).
If no EF Core release is explicitly targeted, release version correlation should be assumed.
-->
<TargetedEfCoreVersionPrefix></TargetedEfCoreVersionPrefix> <!-- e.g. `` (empty) or `9.0.0` -->
<TargetedEfCoreVersionPrefix>10.0.0</TargetedEfCoreVersionPrefix> <!-- e.g. `` (empty) or `9.0.0` -->
<TargetedEfCoreVersionPreReleaseLabel></TargetedEfCoreVersionPreReleaseLabel> <!-- e.g. `` (empty) or `preview` -->
<TargetedEfCoreVersionPreReleaseIteration></TargetedEfCoreVersionPreReleaseIteration> <!-- e.g. `` (empty) or `1` -->

Expand Down
2 changes: 1 addition & 1 deletion dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"isRoot": true,
"tools": {
"dotnet-ef": {
"version": "9.0.0",
"version": "10.0.0",
"commands": [
"dotnet-ef"
]
Expand Down
2 changes: 1 addition & 1 deletion global.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"sdk": {
"version": "9.0.100",
"version": "10.0.100",
"allowPrerelease": false,
"rollForward": "latestFeature"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,7 @@
<PackageReference Include="Microsoft.Extensions.Configuration" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" />
<PackageReference Include="Microsoft.Extensions.Logging" />
<PackageReference Include="System.Diagnostics.DiagnosticSource" />
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" />
<PackageReference Include="System.Collections.Immutable" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,7 @@
<PackageReference Include="Microsoft.Extensions.Configuration" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" />
<PackageReference Include="Microsoft.Extensions.Logging" />
<PackageReference Include="System.Diagnostics.DiagnosticSource" />
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" />
<PackageReference Include="System.Collections.Immutable" />
</ItemGroup>

<ItemGroup>
Expand Down
2 changes: 0 additions & 2 deletions src/EFCore.MySql.NTS/EFCore.MySql.NTS.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,7 @@
<PackageReference Include="Microsoft.Extensions.Configuration" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" />
<PackageReference Include="Microsoft.Extensions.Logging" />
<PackageReference Include="System.Diagnostics.DiagnosticSource" />
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" />
<PackageReference Include="System.Collections.Immutable" />
</ItemGroup>

<ItemGroup>
Expand Down
2 changes: 0 additions & 2 deletions src/EFCore.MySql/EFCore.MySql.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,7 @@
<PackageReference Include="Microsoft.Extensions.Configuration" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" />
<PackageReference Include="Microsoft.Extensions.Logging" />
<PackageReference Include="System.Diagnostics.DiagnosticSource" />
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" />
<PackageReference Include="System.Collections.Immutable" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public static DbContextOptionsBuilder UseMySql(
ConfigureWarnings(optionsBuilder);

var mySqlDbContextOptionsBuilder = new MySqlDbContextOptionsBuilder(optionsBuilder)
.TranslateParameterizedCollectionsToConstants();
.UseParameterizedCollectionMode(ParameterTranslationMode.Constant);

mySqlOptionsAction?.Invoke(mySqlDbContextOptionsBuilder);

Expand Down Expand Up @@ -108,7 +108,7 @@ public static DbContextOptionsBuilder UseMySql(
ConfigureWarnings(optionsBuilder);

var mySqlDbContextOptionsBuilder = new MySqlDbContextOptionsBuilder(optionsBuilder)
.TranslateParameterizedCollectionsToConstants();
.UseParameterizedCollectionMode(ParameterTranslationMode.Constant);

mySqlOptionsAction?.Invoke(mySqlDbContextOptionsBuilder);

Expand Down Expand Up @@ -158,7 +158,7 @@ public static DbContextOptionsBuilder UseMySql(
ConfigureWarnings(optionsBuilder);

var mySqlDbContextOptionsBuilder = new MySqlDbContextOptionsBuilder(optionsBuilder)
.TranslateParameterizedCollectionsToConstants();
.UseParameterizedCollectionMode(ParameterTranslationMode.Constant);

mySqlOptionsAction?.Invoke(mySqlDbContextOptionsBuilder);

Expand Down Expand Up @@ -205,7 +205,7 @@ public static DbContextOptionsBuilder UseMySql(
ConfigureWarnings(optionsBuilder);

var mySqlDbContextOptionsBuilder = new MySqlDbContextOptionsBuilder(optionsBuilder)
.TranslateParameterizedCollectionsToConstants();
.UseParameterizedCollectionMode(ParameterTranslationMode.Constant);

mySqlOptionsAction?.Invoke(mySqlDbContextOptionsBuilder);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -524,8 +524,7 @@ protected virtual SqlExpression GetLikeExpressionUsingParameter(
RelationalTypeMapping stringTypeMapping,
StartsEndsWithContains methodType)
{
if (pattern is SqlParameterExpression patternParameter &&
patternParameter.Name.StartsWith(QueryCompilationContext.QueryParameterPrefix, StringComparison.Ordinal))
if (pattern is SqlParameterExpression patternParameter)
{
// The pattern is a parameter, register a runtime parameter that will contain the rewritten LIKE pattern, where
// all special characters have been escaped.
Expand Down Expand Up @@ -718,7 +717,7 @@ private static string ConstructLikePatternParameter(
QueryContext queryContext,
string baseParameterName,
StartsEndsWithContains methodType)
=> queryContext.ParameterValues[baseParameterName] switch
=> queryContext.Parameters[baseParameterName] switch
{
null => null,

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -541,6 +541,20 @@ protected override Expression VisitLeftJoin(LeftJoinExpression leftJoinExpressio
return leftJoinExpression.Update(table, joinPredicate);
}

protected override Expression VisitRightJoin(RightJoinExpression rightJoinExpression)
{
Check.NotNull(rightJoinExpression, nameof(rightJoinExpression));

var parentOptimize = _optimize;
_optimize = false;
var table = (TableExpressionBase)Visit(rightJoinExpression.Table);
_optimize = true;
var joinPredicate = (SqlExpression)Visit(rightJoinExpression.JoinPredicate);
_optimize = parentOptimize;

return rightJoinExpression.Update(table, joinPredicate);
}

protected override Expression VisitRowValue(RowValueExpression rowValueExpression)
{
var parentOptimize = _optimize;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// Copyright (c) Pomelo Foundation. All rights reserved.
// Licensed under the MIT. See LICENSE in the project root for license information.

using System;
using System.Linq;
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore.Query;
Expand Down Expand Up @@ -138,7 +139,7 @@ havingExpression is not SqlConstantExpression &&
if (!_containsAggregateFunctionExpressionVisitor.ProcessUntilSelect(havingExpression))
{
var subquery = selectExpression.Clone();
subquery.ReplaceProjection([]);
subquery.ReplaceProjection(Array.Empty<Expression>());

var alias = "having";
var havingProjectionExpression = new ProjectionExpression(havingExpression, alias);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
// Licensed under the MIT. See LICENSE in the project root for license information.

using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore.Query;
using Microsoft.EntityFrameworkCore.Query.SqlExpressions;
Expand All @@ -23,8 +22,7 @@ public class MySqlParameterInliningExpressionVisitor : ExpressionVisitor
private readonly ISqlExpressionFactory _sqlExpressionFactory;
private readonly IMySqlOptions _options;

private IReadOnlyDictionary<string, object> _parametersValues;
private bool _canCache;
private ParametersCacheDecorator _parametersDecorator;

private bool _shouldInlineParameters;

Expand All @@ -38,19 +36,14 @@ public MySqlParameterInliningExpressionVisitor(
_options = options;
}

public virtual Expression Process(Expression expression, IReadOnlyDictionary<string, object> parametersValues, out bool canCache)
public virtual Expression Process(Expression expression, ParametersCacheDecorator parametersDecorator)
{
Check.NotNull(expression, nameof(expression));

_parametersValues = parametersValues;
_canCache = true;
_parametersDecorator = parametersDecorator;
_shouldInlineParameters = false;

var result = Visit(expression);

canCache = _canCache;

return result;
return Visit(expression);
}

protected override Expression VisitExtension(Expression extensionExpression)
Expand Down Expand Up @@ -103,12 +96,12 @@ protected virtual Expression VisitSqlParameter(SqlParameterExpression sqlParamet
return sqlParameterExpression;
}

_canCache = false;
var parametersValues = _parametersDecorator.GetAndDisableCaching();

return new MySqlInlinedParameterExpression(
sqlParameterExpression,
(SqlConstantExpression)_sqlExpressionFactory.Constant(
_parametersValues[sqlParameterExpression.Name],
parametersValues[sqlParameterExpression.Name],
sqlParameterExpression.TypeMapping));
}

Expand Down
Loading
Loading