From c2a96517b72faaf21deeca4e07247accbafe968d Mon Sep 17 00:00:00 2001 From: lajones Date: Fri, 7 Feb 2020 15:56:39 -0800 Subject: [PATCH 1/3] Fix for issue 16701. Brackets around tables names supports not SQL Server providers. --- .../CommandInterceptionTestBase.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/EFCore.Relational.Specification.Tests/CommandInterceptionTestBase.cs b/test/EFCore.Relational.Specification.Tests/CommandInterceptionTestBase.cs index df831d7e5a6..e44833ddf3b 100644 --- a/test/EFCore.Relational.Specification.Tests/CommandInterceptionTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/CommandInterceptionTestBase.cs @@ -114,7 +114,7 @@ public virtual async Task Intercept_non_query_passively(bool async, bool inject) { using (context.Database.BeginTransaction()) { - const string nonQuery = "DELETE FROM Singularity WHERE Id = 77"; + const string nonQuery = "DELETE FROM [Singularity] WHERE Id = 77"; using var listener = Fixture.SubscribeToDiagnosticListener(context.ContextId); var result = async @@ -344,7 +344,7 @@ public virtual async Task Intercept_non_query_to_suppress_execution(bool async, { using (context.Database.BeginTransaction()) { - const string nonQuery = "DELETE FROM Singularity WHERE Id = 77"; + const string nonQuery = "DELETE FROM [Singularity] WHERE Id = 77"; using var listener = Fixture.SubscribeToDiagnosticListener(context.ContextId); var result = async @@ -528,7 +528,7 @@ public virtual async Task Intercept_non_query_to_mutate_command(bool async, bool { using (context.Database.BeginTransaction()) { - const string nonQuery = "DELETE FROM Singularity WHERE Id = 77"; + const string nonQuery = "DELETE FROM [Singularity] WHERE Id = 77"; using var listener = Fixture.SubscribeToDiagnosticListener(context.ContextId); var result = async @@ -548,7 +548,7 @@ public virtual async Task Intercept_non_query_to_mutate_command(bool async, bool protected class MutatingNonQueryCommandInterceptor : CommandInterceptorBase { - public const string MutatedSql = "DELETE FROM Singularity WHERE Id = 78"; + public const string MutatedSql = "DELETE FROM [Singularity] WHERE Id = 78"; public MutatingNonQueryCommandInterceptor() : base(DbCommandMethod.ExecuteNonQuery) @@ -730,7 +730,7 @@ public virtual async Task Intercept_non_query_to_replace_execution(bool async, b { using (context.Database.BeginTransaction()) { - const string nonQuery = "DELETE FROM Singularity WHERE Id = 78"; + const string nonQuery = "DELETE FROM [Singularity] WHERE Id = 78"; using var listener = Fixture.SubscribeToDiagnosticListener(context.ContextId); var result = async @@ -782,7 +782,7 @@ private DbCommand CreateNewCommand(DbCommand command) { var newCommand = command.Connection.CreateCommand(); newCommand.Transaction = command.Transaction; - newCommand.CommandText = "DELETE FROM Singularity WHERE Id = 77"; + newCommand.CommandText = "DELETE FROM [Singularity] WHERE Id = 77"; return newCommand; } @@ -995,7 +995,7 @@ public virtual async Task Intercept_non_query_to_replace_result(bool async, bool { using (context.Database.BeginTransaction()) { - const string nonQuery = "DELETE FROM Singularity WHERE Id = 78"; + const string nonQuery = "DELETE FROM [Singularity] WHERE Id = 78"; using var listener = Fixture.SubscribeToDiagnosticListener(context.ContextId); var result = async @@ -1193,7 +1193,7 @@ public virtual async Task Intercept_non_query_to_throw(bool async, bool inject) { using (context.Database.BeginTransaction()) { - const string nonQuery = "DELETE FROM Singularity WHERE Id = 77"; + const string nonQuery = "DELETE FROM [Singularity] WHERE Id = 77"; var exception = async ? await Assert.ThrowsAsync(() => context.Database.ExecuteSqlRawAsync(nonQuery)) @@ -1326,7 +1326,7 @@ private static async Task TestCompositeNonQueryInterceptors(UniverseContext cont { using (context.Database.BeginTransaction()) { - const string nonQuery = "DELETE FROM Singularity WHERE Id = 78"; + const string nonQuery = "DELETE FROM [Singularity] WHERE Id = 78"; Assert.Equal( 7, From 0cf0fe61f3b99987985e284ed32d6f3415819a0b Mon Sep 17 00:00:00 2001 From: lajones Date: Mon, 10 Feb 2020 08:42:53 -0800 Subject: [PATCH 2/3] Updated to use NormalizeDelimitersInRawString. --- .../CommandInterceptionTestBase.cs | 55 +++++++++++++------ 1 file changed, 37 insertions(+), 18 deletions(-) diff --git a/test/EFCore.Relational.Specification.Tests/CommandInterceptionTestBase.cs b/test/EFCore.Relational.Specification.Tests/CommandInterceptionTestBase.cs index e44833ddf3b..1967d6f09de 100644 --- a/test/EFCore.Relational.Specification.Tests/CommandInterceptionTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/CommandInterceptionTestBase.cs @@ -12,6 +12,7 @@ using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; using Xunit; // ReSharper disable InconsistentNaming @@ -114,7 +115,8 @@ public virtual async Task Intercept_non_query_passively(bool async, bool inject) { using (context.Database.BeginTransaction()) { - const string nonQuery = "DELETE FROM [Singularity] WHERE Id = 77"; + string nonQuery = + NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE Id = 77"); using var listener = Fixture.SubscribeToDiagnosticListener(context.ContextId); var result = async @@ -344,7 +346,8 @@ public virtual async Task Intercept_non_query_to_suppress_execution(bool async, { using (context.Database.BeginTransaction()) { - const string nonQuery = "DELETE FROM [Singularity] WHERE Id = 77"; + string nonQuery = + NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE Id = 77"); using var listener = Fixture.SubscribeToDiagnosticListener(context.ContextId); var result = async @@ -523,12 +526,14 @@ public override Task> ScalarExecutingAsync( [InlineData(true, true)] public virtual async Task Intercept_non_query_to_mutate_command(bool async, bool inject) { - var (context, interceptor) = CreateContext(inject); + var interceptor = new MutatingNonQueryCommandInterceptor(this); + var context = inject ? CreateContext(null, interceptor) : CreateContext(interceptor); using (context) { using (context.Database.BeginTransaction()) { - const string nonQuery = "DELETE FROM [Singularity] WHERE Id = 77"; + string nonQuery = + NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE Id = 77"); using var listener = Fixture.SubscribeToDiagnosticListener(context.ContextId); var result = async @@ -539,7 +544,7 @@ public virtual async Task Intercept_non_query_to_mutate_command(bool async, bool AssertNormalOutcome(context, interceptor, async); - AssertSql(MutatingNonQueryCommandInterceptor.MutatedSql, interceptor.CommandText); + AssertSql(interceptor.MutatedSql, interceptor.CommandText); AssertExecutedEvents(listener); } @@ -548,11 +553,13 @@ public virtual async Task Intercept_non_query_to_mutate_command(bool async, bool protected class MutatingNonQueryCommandInterceptor : CommandInterceptorBase { - public const string MutatedSql = "DELETE FROM [Singularity] WHERE Id = 78"; + public readonly string MutatedSql; - public MutatingNonQueryCommandInterceptor() + public MutatingNonQueryCommandInterceptor(CommandInterceptionTestBase testBase) : base(DbCommandMethod.ExecuteNonQuery) { + MutatedSql = + testBase.NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE Id = 78"); } public override InterceptionResult NonQueryExecuting( @@ -725,12 +732,14 @@ private static DbCommand CreateNewCommand(DbCommand command) [InlineData(true, true)] public virtual async Task Intercept_non_query_to_replace_execution(bool async, bool inject) { - var (context, interceptor) = CreateContext(inject); + var interceptor = new QueryReplacingNonQueryCommandInterceptor(this); + var context = inject ? CreateContext(null, interceptor) : CreateContext(interceptor); using (context) { using (context.Database.BeginTransaction()) { - const string nonQuery = "DELETE FROM [Singularity] WHERE Id = 78"; + string nonQuery = + NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE Id = 78"); using var listener = Fixture.SubscribeToDiagnosticListener(context.ContextId); var result = async @@ -750,9 +759,12 @@ public virtual async Task Intercept_non_query_to_replace_execution(bool async, b protected class QueryReplacingNonQueryCommandInterceptor : CommandInterceptorBase { - public QueryReplacingNonQueryCommandInterceptor() + private readonly string commandText; + + public QueryReplacingNonQueryCommandInterceptor(CommandInterceptionTestBase testBase) : base(DbCommandMethod.ExecuteNonQuery) { + commandText = testBase.NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE Id = 77"); } public override InterceptionResult NonQueryExecuting( @@ -782,7 +794,7 @@ private DbCommand CreateNewCommand(DbCommand command) { var newCommand = command.Connection.CreateCommand(); newCommand.Transaction = command.Transaction; - newCommand.CommandText = "DELETE FROM [Singularity] WHERE Id = 77"; + newCommand.CommandText = commandText; return newCommand; } @@ -995,7 +1007,8 @@ public virtual async Task Intercept_non_query_to_replace_result(bool async, bool { using (context.Database.BeginTransaction()) { - const string nonQuery = "DELETE FROM [Singularity] WHERE Id = 78"; + string nonQuery = + NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE Id = 78"); using var listener = Fixture.SubscribeToDiagnosticListener(context.ContextId); var result = async @@ -1193,7 +1206,8 @@ public virtual async Task Intercept_non_query_to_throw(bool async, bool inject) { using (context.Database.BeginTransaction()) { - const string nonQuery = "DELETE FROM [Singularity] WHERE Id = 77"; + string nonQuery = + NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE Id = 77"); var exception = async ? await Assert.ThrowsAsync(() => context.Database.ExecuteSqlRawAsync(nonQuery)) @@ -1318,15 +1332,16 @@ public virtual async Task Intercept_non_query_one_app_and_one_injected_intercept { using var context = CreateContext( new ResultReplacingNonQueryCommandInterceptor(), - new MutatingNonQueryCommandInterceptor()); + new MutatingNonQueryCommandInterceptor(this)); await TestCompositeNonQueryInterceptors(context, async); } - private static async Task TestCompositeNonQueryInterceptors(UniverseContext context, bool async) + private async Task TestCompositeNonQueryInterceptors(UniverseContext context, bool async) { using (context.Database.BeginTransaction()) { - const string nonQuery = "DELETE FROM [Singularity] WHERE Id = 78"; + string nonQuery = + NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE Id = 78"); Assert.Equal( 7, @@ -1366,7 +1381,7 @@ public virtual async Task Intercept_non_query_with_two_injected_interceptors(boo { using var context = CreateContext( null, - new MutatingNonQueryCommandInterceptor(), new ResultReplacingNonQueryCommandInterceptor()); + new MutatingNonQueryCommandInterceptor(this), new ResultReplacingNonQueryCommandInterceptor()); await TestCompositeNonQueryInterceptors(context, async); } @@ -1415,7 +1430,7 @@ public virtual async Task Intercept_scalar_with_explicitly_composed_app_intercep public virtual async Task Intercept_non_query_with_explicitly_composed_app_interceptor(bool async) { using var context = CreateContext( - new IInterceptor[] { new MutatingNonQueryCommandInterceptor(), new ResultReplacingNonQueryCommandInterceptor() }); + new IInterceptor[] { new MutatingNonQueryCommandInterceptor(this), new ResultReplacingNonQueryCommandInterceptor() }); await TestCompositeNonQueryInterceptors(context, async); } @@ -1854,5 +1869,9 @@ protected virtual void AssertFailed(DbCommand command, CommandErrorEventData eve FailedCalled = true; } } + + private string NormalizeDelimitersInRawString(string sql) + => ((RelationalTestStore)Fixture.TestStore).NormalizeDelimitersInRawString(sql); + } } From 1622a33940f068a3406a2474a54e197dcd5910d7 Mon Sep 17 00:00:00 2001 From: lajones Date: Mon, 10 Feb 2020 11:50:07 -0800 Subject: [PATCH 3/3] Updated to include column identifiers. --- .../CommandInterceptionTestBase.cs | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/test/EFCore.Relational.Specification.Tests/CommandInterceptionTestBase.cs b/test/EFCore.Relational.Specification.Tests/CommandInterceptionTestBase.cs index 1967d6f09de..27d38112b26 100644 --- a/test/EFCore.Relational.Specification.Tests/CommandInterceptionTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/CommandInterceptionTestBase.cs @@ -116,7 +116,7 @@ public virtual async Task Intercept_non_query_passively(bool async, bool inject) using (context.Database.BeginTransaction()) { string nonQuery = - NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE Id = 77"); + NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE [Id] = 77"); using var listener = Fixture.SubscribeToDiagnosticListener(context.ContextId); var result = async @@ -347,7 +347,7 @@ public virtual async Task Intercept_non_query_to_suppress_execution(bool async, using (context.Database.BeginTransaction()) { string nonQuery = - NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE Id = 77"); + NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE [Id] = 77"); using var listener = Fixture.SubscribeToDiagnosticListener(context.ContextId); var result = async @@ -533,7 +533,7 @@ public virtual async Task Intercept_non_query_to_mutate_command(bool async, bool using (context.Database.BeginTransaction()) { string nonQuery = - NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE Id = 77"); + NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE [Id] = 77"); using var listener = Fixture.SubscribeToDiagnosticListener(context.ContextId); var result = async @@ -559,7 +559,7 @@ public MutatingNonQueryCommandInterceptor(CommandInterceptionTestBase testBase) : base(DbCommandMethod.ExecuteNonQuery) { MutatedSql = - testBase.NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE Id = 78"); + testBase.NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE [Id] = 78"); } public override InterceptionResult NonQueryExecuting( @@ -739,7 +739,7 @@ public virtual async Task Intercept_non_query_to_replace_execution(bool async, b using (context.Database.BeginTransaction()) { string nonQuery = - NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE Id = 78"); + NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE [Id] = 78"); using var listener = Fixture.SubscribeToDiagnosticListener(context.ContextId); var result = async @@ -764,7 +764,7 @@ protected class QueryReplacingNonQueryCommandInterceptor : CommandInterceptorBas public QueryReplacingNonQueryCommandInterceptor(CommandInterceptionTestBase testBase) : base(DbCommandMethod.ExecuteNonQuery) { - commandText = testBase.NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE Id = 77"); + commandText = testBase.NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE [Id] = 77"); } public override InterceptionResult NonQueryExecuting( @@ -1008,7 +1008,7 @@ public virtual async Task Intercept_non_query_to_replace_result(bool async, bool using (context.Database.BeginTransaction()) { string nonQuery = - NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE Id = 78"); + NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE [Id] = 78"); using var listener = Fixture.SubscribeToDiagnosticListener(context.ContextId); var result = async @@ -1062,7 +1062,7 @@ public override async Task NonQueryExecutedAsync( [InlineData(true, true)] public virtual async Task Intercept_query_that_throws(bool async, bool inject) { - const string badSql = "SELECT * FROM TheVoid"; + string badSql = NormalizeDelimitersInRawString("SELECT * FROM [TheVoid]"); var (context, interceptor) = CreateContext(inject); using (context) @@ -1131,7 +1131,7 @@ public virtual async Task Intercept_non_query_that_throws(bool async, bool injec var (context, interceptor) = CreateContext(inject); using (context) { - const string nonQuery = "DELETE FROM TheVoid WHERE Id = 555"; + string nonQuery = NormalizeDelimitersInRawString("DELETE FROM [TheVoid] WHERE [Id] = 555"); try { @@ -1207,7 +1207,7 @@ public virtual async Task Intercept_non_query_to_throw(bool async, bool inject) using (context.Database.BeginTransaction()) { string nonQuery = - NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE Id = 77"); + NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE [Id] = 77"); var exception = async ? await Assert.ThrowsAsync(() => context.Database.ExecuteSqlRawAsync(nonQuery)) @@ -1341,7 +1341,7 @@ private async Task TestCompositeNonQueryInterceptors(UniverseContext context, bo using (context.Database.BeginTransaction()) { string nonQuery = - NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE Id = 78"); + NormalizeDelimitersInRawString("DELETE FROM [Singularity] WHERE [Id] = 78"); Assert.Equal( 7, @@ -1872,6 +1872,5 @@ protected virtual void AssertFailed(DbCommand command, CommandErrorEventData eve private string NormalizeDelimitersInRawString(string sql) => ((RelationalTestStore)Fixture.TestStore).NormalizeDelimitersInRawString(sql); - } }