From 57355b1cafd31be3efac59d45e8c8a73f36a7657 Mon Sep 17 00:00:00 2001 From: Vladimir Kuznetsov Date: Fri, 28 Jun 2024 23:40:25 +0400 Subject: [PATCH 1/2] Translation of TimeOnly.FromTimeSpan on SQL Server no-op fix #34025 --- .../Translators/SqlServerTimeOnlyMethodTranslator.cs | 3 ++- .../Query/GearsOfWarQuerySqlServerTest.cs | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/EFCore.SqlServer/Query/Internal/Translators/SqlServerTimeOnlyMethodTranslator.cs b/src/EFCore.SqlServer/Query/Internal/Translators/SqlServerTimeOnlyMethodTranslator.cs index 53e602d74a5..e79debbae4b 100644 --- a/src/EFCore.SqlServer/Query/Internal/Translators/SqlServerTimeOnlyMethodTranslator.cs +++ b/src/EFCore.SqlServer/Query/Internal/Translators/SqlServerTimeOnlyMethodTranslator.cs @@ -62,7 +62,8 @@ public SqlServerTimeOnlyMethodTranslator(ISqlExpressionFactory sqlExpressionFact if ((method == FromDateTime || method == FromTimeSpan) && instance is null - && arguments.Count == 1) + && arguments.Count == 1 + && arguments[0].Type != typeof(TimeSpan)) { return _sqlExpressionFactory.Convert(arguments[0], typeof(TimeOnly)); } diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/GearsOfWarQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/GearsOfWarQuerySqlServerTest.cs index 2d227cda094..3adb2e9aabf 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/GearsOfWarQuerySqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/GearsOfWarQuerySqlServerTest.cs @@ -9352,7 +9352,7 @@ public override async Task Where_TimeOnly_FromTimeSpan_compared_to_property(bool """ SELECT [m].[Id], [m].[BriefingDocument], [m].[BriefingDocumentFileExtension], [m].[CodeName], [m].[Date], [m].[Difficulty], [m].[Duration], [m].[Rating], [m].[Time], [m].[Timeline] FROM [Missions] AS [m] -WHERE CAST([m].[Duration] AS time) < [m].[Time] +WHERE [m].[Duration] < [m].[Time] """); } @@ -9366,7 +9366,7 @@ public override async Task Where_TimeOnly_FromTimeSpan_compared_to_parameter(boo SELECT [m].[Id], [m].[BriefingDocument], [m].[BriefingDocumentFileExtension], [m].[CodeName], [m].[Date], [m].[Difficulty], [m].[Duration], [m].[Rating], [m].[Time], [m].[Timeline] FROM [Missions] AS [m] -WHERE CAST([m].[Duration] AS time) = @__time_0 +WHERE [m].[Duration] = @__time_0 """); } @@ -9378,7 +9378,7 @@ public override async Task Order_by_TimeOnly_FromTimeSpan(bool async) """ SELECT [m].[Id], [m].[BriefingDocument], [m].[BriefingDocumentFileExtension], [m].[CodeName], [m].[Date], [m].[Difficulty], [m].[Duration], [m].[Rating], [m].[Time], [m].[Timeline] FROM [Missions] AS [m] -ORDER BY CAST([m].[Duration] AS time) +ORDER BY [m].[Duration] """); } From 6d627e423ccffc123bdefba65450d33114672c68 Mon Sep 17 00:00:00 2001 From: Vladimir Kuznetsov <109842483+kuznetsovvj@users.noreply.github.com> Date: Wed, 3 Jul 2024 22:20:49 +0400 Subject: [PATCH 2/2] Update src/EFCore.SqlServer/Query/Internal/Translators/SqlServerTimeOnlyMethodTranslator.cs Co-authored-by: Andrea Canciani --- .../Translators/SqlServerTimeOnlyMethodTranslator.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/EFCore.SqlServer/Query/Internal/Translators/SqlServerTimeOnlyMethodTranslator.cs b/src/EFCore.SqlServer/Query/Internal/Translators/SqlServerTimeOnlyMethodTranslator.cs index e79debbae4b..6a9f952c816 100644 --- a/src/EFCore.SqlServer/Query/Internal/Translators/SqlServerTimeOnlyMethodTranslator.cs +++ b/src/EFCore.SqlServer/Query/Internal/Translators/SqlServerTimeOnlyMethodTranslator.cs @@ -62,10 +62,11 @@ public SqlServerTimeOnlyMethodTranslator(ISqlExpressionFactory sqlExpressionFact if ((method == FromDateTime || method == FromTimeSpan) && instance is null - && arguments.Count == 1 - && arguments[0].Type != typeof(TimeSpan)) + && arguments.Count == 1) { - return _sqlExpressionFactory.Convert(arguments[0], typeof(TimeOnly)); + return arguments[0].Type is typeof(TimeSpan) + ? arguments[0] + : _sqlExpressionFactory.Convert(arguments[0], typeof(TimeOnly)); } if (instance is null)