Skip to content

Commit

Permalink
Fix for issue 16701. Brackets around tables names supports non-SQL Se…
Browse files Browse the repository at this point in the history
…rver providers (#19837)

Fix for issue 16701. Use NormalizeDelimitersInRawString around tables names to support non-SQL Server providers.
  • Loading branch information
lajones committed Feb 10, 2020
1 parent f497ea7 commit 9477181
Showing 1 changed file with 38 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -523,12 +526,14 @@ public override Task<InterceptionResult<object>> ScalarExecutingAsync(
[InlineData(true, true)]
public virtual async Task Intercept_non_query_to_mutate_command(bool async, bool inject)
{
var (context, interceptor) = CreateContext<MutatingNonQueryCommandInterceptor>(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
Expand All @@ -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);
}
Expand All @@ -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<int> NonQueryExecuting(
Expand Down Expand Up @@ -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<QueryReplacingNonQueryCommandInterceptor>(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
Expand All @@ -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<int> NonQueryExecuting(
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -1049,7 +1062,7 @@ public override async Task<int> 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<PassiveReaderCommandInterceptor>(inject);
using (context)
Expand Down Expand Up @@ -1118,7 +1131,7 @@ public virtual async Task Intercept_non_query_that_throws(bool async, bool injec
var (context, interceptor) = CreateContext<PassiveNonQueryCommandInterceptor>(inject);
using (context)
{
const string nonQuery = "DELETE FROM TheVoid WHERE Id = 555";
string nonQuery = NormalizeDelimitersInRawString("DELETE FROM [TheVoid] WHERE [Id] = 555");

try
{
Expand Down Expand Up @@ -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<Exception>(() => context.Database.ExecuteSqlRawAsync(nonQuery))
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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);
}

Expand Down Expand Up @@ -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);
}

Expand Down Expand Up @@ -1854,5 +1869,8 @@ protected virtual void AssertFailed(DbCommand command, CommandErrorEventData eve
FailedCalled = true;
}
}

private string NormalizeDelimitersInRawString(string sql)
=> ((RelationalTestStore)Fixture.TestStore).NormalizeDelimitersInRawString(sql);
}
}

0 comments on commit 9477181

Please sign in to comment.