diff --git a/src/EFCore.Sqlite.Core/Query/Internal/SqliteObjectToStringTranslator.cs b/src/EFCore.Sqlite.Core/Query/Internal/SqliteObjectToStringTranslator.cs index de5414f8285..4c4821a0cc9 100644 --- a/src/EFCore.Sqlite.Core/Query/Internal/SqliteObjectToStringTranslator.cs +++ b/src/EFCore.Sqlite.Core/Query/Internal/SqliteObjectToStringTranslator.cs @@ -19,6 +19,7 @@ public class SqliteObjectToStringTranslator : IMethodCallTranslator typeof(byte), typeof(byte[]), typeof(char), + typeof(DateOnly), typeof(DateTime), typeof(DateTimeOffset), typeof(decimal), @@ -29,6 +30,7 @@ public class SqliteObjectToStringTranslator : IMethodCallTranslator typeof(long), typeof(sbyte), typeof(short), + typeof(TimeOnly), typeof(TimeSpan), typeof(uint), typeof(ushort) diff --git a/src/EFCore.Sqlite.Core/Query/Internal/SqliteSqlTranslatingExpressionVisitor.cs b/src/EFCore.Sqlite.Core/Query/Internal/SqliteSqlTranslatingExpressionVisitor.cs index 4977e4875f7..aa1e2c3c815 100644 --- a/src/EFCore.Sqlite.Core/Query/Internal/SqliteSqlTranslatingExpressionVisitor.cs +++ b/src/EFCore.Sqlite.Core/Query/Internal/SqliteSqlTranslatingExpressionVisitor.cs @@ -19,11 +19,18 @@ private static readonly IReadOnlyDictionary { + typeof(DateOnly), typeof(DateTime), typeof(DateTimeOffset), + typeof(TimeOnly), typeof(TimeSpan) }, - [ExpressionType.Divide] = new HashSet { typeof(TimeSpan), typeof(ulong) }, + [ExpressionType.Divide] = new HashSet + { + typeof(TimeOnly), + typeof(TimeSpan), + typeof(ulong) + }, [ExpressionType.GreaterThan] = new HashSet { typeof(DateTimeOffset), @@ -49,11 +56,18 @@ private static readonly IReadOnlyDictionary { typeof(ulong) }, - [ExpressionType.Multiply] = new HashSet { typeof(TimeSpan), typeof(ulong) }, + [ExpressionType.Multiply] = new HashSet + { + typeof(TimeOnly), + typeof(TimeSpan), + typeof(ulong) + }, [ExpressionType.Subtract] = new HashSet { + typeof(DateOnly), typeof(DateTime), typeof(DateTimeOffset), + typeof(TimeOnly), typeof(TimeSpan) } }; @@ -120,7 +134,8 @@ protected override Expression VisitUnary(UnaryExpression unaryExpression) visitedExpression.Type); } - if (operandType == typeof(TimeSpan)) + if (operandType == typeof(TimeOnly) + || operandType == typeof(TimeSpan)) { return QueryCompilationContext.NotTranslatedExpression; } diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/GearsOfWarQuerySqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/GearsOfWarQuerySqliteTest.cs index fcbf37b9669..6993119a19e 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/GearsOfWarQuerySqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/GearsOfWarQuerySqliteTest.cs @@ -646,7 +646,7 @@ public override async Task Where_TimeOnly_IsBetween(bool async) public override async Task Where_TimeOnly_subtract_TimeOnly(bool async) { // TimeSpan. Issue #18844. - await Assert.ThrowsAsync(() => base.Where_TimeOnly_subtract_TimeOnly(async)); + await AssertTranslationFailed(() => base.Where_TimeOnly_subtract_TimeOnly(async)); AssertSql(); } diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/TPCGearsOfWarQuerySqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/TPCGearsOfWarQuerySqliteTest.cs index c0d8638ae73..179438bbb43 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/TPCGearsOfWarQuerySqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/TPCGearsOfWarQuerySqliteTest.cs @@ -368,7 +368,7 @@ public override Task Where_TimeOnly_IsBetween(bool async) public override Task Where_TimeOnly_subtract_TimeOnly(bool async) // TimeSpan. Issue #18844. - => Assert.ThrowsAsync(() => base.Where_TimeOnly_subtract_TimeOnly(async)); + => AssertTranslationFailed(() => base.Where_TimeOnly_subtract_TimeOnly(async)); private void AssertSql(params string[] expected) => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/TPTGearsOfWarQuerySqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/TPTGearsOfWarQuerySqliteTest.cs index 4ace1f21dbd..d4ab6d252f4 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/TPTGearsOfWarQuerySqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/TPTGearsOfWarQuerySqliteTest.cs @@ -368,7 +368,7 @@ public override Task Where_TimeOnly_IsBetween(bool async) public override Task Where_TimeOnly_subtract_TimeOnly(bool async) // TimeSpan. Issue #18844. - => Assert.ThrowsAsync(() => base.Where_TimeOnly_subtract_TimeOnly(async)); + => AssertTranslationFailed(() => base.Where_TimeOnly_subtract_TimeOnly(async)); private void AssertSql(params string[] expected) => Fixture.TestSqlLoggerFactory.AssertBaseline(expected);