From c76b14db142b877f41d17eff5e6c3a6c3013ad6e Mon Sep 17 00:00:00 2001 From: Shay Rojansky Date: Mon, 1 Jun 2020 23:27:36 +0200 Subject: [PATCH] Rename savepoint APIs for better clarity/consistency Rather than aligning with the less-than-ideal ADO.NET names (Save/Rollback/Release), switch to CreateSavepoint/RollbackToSavepoint/ ReleaseSavepoint. --- .../Internal/InMemoryTransactionManager.cs | 4 +-- .../Storage/RelationalConnection.cs | 16 +++++----- .../Storage/RelationalTransaction.cs | 32 +++++++++---------- .../Update/Internal/BatchExecutor.cs | 12 +++---- .../Storage/Internal/SqlServerTransaction.cs | 8 ++--- src/EFCore/Infrastructure/DatabaseFacade.cs | 10 +++--- src/EFCore/Storage/IDbContextTransaction.cs | 30 ++++++++--------- .../Storage/IDbContextTransactionManager.cs | 6 ++-- .../TransactionInterceptionTestBase.cs | 20 ++++++------ test/EFCore.Tests/DatabaseFacadeTest.cs | 8 ++--- 10 files changed, 73 insertions(+), 73 deletions(-) diff --git a/src/EFCore.InMemory/Storage/Internal/InMemoryTransactionManager.cs b/src/EFCore.InMemory/Storage/Internal/InMemoryTransactionManager.cs index 1d37af41c4a..e436b3473ca 100644 --- a/src/EFCore.InMemory/Storage/Internal/InMemoryTransactionManager.cs +++ b/src/EFCore.InMemory/Storage/Internal/InMemoryTransactionManager.cs @@ -126,11 +126,11 @@ public virtual Task CreateSavepointAsync(string savepointName, CancellationToken } /// - public virtual void RollbackSavepoint(string savepointName) + public virtual void RollbackToSavepoint(string savepointName) => _logger.TransactionIgnoredWarning(); /// - public virtual Task RollbackSavepointAsync(string savepointName, CancellationToken cancellationToken = default) + public virtual Task RollbackToSavepointAsync(string savepointName, CancellationToken cancellationToken = default) { _logger.TransactionIgnoredWarning(); return Task.CompletedTask; diff --git a/src/EFCore.Relational/Storage/RelationalConnection.cs b/src/EFCore.Relational/Storage/RelationalConnection.cs index d8d4fd73205..58e6e3b786c 100644 --- a/src/EFCore.Relational/Storage/RelationalConnection.cs +++ b/src/EFCore.Relational/Storage/RelationalConnection.cs @@ -536,7 +536,7 @@ public virtual void CreateSavepoint(string savepointName) throw new InvalidOperationException(RelationalStrings.NoActiveTransaction); } - CurrentTransaction.Save(savepointName); + CurrentTransaction.CreateSavepoint(savepointName); } /// @@ -547,29 +547,29 @@ public virtual Task CreateSavepointAsync(string savepointName, CancellationToken throw new InvalidOperationException(RelationalStrings.NoActiveTransaction); } - return CurrentTransaction.SaveAsync(savepointName, cancellationToken); + return CurrentTransaction.CreateSavepointAsync(savepointName, cancellationToken); } /// - public virtual void RollbackSavepoint(string savepointName) + public virtual void RollbackToSavepoint(string savepointName) { if (CurrentTransaction == null) { throw new InvalidOperationException(RelationalStrings.NoActiveTransaction); } - CurrentTransaction.Rollback(savepointName); + CurrentTransaction.RollbackToSavepoint(savepointName); } /// - public virtual Task RollbackSavepointAsync(string savepointName, CancellationToken cancellationToken = default) + public virtual Task RollbackToSavepointAsync(string savepointName, CancellationToken cancellationToken = default) { if (CurrentTransaction == null) { throw new InvalidOperationException(RelationalStrings.NoActiveTransaction); } - return CurrentTransaction.RollbackAsync(savepointName, cancellationToken); + return CurrentTransaction.RollbackToSavepointAsync(savepointName, cancellationToken); } /// @@ -580,7 +580,7 @@ public virtual void ReleaseSavepoint(string savepointName) throw new InvalidOperationException(RelationalStrings.NoActiveTransaction); } - CurrentTransaction.Release(savepointName); + CurrentTransaction.ReleaseSavepoint(savepointName); } /// @@ -591,7 +591,7 @@ public virtual Task ReleaseSavepointAsync(string savepointName, CancellationToke throw new InvalidOperationException(RelationalStrings.NoActiveTransaction); } - return CurrentTransaction.ReleaseAsync(savepointName, cancellationToken); + return CurrentTransaction.ReleaseSavepointAsync(savepointName, cancellationToken); } /// diff --git a/src/EFCore.Relational/Storage/RelationalTransaction.cs b/src/EFCore.Relational/Storage/RelationalTransaction.cs index cf43f0cab59..f8bbeefbb3f 100644 --- a/src/EFCore.Relational/Storage/RelationalTransaction.cs +++ b/src/EFCore.Relational/Storage/RelationalTransaction.cs @@ -256,7 +256,7 @@ await Logger.TransactionErrorAsync( } /// - public virtual void Save(string savepointName) + public virtual void CreateSavepoint(string name) { var startTime = DateTimeOffset.UtcNow; var stopwatch = Stopwatch.StartNew(); @@ -273,7 +273,7 @@ public virtual void Save(string savepointName) { using var command = Connection.DbConnection.CreateCommand(); command.Transaction = _dbTransaction; - command.CommandText = GetSavepointSaveSql(savepointName); + command.CommandText = GetCreateSavepointSql(name); command.ExecuteNonQuery(); } @@ -299,7 +299,7 @@ public virtual void Save(string savepointName) } /// - public virtual async Task SaveAsync(string savepointName, CancellationToken cancellationToken = default) + public virtual async Task CreateSavepointAsync(string name, CancellationToken cancellationToken = default) { var startTime = DateTimeOffset.UtcNow; var stopwatch = Stopwatch.StartNew(); @@ -317,7 +317,7 @@ public virtual async Task SaveAsync(string savepointName, CancellationToken canc { using var command = Connection.DbConnection.CreateCommand(); command.Transaction = _dbTransaction; - command.CommandText = GetSavepointSaveSql(savepointName); + command.CommandText = GetCreateSavepointSql(name); await command.ExecuteNonQueryAsync(cancellationToken); } @@ -350,10 +350,10 @@ await Logger.TransactionErrorAsync( /// /// The name of the savepoint to be created. /// An SQL string to create the savepoint. - protected virtual string GetSavepointSaveSql(string name) => "SAVEPOINT " + name; + protected virtual string GetCreateSavepointSql(string name) => "SAVEPOINT " + name; /// - public virtual void Rollback(string savepointName) + public virtual void RollbackToSavepoint(string name) { var startTime = DateTimeOffset.UtcNow; var stopwatch = Stopwatch.StartNew(); @@ -370,7 +370,7 @@ public virtual void Rollback(string savepointName) { using var command = Connection.DbConnection.CreateCommand(); command.Transaction = _dbTransaction; - command.CommandText = GetSavepointRollbackSql(savepointName); + command.CommandText = GetRollbackToSavepointSql(name); command.ExecuteNonQuery(); } @@ -396,7 +396,7 @@ public virtual void Rollback(string savepointName) } /// - public virtual async Task RollbackAsync(string savepointName, CancellationToken cancellationToken = default) + public virtual async Task RollbackToSavepointAsync(string name, CancellationToken cancellationToken = default) { var startTime = DateTimeOffset.UtcNow; var stopwatch = Stopwatch.StartNew(); @@ -414,7 +414,7 @@ public virtual async Task RollbackAsync(string savepointName, CancellationToken { using var command = Connection.DbConnection.CreateCommand(); command.Transaction = _dbTransaction; - command.CommandText = GetSavepointRollbackSql(savepointName); + command.CommandText = GetRollbackToSavepointSql(name); await command.ExecuteNonQueryAsync(cancellationToken); } @@ -447,10 +447,10 @@ await Logger.TransactionErrorAsync( /// /// The name of the savepoint to be created. /// An SQL string to create the savepoint. - protected virtual string GetSavepointRollbackSql(string name) => "ROLLBACK TO " + name; + protected virtual string GetRollbackToSavepointSql(string name) => "ROLLBACK TO " + name; /// - public virtual void Release(string savepointName) + public virtual void ReleaseSavepoint(string name) { var startTime = DateTimeOffset.UtcNow; var stopwatch = Stopwatch.StartNew(); @@ -467,7 +467,7 @@ public virtual void Release(string savepointName) { using var command = Connection.DbConnection.CreateCommand(); command.Transaction = _dbTransaction; - command.CommandText = GetSavepointReleaseSql(savepointName); + command.CommandText = GetReleaseSavepointSql(name); command.ExecuteNonQuery(); } @@ -493,7 +493,7 @@ public virtual void Release(string savepointName) } /// - public virtual async Task ReleaseAsync(string savepointName, CancellationToken cancellationToken = default) + public virtual async Task ReleaseSavepointAsync(string name, CancellationToken cancellationToken = default) { var startTime = DateTimeOffset.UtcNow; var stopwatch = Stopwatch.StartNew(); @@ -511,7 +511,7 @@ public virtual async Task ReleaseAsync(string savepointName, CancellationToken c { using var command = Connection.DbConnection.CreateCommand(); command.Transaction = _dbTransaction; - command.CommandText = GetSavepointReleaseSql(savepointName); + command.CommandText = GetReleaseSavepointSql(name); await command.ExecuteNonQueryAsync(cancellationToken); } @@ -544,13 +544,13 @@ await Logger.TransactionErrorAsync( /// SQL statement which releases a savepoint with the given name. /// /// - /// If savepoint release isn't supported, and should + /// If savepoint release isn't supported, and should /// be overridden to do nothing. /// /// /// The name of the savepoint to be created. /// An SQL string to create the savepoint. - protected virtual string GetSavepointReleaseSql(string name) => "RELEASE SAVEPOINT " + name; + protected virtual string GetReleaseSavepointSql(string name) => "RELEASE SAVEPOINT " + name; /// public virtual bool AreSavepointsSupported => true; diff --git a/src/EFCore.Relational/Update/Internal/BatchExecutor.cs b/src/EFCore.Relational/Update/Internal/BatchExecutor.cs index 6e3c5577fdd..9abef10aa69 100644 --- a/src/EFCore.Relational/Update/Internal/BatchExecutor.cs +++ b/src/EFCore.Relational/Update/Internal/BatchExecutor.cs @@ -79,7 +79,7 @@ public virtual int Execute( if (transaction?.AreSavepointsSupported == true) { - transaction.Save(SavepointName); + transaction.CreateSavepoint(SavepointName); createdSavepoint = true; } } @@ -99,7 +99,7 @@ public virtual int Execute( { if (createdSavepoint) { - transaction.Rollback(SavepointName); + transaction.RollbackToSavepoint(SavepointName); } throw; @@ -108,7 +108,7 @@ public virtual int Execute( { if (createdSavepoint) { - transaction.Release(SavepointName); + transaction.ReleaseSavepoint(SavepointName); } else if (beganTransaction) { @@ -154,7 +154,7 @@ public virtual async Task ExecuteAsync( if (transaction?.AreSavepointsSupported == true) { - await transaction.SaveAsync(SavepointName, cancellationToken); + await transaction.CreateSavepointAsync(SavepointName, cancellationToken); createdSavepoint = true; } } @@ -174,7 +174,7 @@ public virtual async Task ExecuteAsync( { if (createdSavepoint) { - await transaction.RollbackAsync(SavepointName, cancellationToken); + await transaction.RollbackToSavepointAsync(SavepointName, cancellationToken); } throw; @@ -183,7 +183,7 @@ public virtual async Task ExecuteAsync( { if (createdSavepoint) { - await transaction.ReleaseAsync(SavepointName, cancellationToken); + await transaction.ReleaseSavepointAsync(SavepointName, cancellationToken); } else if (beganTransaction) { diff --git a/src/EFCore.SqlServer/Storage/Internal/SqlServerTransaction.cs b/src/EFCore.SqlServer/Storage/Internal/SqlServerTransaction.cs index ab8a5103918..21b31268f7e 100644 --- a/src/EFCore.SqlServer/Storage/Internal/SqlServerTransaction.cs +++ b/src/EFCore.SqlServer/Storage/Internal/SqlServerTransaction.cs @@ -37,16 +37,16 @@ public SqlServerTransaction( /// - protected override string GetSavepointSaveSql(string name) => "SAVE TRANSACTION " + name; + protected override string GetCreateSavepointSql(string name) => "SAVE TRANSACTION " + name; /// - protected override string GetSavepointRollbackSql(string name) => "ROLLBACK TRANSACTION " + name; + protected override string GetRollbackToSavepointSql(string name) => "ROLLBACK TRANSACTION " + name; /// - public override void Release(string savepointName) {} + public override void ReleaseSavepoint(string name) {} /// - public override Task ReleaseAsync(string savepointName, CancellationToken cancellationToken = default) + public override Task ReleaseSavepointAsync(string name, CancellationToken cancellationToken = default) => Task.CompletedTask; } } diff --git a/src/EFCore/Infrastructure/DatabaseFacade.cs b/src/EFCore/Infrastructure/DatabaseFacade.cs index 4ae17afc4d2..331afbe6e21 100644 --- a/src/EFCore/Infrastructure/DatabaseFacade.cs +++ b/src/EFCore/Infrastructure/DatabaseFacade.cs @@ -220,8 +220,8 @@ public virtual Task CreateSavepointAsync([NotNull] string savepointName, Cancell /// Rolls back all commands that were executed after the specified savepoint was established. /// /// The name of the savepoint to roll back to. - public virtual void RollbackSavepoint([NotNull] string savepointName) - => Dependencies.TransactionManager.RollbackSavepoint(savepointName); + public virtual void RollbackToSavepoint([NotNull] string savepointName) + => Dependencies.TransactionManager.RollbackToSavepoint(savepointName); /// /// Rolls back all commands that were executed after the specified savepoint was established. @@ -229,8 +229,8 @@ public virtual void RollbackSavepoint([NotNull] string savepointName) /// The name of the savepoint to roll back to. /// The cancellation token. /// A representing the asynchronous operation. - public virtual Task RollbackSavepointAsync([NotNull] string savepointName, CancellationToken cancellationToken = default) - => Dependencies.TransactionManager.RollbackSavepointAsync(savepointName, cancellationToken); + public virtual Task RollbackToSavepointAsync([NotNull] string savepointName, CancellationToken cancellationToken = default) + => Dependencies.TransactionManager.RollbackToSavepointAsync(savepointName, cancellationToken); /// /// Destroys a savepoint previously defined in the current transaction. This allows the system to @@ -253,7 +253,7 @@ public virtual Task ReleaseSavepointAsync([NotNull] string savepointName, Cancel /// /// Gets a value that indicates whether this instance supports /// database savepoints. If , the methods , - /// + /// /// and as well as their synchronous counterparts are expected to throw /// . /// diff --git a/src/EFCore/Storage/IDbContextTransaction.cs b/src/EFCore/Storage/IDbContextTransaction.cs index 6b2bfaea98a..c1a3b7e91f7 100644 --- a/src/EFCore/Storage/IDbContextTransaction.cs +++ b/src/EFCore/Storage/IDbContextTransaction.cs @@ -54,57 +54,57 @@ public interface IDbContextTransaction : IDisposable, IAsyncDisposable /// was established to be rolled back, restoring the transaction state to what it was at the time of the /// savepoint. /// - /// The name of the savepoint to be created. - void Save([NotNull] string savepointName) => throw new NotSupportedException(); + /// The name of the savepoint to be created. + void CreateSavepoint([NotNull] string name) => throw new NotSupportedException(); /// /// Creates a savepoint in the transaction. This allows all commands that are executed after the savepoint /// was established to be rolled back, restoring the transaction state to what it was at the time of the /// savepoint. /// - /// The name of the savepoint to be created. + /// The name of the savepoint to be created. /// The cancellation token. /// A representing the asynchronous operation. - Task SaveAsync([NotNull] string savepointName, CancellationToken cancellationToken = default) + Task CreateSavepointAsync([NotNull] string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(); /// /// Rolls back all commands that were executed after the specified savepoint was established. /// - /// The name of the savepoint to roll back to. - void Rollback([NotNull] string savepointName) => throw new NotSupportedException(); + /// The name of the savepoint to roll back to. + void RollbackToSavepoint([NotNull] string name) => throw new NotSupportedException(); /// /// Rolls back all commands that were executed after the specified savepoint was established. /// - /// The name of the savepoint to roll back to. + /// The name of the savepoint to roll back to. /// The cancellation token. /// A representing the asynchronous operation. - Task RollbackAsync([NotNull] string savepointName, CancellationToken cancellationToken = default) + Task RollbackToSavepointAsync([NotNull] string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(); /// /// Destroys a savepoint previously defined in the current transaction. This allows the system to /// reclaim some resources before the transaction ends. /// - /// The name of the savepoint to release. - void Release([NotNull] string savepointName) { } + /// The name of the savepoint to release. + void ReleaseSavepoint([NotNull] string name) { } /// /// Destroys a savepoint previously defined in the current transaction. This allows the system to /// reclaim some resources before the transaction ends. /// - /// The name of the savepoint to release. + /// The name of the savepoint to release. /// The cancellation token. /// A representing the asynchronous operation. - Task ReleaseAsync([NotNull] string savepointName, CancellationToken cancellationToken = default) + Task ReleaseSavepointAsync([NotNull] string name, CancellationToken cancellationToken = default) => Task.CompletedTask; /// /// Gets a value that indicates whether this instance supports - /// database savepoints. If , the methods , - /// - /// and as well as their synchronous counterparts are expected to throw + /// database savepoints. If , the methods , + /// + /// and as well as their synchronous counterparts are expected to throw /// . /// /// diff --git a/src/EFCore/Storage/IDbContextTransactionManager.cs b/src/EFCore/Storage/IDbContextTransactionManager.cs index 3412103a3f3..08ba263fa77 100644 --- a/src/EFCore/Storage/IDbContextTransactionManager.cs +++ b/src/EFCore/Storage/IDbContextTransactionManager.cs @@ -93,7 +93,7 @@ Task CreateSavepointAsync([NotNull] string savepointName, CancellationToken canc /// Rolls back all commands that were executed after the specified savepoint was established. /// /// The name of the savepoint to roll back to. - void RollbackSavepoint([NotNull] string savepointName) => throw new NotSupportedException(); + void RollbackToSavepoint([NotNull] string savepointName) => throw new NotSupportedException(); /// /// Rolls back all commands that were executed after the specified savepoint was established. @@ -101,7 +101,7 @@ Task CreateSavepointAsync([NotNull] string savepointName, CancellationToken canc /// The name of the savepoint to roll back to. /// The cancellation token. /// A representing the asynchronous operation. - Task RollbackSavepointAsync([NotNull] string savepointName, CancellationToken cancellationToken = default) + Task RollbackToSavepointAsync([NotNull] string savepointName, CancellationToken cancellationToken = default) => throw new NotSupportedException(); /// @@ -124,7 +124,7 @@ Task ReleaseSavepointAsync([NotNull] string savepointName, CancellationToken can /// /// Gets a value that indicates whether this instance supports /// database savepoints. If , the methods , - /// + /// /// and as well as their synchronous counterparts are expected to throw /// . /// diff --git a/test/EFCore.Relational.Specification.Tests/TransactionInterceptionTestBase.cs b/test/EFCore.Relational.Specification.Tests/TransactionInterceptionTestBase.cs index 47ed17cb16d..73ef8f7557f 100644 --- a/test/EFCore.Relational.Specification.Tests/TransactionInterceptionTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/TransactionInterceptionTestBase.cs @@ -391,11 +391,11 @@ public virtual async Task Intercept_CreateSavepoint(bool async) using var listener = Fixture.SubscribeToDiagnosticListener(context.ContextId); if (async) { - await contextTransaction.SaveAsync("dummy"); + await contextTransaction.CreateSavepointAsync("dummy"); } else { - contextTransaction.Save("dummy"); + contextTransaction.CreateSavepoint("dummy"); } AssertCreateSavepoint(context, contextTransaction, interceptor, async); @@ -417,22 +417,22 @@ public virtual async Task Intercept_RollbackToSavepoint(bool async) : context.Database.BeginTransaction(); if (async) { - await contextTransaction.SaveAsync("dummy"); + await contextTransaction.CreateSavepointAsync("dummy"); } else { - contextTransaction.Save("dummy"); + contextTransaction.CreateSavepoint("dummy"); } interceptor.Reset(); using var listener = Fixture.SubscribeToDiagnosticListener(context.ContextId); if (async) { - await contextTransaction.RollbackAsync("dummy"); + await contextTransaction.RollbackToSavepointAsync("dummy"); } else { - contextTransaction.Rollback("dummy"); + contextTransaction.RollbackToSavepoint("dummy"); } AssertRollbackToSavepoint(context, contextTransaction, interceptor, async); @@ -454,22 +454,22 @@ public virtual async Task Intercept_ReleaseSavepoint(bool async) : context.Database.BeginTransaction(); if (async) { - await contextTransaction.SaveAsync("dummy"); + await contextTransaction.CreateSavepointAsync("dummy"); } else { - contextTransaction.Save("dummy"); + contextTransaction.CreateSavepoint("dummy"); } interceptor.Reset(); using var listener = Fixture.SubscribeToDiagnosticListener(context.ContextId); if (async) { - await contextTransaction.ReleaseAsync("dummy"); + await contextTransaction.ReleaseSavepointAsync("dummy"); } else { - contextTransaction.Release("dummy"); + contextTransaction.ReleaseSavepoint("dummy"); } AssertReleaseSavepoint(context, contextTransaction, interceptor, async); diff --git a/test/EFCore.Tests/DatabaseFacadeTest.cs b/test/EFCore.Tests/DatabaseFacadeTest.cs index c845972f555..112e2aaaef0 100644 --- a/test/EFCore.Tests/DatabaseFacadeTest.cs +++ b/test/EFCore.Tests/DatabaseFacadeTest.cs @@ -186,9 +186,9 @@ public Task CreateSavepointAsync(string savepointName, CancellationToken cancell return Task.CompletedTask; } - public void RollbackSavepoint(string savepointName) => RollbackSavepointCalls++; + public void RollbackToSavepoint(string savepointName) => RollbackSavepointCalls++; - public Task RollbackSavepointAsync(string savepointName, CancellationToken cancellationToken = default) + public Task RollbackToSavepointAsync(string savepointName, CancellationToken cancellationToken = default) { RollbackSavepointCalls++; return Task.CompletedTask; @@ -316,7 +316,7 @@ public void Can_rollback_savepoint() var context = InMemoryTestHelpers.Instance.CreateContext( new ServiceCollection().AddSingleton(manager)); - context.Database.RollbackSavepoint("foo"); + context.Database.RollbackToSavepoint("foo"); Assert.Equal(1, manager.RollbackSavepointCalls); } @@ -329,7 +329,7 @@ public async Task Can_rollback_savepoint_async() var context = InMemoryTestHelpers.Instance.CreateContext( new ServiceCollection().AddSingleton(manager)); - await context.Database.RollbackSavepointAsync("foo"); + await context.Database.RollbackToSavepointAsync("foo"); Assert.Equal(1, manager.RollbackSavepointCalls); }