From acfb88d9c24188b4132a9d1de56e36de589de2a1 Mon Sep 17 00:00:00 2001 From: Smit Patel Date: Fri, 30 Oct 2020 15:08:04 -0700 Subject: [PATCH] Cleanup PR #19473 Resolves #17223 --- .../SqliteObjectToStringTranslator.cs | 25 +++++++++++-------- .../ConvertToProviderTypesSqliteTest.cs | 5 ---- .../CustomConvertersSqliteTest.cs | 5 ---- .../Query/NorthwindWhereQuerySqliteTest.cs | 12 ++++++--- 4 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/EFCore.Sqlite.Core/Query/Internal/SqliteObjectToStringTranslator.cs b/src/EFCore.Sqlite.Core/Query/Internal/SqliteObjectToStringTranslator.cs index 2bdae2e4a0e..b3be57b267b 100644 --- a/src/EFCore.Sqlite.Core/Query/Internal/SqliteObjectToStringTranslator.cs +++ b/src/EFCore.Sqlite.Core/Query/Internal/SqliteObjectToStringTranslator.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Reflection; using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Query; using Microsoft.EntityFrameworkCore.Query.SqlExpressions; using Microsoft.EntityFrameworkCore.Utilities; @@ -21,23 +22,23 @@ public class SqliteObjectToStringTranslator : IMethodCallTranslator { private static readonly HashSet _typeMapping = new HashSet { - typeof(int), - typeof(long), - typeof(Guid), + typeof(bool), typeof(byte), typeof(byte[]), + typeof(char), + typeof(DateTime), + typeof(DateTimeOffset), typeof(decimal), typeof(double), typeof(float), - typeof(char), + typeof(Guid), + typeof(int), + typeof(long), + typeof(sbyte), typeof(short), - typeof(DateTime), - typeof(DateTimeOffset), typeof(TimeSpan), typeof(uint), typeof(ushort), - typeof(sbyte), - typeof(bool), }; private readonly ISqlExpressionFactory _sqlExpressionFactory; @@ -57,7 +58,11 @@ public SqliteObjectToStringTranslator([NotNull] ISqlExpressionFactory sqlExpress /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// - public virtual SqlExpression Translate(SqlExpression instance, MethodInfo method, IReadOnlyList arguments) + public virtual SqlExpression Translate( + SqlExpression instance, + MethodInfo method, + IReadOnlyList arguments, + IDiagnosticsLogger logger) { Check.NotNull(method, nameof(method)); Check.NotNull(arguments, nameof(arguments)); @@ -65,7 +70,7 @@ public virtual SqlExpression Translate(SqlExpression instance, MethodInfo method return method.Name == nameof(ToString) && arguments.Count == 0 && instance != null - && _typeMapping.Contains(instance.Type.UnwrapNullableType()) + && _typeMapping.Contains(instance.Type) ? _sqlExpressionFactory.Convert(instance, typeof(string)) : null; } diff --git a/test/EFCore.Sqlite.FunctionalTests/ConvertToProviderTypesSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/ConvertToProviderTypesSqliteTest.cs index 602fc60943a..70bcc5df654 100644 --- a/test/EFCore.Sqlite.FunctionalTests/ConvertToProviderTypesSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/ConvertToProviderTypesSqliteTest.cs @@ -17,11 +17,6 @@ public ConvertToProviderTypesSqliteTest(ConvertToProviderTypesSqliteFixture fixt //fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); } - public override void Object_to_string_conversion() - { - // Return values are not string - } - public class ConvertToProviderTypesSqliteFixture : ConvertToProviderTypesFixtureBase { public override bool StrictEquality diff --git a/test/EFCore.Sqlite.FunctionalTests/CustomConvertersSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/CustomConvertersSqliteTest.cs index 692d33aee2c..e80b5ec0388 100644 --- a/test/EFCore.Sqlite.FunctionalTests/CustomConvertersSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/CustomConvertersSqliteTest.cs @@ -104,11 +104,6 @@ public override void Where_bool_gets_converted_to_equality_when_value_conversion WHERE ""b"".""IndexerVisible"" <> 'Aye'"); } - public override void Object_to_string_conversion() - { - // Return values are not string - } - private void AssertSql(params string[] expected) => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/NorthwindWhereQuerySqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/NorthwindWhereQuerySqliteTest.cs index 18775eca3d2..e47236fd2a6 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/NorthwindWhereQuerySqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/NorthwindWhereQuerySqliteTest.cs @@ -221,9 +221,15 @@ public override async Task Decimal_cast_to_double_works(bool async) WHERE CAST(""p"".""UnitPrice"" AS REAL) > 100.0"); } - [ConditionalTheory(Skip = "Issue#17223")] - public override Task Like_with_non_string_column_using_ToString(bool async) - => base.Like_with_non_string_column_using_ToString(async); + public override async Task Like_with_non_string_column_using_ToString(bool async) + { + await base.Like_with_non_string_column_using_ToString(async); + + AssertSql( + @"SELECT ""o"".""OrderID"", ""o"".""CustomerID"", ""o"".""EmployeeID"", ""o"".""OrderDate"" +FROM ""Orders"" AS ""o"" +WHERE CAST(""o"".""OrderID"" AS TEXT) LIKE '%20%'"); + } private void AssertSql(params string[] expected) => Fixture.TestSqlLoggerFactory.AssertBaseline(expected);