Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix for issue 16701. Brackets around tables names supports non-SQL Server providers #19837

Merged
merged 3 commits into from
Feb 10, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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);
}
}