From 1c4a5b1aac7cfdc512882a466a14dfd80262a893 Mon Sep 17 00:00:00 2001 From: Jim Pelletier Date: Thu, 22 Feb 2024 14:15:33 +1100 Subject: [PATCH 1/4] allows commiting of non owned transactions --- .DS_Store | Bin 0 -> 6148 bytes .../AssortedDocumentsBenchmark.cs | 2 +- .../DocumentSizeBenchmark.cs | 4 +- .../RelatedDocumentBenchmark.cs | 4 +- .../Advanced/CheckConstraintsFixture.cs | 2 +- .../Advanced/CompressionMigrationFixture.cs | 8 +- .../Advanced/ConcurrentAccessFixture.cs | 4 +- .../Advanced/CustomKeyAllocatorFixture.cs | 2 +- .../Advanced/HooksFixture.cs | 2 +- .../Advanced/IdentityIdFixture.cs | 4 +- .../Advanced/InstanceTypesFixture.cs | 2 +- .../JsonLastTableColumnResolverFixture.cs | 2 +- .../Advanced/MappingFixture.cs | 4 +- .../Advanced/RowVersionFixture .cs | 2 +- .../Advanced/TableValuesParametersFixture.cs | 2 +- .../Advanced/UseExistingTransactionFixture.cs | 4 +- .../AsyncExamples.cs | 4 +- source/Nevermore.IntegrationTests/Examples.cs | 4 +- .../KeyAllocatorFixture.cs | 8 +- .../QueryBuilderIntegrationFixture.cs | 8 +- .../QueryableIntegrationFixture.cs | 122 +++++++++--------- .../RelatedDocumentTableFixture.cs | 12 +- .../RelationalStoreFixture.cs | 24 ++-- .../RelationalTransaction/DeleteFixture.cs | 6 +- .../RelationalTransaction/LoadFixture.cs | 20 +-- .../ToListWithCountAsyncFixture.cs | 4 +- source/Nevermore/Advanced/WriteTransaction.cs | 38 +++++- source/Nevermore/IWriteTransaction.cs | 4 +- source/Nevermore/Mapping/KeyAllocator.cs | 4 +- 29 files changed, 166 insertions(+), 140 deletions(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d057157c1e1ea4b494c834490c67d55c64e80c3e GIT binary patch literal 6148 zcmeHKI|>3Z5S>vG!N$@uSMUZw^aNf&{8hq&V!xH=@@T&K6v}F+h4Ka_FPY3s$SZbs zL`3J8-ArU6A|tq=Ty5x@?VES3mk|ZRamH5mhuwL*X_{jv`*py$Lpe($7dbuhZG%Py zr~nn90#twsd|ZJnv7_ GenerateHistory() diff --git a/source/Nevermore.Benchmarks/DocumentSizeBenchmark.cs b/source/Nevermore.Benchmarks/DocumentSizeBenchmark.cs index 97c5c32e..53e1fefc 100644 --- a/source/Nevermore.Benchmarks/DocumentSizeBenchmark.cs +++ b/source/Nevermore.Benchmarks/DocumentSizeBenchmark.cs @@ -35,7 +35,7 @@ public override void SetUp() var historyEntries = Enumerable.Range(1, DocumentSize / 256).Select(n => new BigObjectHistoryEntry {Id = Guid.NewGuid(), Comment = randomString(), LuckyNumbers = Enumerable.Range(0, rand.Next(130, 330)).ToArray(), Date = DateTime.Today.AddDays(n)}); writer.Insert(new BigObject {Id = "BigObject-1", History = historyEntries.OfType().ToList()}); - writer.Commit(); + writer.TryCommit(); } [Params(JsonStorageFormat.TextOnly, JsonStorageFormat.CompressedOnly)] @@ -61,7 +61,7 @@ public void LoadSave() var item = transaction.Load("BigObject-1"); item.Name = Guid.NewGuid().ToString(); transaction.Update(item); - transaction.Commit(); + transaction.TryCommit(); } } } \ No newline at end of file diff --git a/source/Nevermore.Benchmarks/RelatedDocumentBenchmark.cs b/source/Nevermore.Benchmarks/RelatedDocumentBenchmark.cs index 04286fe5..fb2abd52 100644 --- a/source/Nevermore.Benchmarks/RelatedDocumentBenchmark.cs +++ b/source/Nevermore.Benchmarks/RelatedDocumentBenchmark.cs @@ -132,7 +132,7 @@ void UpdateDocuments(int numberOfRelatedDocuments) } writer.Update(document); - writer.Commit(); + writer.TryCommit(); } } @@ -154,7 +154,7 @@ void InsertDocuments(int numberOfDocuments, int numberOfRelatedDocuments) writer.Insert(order); } - writer.Commit(); + writer.TryCommit(); } } } \ No newline at end of file diff --git a/source/Nevermore.IntegrationTests/Advanced/CheckConstraintsFixture.cs b/source/Nevermore.IntegrationTests/Advanced/CheckConstraintsFixture.cs index 72d37b1a..2434d379 100644 --- a/source/Nevermore.IntegrationTests/Advanced/CheckConstraintsFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/CheckConstraintsFixture.cs @@ -41,7 +41,7 @@ public void CanInsertValidJson() using var transaction = Store.BeginTransaction(); transaction.ExecuteNonQuery("insert into TestSchema.Person (Id, [JSON]) values ('Persons-1', N'{\"Name\":\"Tom\",\"Text\":\"BBB\"}')"); transaction.ExecuteNonQuery("insert into TestSchema.Person (Id, [JSONBlob]) values ('Persons-1', COMPRESS(N'{\"Name\":\"Tom\",\"Text\":\"BBB\"}'))"); - transaction.Commit(); + transaction.TryCommit(); } [Test] diff --git a/source/Nevermore.IntegrationTests/Advanced/CompressionMigrationFixture.cs b/source/Nevermore.IntegrationTests/Advanced/CompressionMigrationFixture.cs index cd4d92e2..c518b01f 100644 --- a/source/Nevermore.IntegrationTests/Advanced/CompressionMigrationFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/CompressionMigrationFixture.cs @@ -44,7 +44,7 @@ public void DataExistsAlreadyAsText() transaction.ExecuteNonQuery("insert into TestSchema.Person (Id, [JSON]) values ('Persons-1', N'{\"Name\":\"Tom\",\"Text\":\"BBB\"}')"); transaction.ExecuteNonQuery("insert into TestSchema.Person (Id, [JSON]) values ('Persons-2', N'{\"Name\":\"Ben\",\"Text\":\"BBB\"}')"); transaction.ExecuteNonQuery("insert into TestSchema.Person (Id, [JSON]) values ('Persons-3', N'{\"Name\":\"Bob\",\"Text\":\"BBB\"}')"); - transaction.Commit(); + transaction.TryCommit(); } AssertText("Persons-1"); @@ -58,7 +58,7 @@ public void InsertingWillWriteCompressed() using (var transaction = Store.BeginTransaction()) { transaction.Insert(new Person { Id = "Persons-4", Name = "Bill", Text = "AAA" }); - transaction.Commit(); + transaction.TryCommit(); } AssertCompressed("Persons-4"); } @@ -83,7 +83,7 @@ public void UpdatingWillWriteCompressed() var person = transaction.Load("Persons-2"); person.Text = "ZZZ"; transaction.Update(person); - transaction.Commit(); + transaction.TryCommit(); } AssertCompressed("Persons-2"); @@ -108,7 +108,7 @@ public void DataCanBeMigratedManuallyInSql() { transaction.ExecuteNonQuery("update TestSchema.Person set JSONBlob = COMPRESS([JSON]) where Id = 'Persons-3'"); transaction.ExecuteNonQuery("update TestSchema.Person set [JSON] = null where Id = 'Persons-3'"); - transaction.Commit(); + transaction.TryCommit(); } AssertCompressed("Persons-3"); diff --git a/source/Nevermore.IntegrationTests/Advanced/ConcurrentAccessFixture.cs b/source/Nevermore.IntegrationTests/Advanced/ConcurrentAccessFixture.cs index 65ecf87f..ffc6a759 100644 --- a/source/Nevermore.IntegrationTests/Advanced/ConcurrentAccessFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/ConcurrentAccessFixture.cs @@ -37,7 +37,7 @@ public void ConcurrentAccessDoesNotGoBoom() return 0; }) .ToArray(); - transaction.Commit(); + transaction.TryCommit(); } // Now hit it really hard and see if we can provoke a failure. @@ -118,7 +118,7 @@ await Enumerable.Range(0, NumberOfDocuments) // ReSharper disable once AccessToDisposedClosure .Select(document => transaction.InsertAsync(document)) .WhenAll(); - await transaction.CommitAsync(); + await transaction.TryCommitAsync(); } // Now hit it really hard and see if we can provoke a failure. diff --git a/source/Nevermore.IntegrationTests/Advanced/CustomKeyAllocatorFixture.cs b/source/Nevermore.IntegrationTests/Advanced/CustomKeyAllocatorFixture.cs index d48c63c8..977d3e3a 100644 --- a/source/Nevermore.IntegrationTests/Advanced/CustomKeyAllocatorFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/CustomKeyAllocatorFixture.cs @@ -90,7 +90,7 @@ public void ShouldAllocateCustomKeyToInsertedDocuments() using var transaction = store.BeginTransaction(); transaction.Insert(document); - transaction.Commit(); + transaction.TryCommit(); document.Id.Should().Be("Simples-100"); } diff --git a/source/Nevermore.IntegrationTests/Advanced/HooksFixture.cs b/source/Nevermore.IntegrationTests/Advanced/HooksFixture.cs index 9cde393f..98e79220 100644 --- a/source/Nevermore.IntegrationTests/Advanced/HooksFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/HooksFixture.cs @@ -31,7 +31,7 @@ public void ShouldCallHooks() transaction.Delete(customer); AssertLogged(log, "BeforeDelete", "AfterDelete"); - transaction.Commit(); + transaction.TryCommit(); AssertLogged(log, "BeforeCommit", "AfterCommit"); } diff --git a/source/Nevermore.IntegrationTests/Advanced/IdentityIdFixture.cs b/source/Nevermore.IntegrationTests/Advanced/IdentityIdFixture.cs index bd94d453..a12283f7 100644 --- a/source/Nevermore.IntegrationTests/Advanced/IdentityIdFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/IdentityIdFixture.cs @@ -95,7 +95,7 @@ TResult RunInTransaction(Func func, st { using var transaction = Store.BeginTransaction(name: name); var result = func(transaction); - transaction.Commit(); + transaction.TryCommit(); return result; } @@ -113,7 +113,7 @@ async Task RunInTransactionAsync(Func action, string name) diff --git a/source/Nevermore.IntegrationTests/Advanced/InstanceTypesFixture.cs b/source/Nevermore.IntegrationTests/Advanced/InstanceTypesFixture.cs index 0978e0c8..cbeaff4f 100644 --- a/source/Nevermore.IntegrationTests/Advanced/InstanceTypesFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/InstanceTypesFixture.cs @@ -109,7 +109,7 @@ public void ShouldStoreConcreteAccounts() using var transaction = Store.BeginTransaction(); transaction.Insert(new AwsAccount { Name = "My AWS account", SecretKey = "keys9812"}); transaction.Insert(new AzureAccount { Name = "My Azure account", AzureSubscriptionId = "sub128721"}); - transaction.Commit(); + transaction.TryCommit(); } [Test, Order(2)] diff --git a/source/Nevermore.IntegrationTests/Advanced/JsonLastTableColumnResolverFixture.cs b/source/Nevermore.IntegrationTests/Advanced/JsonLastTableColumnResolverFixture.cs index b76f9fe0..28eeafcb 100644 --- a/source/Nevermore.IntegrationTests/Advanced/JsonLastTableColumnResolverFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/JsonLastTableColumnResolverFixture.cs @@ -34,7 +34,7 @@ public void ShouldNotDeadlockWhenRunningAQuery() { var id = writeTransaction.AllocateId(typeof(Customer)); writeTransaction.Insert(new Customer {Id = id}); - writeTransaction.Commit(); + writeTransaction.TryCommit(); } using var readTransaction = Store.BeginReadTransaction(); diff --git a/source/Nevermore.IntegrationTests/Advanced/MappingFixture.cs b/source/Nevermore.IntegrationTests/Advanced/MappingFixture.cs index 42d52237..ea472b77 100644 --- a/source/Nevermore.IntegrationTests/Advanced/MappingFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/MappingFixture.cs @@ -110,7 +110,7 @@ public void ShouldInsert() transaction.Insert(user); transaction.Update(user); - transaction.Commit(); + transaction.TryCommit(); } [Test, Order(4)] @@ -136,7 +136,7 @@ public void ShouldDelete() transaction.Delete("users-123"); var user = transaction.Load("users-123"); user.Should().BeNull(); - transaction.Commit(); + transaction.TryCommit(); } } } \ No newline at end of file diff --git a/source/Nevermore.IntegrationTests/Advanced/RowVersionFixture .cs b/source/Nevermore.IntegrationTests/Advanced/RowVersionFixture .cs index 728b296f..c063b774 100644 --- a/source/Nevermore.IntegrationTests/Advanced/RowVersionFixture .cs +++ b/source/Nevermore.IntegrationTests/Advanced/RowVersionFixture .cs @@ -150,7 +150,7 @@ TResult RunInTransaction(Func func) { using var transaction = Store.BeginTransaction(); var result = func(transaction); - transaction.Commit(); + transaction.TryCommit(); return result; } diff --git a/source/Nevermore.IntegrationTests/Advanced/TableValuesParametersFixture.cs b/source/Nevermore.IntegrationTests/Advanced/TableValuesParametersFixture.cs index 12786dcd..771ebe5f 100644 --- a/source/Nevermore.IntegrationTests/Advanced/TableValuesParametersFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/TableValuesParametersFixture.cs @@ -45,7 +45,7 @@ public void ShouldBulkInsert() var count = writer.ExecuteScalar("select count(*) from TestSchema.SomeTable"); count.Should().Be(100000); - writer.Commit(); + writer.TryCommit(); } } } \ No newline at end of file diff --git a/source/Nevermore.IntegrationTests/Advanced/UseExistingTransactionFixture.cs b/source/Nevermore.IntegrationTests/Advanced/UseExistingTransactionFixture.cs index dca0c3af..539a9478 100644 --- a/source/Nevermore.IntegrationTests/Advanced/UseExistingTransactionFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/UseExistingTransactionFixture.cs @@ -148,12 +148,12 @@ public async Task CommittingNonOwnedTransaction_Throws() { const string expectedMessage = $"{nameof(WriteTransaction)} cannot commit a transaction it does not own"; - await new Func(async () => await nonOwnedTransaction.CommitAsync(cancellationToken)) + await new Func(async () => await nonOwnedTransaction.TryCommitAsync(cancellationToken)) .Should() .ThrowExactlyAsync() .WithMessage(expectedMessage); - new Action(() => nonOwnedTransaction.Commit()) + new Action(() => nonOwnedTransaction.TryCommit()) .Should() .ThrowExactly() .WithMessage(expectedMessage); diff --git a/source/Nevermore.IntegrationTests/AsyncExamples.cs b/source/Nevermore.IntegrationTests/AsyncExamples.cs index 1520247d..850f4d87 100644 --- a/source/Nevermore.IntegrationTests/AsyncExamples.cs +++ b/source/Nevermore.IntegrationTests/AsyncExamples.cs @@ -23,7 +23,7 @@ public async Task InsertAndLoad() await transaction.InsertAsync( new Product { Name = "First product", Price = 100.00M, Type = ProductType.Dodgy}, new InsertOptions { CustomAssignedId = "Product-First"}); - transaction.Commit(); + transaction.TryCommit(); } using (var reader = await Store.BeginReadTransactionAsync()) @@ -46,7 +46,7 @@ await transaction.InsertAsync( await transaction.InsertAsync( new Product { Name = "Second product", Price = 200.00M, Type = ProductType.Dodgy}, new InsertOptions { CustomAssignedId = "Product-Second"}); - await transaction.CommitAsync(); + await transaction.TryCommitAsync(); } using (var reader = await Store.BeginReadTransactionAsync()) diff --git a/source/Nevermore.IntegrationTests/Examples.cs b/source/Nevermore.IntegrationTests/Examples.cs index fcb9b4cb..1efbbf5d 100644 --- a/source/Nevermore.IntegrationTests/Examples.cs +++ b/source/Nevermore.IntegrationTests/Examples.cs @@ -81,7 +81,7 @@ public void Insert() using var transaction = store.BeginTransaction(); transaction.Insert(person); - transaction.Commit(); + transaction.TryCommit(); // ID's are assigned automatically when the Insert call completes. person.Id.Should().Be("Persons-1"); @@ -108,7 +108,7 @@ public void InsertMany() new Person {FirstName = "Buggs", LastName = "Bunny", Email = "buggs.bunny@wb.com", Tags = {"rabbit", "wb"}}, new Person {FirstName = "Prince", LastName = null, Email = "prince", Tags = {"singer"}}, }); - transaction.Commit(); + transaction.TryCommit(); } [Test, Order(4)] diff --git a/source/Nevermore.IntegrationTests/KeyAllocatorFixture.cs b/source/Nevermore.IntegrationTests/KeyAllocatorFixture.cs index ee983f60..58a7c914 100644 --- a/source/Nevermore.IntegrationTests/KeyAllocatorFixture.cs +++ b/source/Nevermore.IntegrationTests/KeyAllocatorFixture.cs @@ -150,7 +150,7 @@ public void ShouldAllocateInParallel() { var id = transaction.AllocateId(); customerIds.Add(id); - transaction.Commit(); + transaction.TryCommit(); } else if (sequence == 1) { @@ -164,7 +164,7 @@ public void ShouldAllocateInParallel() { var id = transaction.AllocateId(); deploymentIds.Add(id); - transaction.Commit(); + transaction.TryCommit(); } } })).ToArray(); @@ -210,7 +210,7 @@ public async Task AllocateIdAsync_ShouldAllocateInParallel() { var id = await transaction.AllocateIdAsync(CancellationToken.None); customerIds.Add(id); - await transaction.CommitAsync(); + await transaction.TryCommitAsync(); } else if (sequence == 1) { @@ -224,7 +224,7 @@ public async Task AllocateIdAsync_ShouldAllocateInParallel() { var id = await transaction.AllocateIdAsync(CancellationToken.None); deploymentIds.Add(id); - await transaction.CommitAsync(); + await transaction.TryCommitAsync(); } } })).ToArray(); diff --git a/source/Nevermore.IntegrationTests/QueryBuilderIntegrationFixture.cs b/source/Nevermore.IntegrationTests/QueryBuilderIntegrationFixture.cs index 5e982b05..cd402252 100644 --- a/source/Nevermore.IntegrationTests/QueryBuilderIntegrationFixture.cs +++ b/source/Nevermore.IntegrationTests/QueryBuilderIntegrationFixture.cs @@ -48,7 +48,7 @@ public void WhereNullClause() new Customer {FirstName = "Charlie", LastName = "Cherry", Nickname = "Chazza"} }) t.Insert(c); - t.Commit(); + t.TryCommit(); var customersNull = t.Query() .Where(c => c.Nickname == null) @@ -78,7 +78,7 @@ public void CrossJoin() new Customer {FirstName = "Bob", LastName = "Barker", Nickname = "Bazza"}, new Customer {FirstName = "Charlie", LastName = "Cherry", Nickname = "Chazza"} }); - t.Commit(); + t.TryCommit(); var customersNull = t.Query() .Where(n => n.Nickname != null) @@ -110,7 +110,7 @@ public async Task CountAsyncPolymorphic() }; await t.InsertManyAsync(testBrands); - await t.CommitAsync(); + await t.TryCommitAsync(); var count = await t.Query().Where(b => b.Name.Contains("Brand")).CountAsync(); @@ -133,7 +133,7 @@ public async Task JoinWithPolymorphicDocument() new Customer {FirstName = "Charlie", LastName = "Cherry", Nickname = "Chazza"} }); - await t.CommitAsync(); + await t.TryCommitAsync(); var productQuery = t.Query() .InnerJoin(t.Query()) diff --git a/source/Nevermore.IntegrationTests/QueryableIntegrationFixture.cs b/source/Nevermore.IntegrationTests/QueryableIntegrationFixture.cs index b1d00a36..d626435a 100644 --- a/source/Nevermore.IntegrationTests/QueryableIntegrationFixture.cs +++ b/source/Nevermore.IntegrationTests/QueryableIntegrationFixture.cs @@ -30,7 +30,7 @@ public void WhereEqual() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(c => c.FirstName == "Alice") @@ -53,7 +53,7 @@ public void WhereEqualIdColumn() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(c => c.Id == alice.Id) @@ -79,7 +79,7 @@ public void WhereEqualTypeResolutionColumn() t.Insert(c); } - t.Commit(); + t.TryCommit(); var brands = t.Queryable() .Where(b => b.Type == "BrandB") @@ -105,7 +105,7 @@ public void WhereEqualRowVersionColumn() t.Insert(c); } - t.Commit(); + t.TryCommit(); var documents = t.Queryable() .Where(d => d.RowVersion == testDoc3.RowVersion) @@ -130,7 +130,7 @@ public async Task WhereEqualPolymorphicDocumentColumn() t.Insert(p); } - t.Commit(); + t.TryCommit(); // query by base type var dodgyProduct = t.Queryable() @@ -163,7 +163,7 @@ public void WhereEqualJson() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(m => m.Endpoint.Name == "Tentacle A") @@ -190,7 +190,7 @@ public void WhereEqualJsonDateTimeOffset() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(m => m.LastModified == testLastModified) @@ -216,7 +216,7 @@ public void WhereIsNullJsonValue() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(m => m.Endpoint.Name == null || m.Endpoint.Name == "Tentacle A") @@ -242,7 +242,7 @@ public void WhereIsNullJsonObject() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(m => m.Endpoint == null || m.Endpoint.Name == "Tentacle A") @@ -268,7 +268,7 @@ public void WhereNotEqual() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(c => c.FirstName != "Alice") @@ -294,7 +294,7 @@ public void WhereGreaterThan() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(c => c.Balance > 100) @@ -320,7 +320,7 @@ public void WhereLessThan() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(c => c.Balance < 100) @@ -346,7 +346,7 @@ public void WhereGreaterThanOrEqual() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(c => c.Balance >= 301.4m) @@ -372,7 +372,7 @@ public void WhereLessThanOrEqual() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(c => c.Balance <= 56.3m) @@ -398,7 +398,7 @@ public void WhereUnaryBool() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(c => c.IsVip) @@ -424,7 +424,7 @@ public void WhereNotUnaryBool() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(c => !c.IsVip) @@ -450,7 +450,7 @@ public void WhereUnaryBoolJson() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(c => c.IsEmployee) @@ -476,7 +476,7 @@ public void WhereNotUnaryBoolJson() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(c => !c.IsEmployee) @@ -502,7 +502,7 @@ public void WhereCompositeAnd() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(c => c.Balance >= 50m && c.IsEmployee && c.FirstName.StartsWith("B")) @@ -528,7 +528,7 @@ public void WhereCompositeOr() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(c => c.Balance < 40m || c.IsEmployee || c.LastName.Contains("n")) @@ -554,7 +554,7 @@ public void WhereContains() t.Insert(c); } - t.Commit(); + t.TryCommit(); var names = new[] { "Apple", "Orange", "Peach" }; var customers = t.Queryable() @@ -581,7 +581,7 @@ public void WhereContainsEmpty() t.Insert(c); } - t.Commit(); + t.TryCommit(); var names = Array.Empty(); var customers = t.Queryable() @@ -608,7 +608,7 @@ public void WhereContainsOnDocument() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(c => c.Roles.Contains("RoleC")) @@ -634,7 +634,7 @@ public void WhereContainsOnDocumentJson() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(c => c.LuckyNumbers.Contains(4)) @@ -660,7 +660,7 @@ public void WhereNotContains() t.Insert(c); } - t.Commit(); + t.TryCommit(); var names = new[] { "Apple", "Orange", "Peach" }; var customers = t.Queryable() @@ -687,7 +687,7 @@ public void WhereNotContainsEmpty() t.Insert(c); } - t.Commit(); + t.TryCommit(); var names = Array.Empty(); var customers = t.Queryable() @@ -714,7 +714,7 @@ public void WhereStringContains() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(c => c.Nickname.Contains("hi")) @@ -740,7 +740,7 @@ public void WhereNotStringContains() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(c => !c.Nickname.Contains("hi")) @@ -766,7 +766,7 @@ public void WhereStringContainsSpecialCharacters() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Where(c => c.Nickname.Contains("[")) @@ -794,7 +794,7 @@ public void First() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customer = t.Queryable() .First(); @@ -819,7 +819,7 @@ public void FirstWithPredicate() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customer = t.Queryable() .First(c => c.FirstName == "Alice"); @@ -844,7 +844,7 @@ public void FirstOrDefault() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customer = t.Queryable() .FirstOrDefault(); @@ -869,7 +869,7 @@ public async Task FirstOrDefaultAsync() t.Insert(c); } - await t.CommitAsync(); + await t.TryCommitAsync(); var customer = await t.Queryable() .FirstOrDefaultAsync(); @@ -894,7 +894,7 @@ public void FirstOrDefaultWithPredicate() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customer = t.Queryable() .FirstOrDefault(c => c.FirstName.EndsWith("y")); @@ -919,7 +919,7 @@ public async Task FirstOrDefaultWithPredicateAsync() t.Insert(c); } - await t.CommitAsync(); + await t.TryCommitAsync(); var customer = await t.Queryable() .FirstOrDefaultAsync(c => c.FirstName.EndsWith("y")); @@ -944,7 +944,7 @@ public void Skip() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Skip(2) @@ -970,7 +970,7 @@ public void Take() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Take(2) @@ -998,7 +998,7 @@ public void SkipAndTake() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .Skip(2) @@ -1025,7 +1025,7 @@ public void Count() t.Insert(c); } - t.Commit(); + t.TryCommit(); var count = t.Queryable().Count(); @@ -1049,7 +1049,7 @@ public async Task CountAsync() t.Insert(c); } - await t.CommitAsync(); + await t.TryCommitAsync(); var count = await t.Queryable().CountAsync(); @@ -1073,7 +1073,7 @@ public async Task CountAsyncPolymorphic() t.Insert(b); } - await t.CommitAsync(); + await t.TryCommitAsync(); var count = await t.Queryable().CountAsync(); @@ -1097,7 +1097,7 @@ public void Hint() t.Insert(c); } - t.Commit(); + t.TryCommit(); var a = t.Queryable().Where(x => x.FirstName == "Alice").Hint("WITH (ROWLOCK, UPDLOCK, NOWAIT)").RawDebugView(); a.Should().Be($"SELECT Id,FirstName,LastName,Nickname,Roles,Balance,IsVip,JSON{Environment.NewLine}" + @@ -1122,7 +1122,7 @@ public void CountWithPredicate() t.Insert(c); } - t.Commit(); + t.TryCommit(); var count = t.Queryable().Count(c => c.Nickname.StartsWith("C")); @@ -1146,7 +1146,7 @@ public async Task CountWithPredicateAsync() t.Insert(c); } - await t.CommitAsync(); + await t.TryCommitAsync(); var count = await t.Queryable().CountAsync(c => c.Nickname.StartsWith("C")); @@ -1170,7 +1170,7 @@ public async Task CountWithPredicateAsyncPolymorphic() t.Insert(b); } - await t.CommitAsync(); + await t.TryCommitAsync(); var count = await t.Queryable().CountAsync(b => b.Name.StartsWith("Brand")); @@ -1194,7 +1194,7 @@ public void CountWithOrderBy() t.Insert(c); } - t.Commit(); + t.TryCommit(); var count = t.Queryable().OrderBy(c => c.LastName).Count(c => c.Nickname.StartsWith("C")); @@ -1218,7 +1218,7 @@ public void OrderBy() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable().OrderBy(c => c.Nickname).ToList(); @@ -1242,7 +1242,7 @@ public void OrderByDescending() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable().OrderByDescending(c => c.Nickname).ToList(); @@ -1266,7 +1266,7 @@ public void OrderByThenBy() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .OrderBy(c => c.LastName) @@ -1293,7 +1293,7 @@ public void OrderByThenByDescending() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable() .OrderBy(c => c.LastName) @@ -1320,7 +1320,7 @@ public void Any() t.Insert(c); } - t.Commit(); + t.TryCommit(); var anyCustomers = t.Queryable().Any(); @@ -1344,7 +1344,7 @@ public async Task AnyAsync() t.Insert(c); } - await t.CommitAsync(); + await t.TryCommitAsync(); var anyCustomers = await t.Queryable().AnyAsync(); @@ -1368,7 +1368,7 @@ public void AnyWithPredicate() t.Insert(c); } - t.Commit(); + t.TryCommit(); var anyCustomers = t.Queryable().Any(c => c.Nickname == "Warlock"); @@ -1392,7 +1392,7 @@ public async Task AnyWithPredicateAsync() t.Insert(c); } - await t.CommitAsync(); + await t.TryCommitAsync(); var anyCustomers = await t.Queryable().AnyAsync(c => c.Nickname == "Warlock"); @@ -1416,7 +1416,7 @@ public void WhereCustomSql() t.Insert(c); } - t.Commit(); + t.TryCommit(); var customers = t.Queryable().WhereCustom("[Roles] LIKE '%|B%'").ToList(); @@ -1440,7 +1440,7 @@ public async Task ToListAsync() t.Insert(c); } - await t.CommitAsync(); + await t.TryCommitAsync(); var customers = await t.Queryable().Where(c => c.FirstName == "Alice").ToListAsync(); @@ -1493,7 +1493,7 @@ public async Task ProjectColumnField() t.Insert(c); } - await t.CommitAsync(); + await t.TryCommitAsync(); var customers = t.Queryable().Select(c => c.FirstName); @@ -1517,7 +1517,7 @@ public async Task ProjectJsonField() t.Insert(c); } - await t.CommitAsync(); + await t.TryCommitAsync(); var customers = t.Queryable().Select(c => new { c.FirstName, c.IsEmployee }); @@ -1545,7 +1545,7 @@ public async Task ProjectValueType() t.Insert(c); } - await t.CommitAsync(); + await t.TryCommitAsync(); var customers = await t.Queryable().Select(c => c.IsEmployee).ToListAsync(); @@ -1565,7 +1565,7 @@ public async Task ProjectTypeWithParameterizedConstructor() }; await t.InsertManyAsync(testCustomers); - await t.CommitAsync(); + await t.TryCommitAsync(); var customers = await t.Queryable().Select(c => new CustomerProjection(c.FirstName, c.IsEmployee)).ToListAsync(); @@ -1602,7 +1602,7 @@ public async Task ProjectRecord() }; await t.InsertManyAsync(testCustomers); - await t.CommitAsync(); + await t.TryCommitAsync(); var customers = await t.Queryable().Select(c => new CustomerRecord(c.FirstName, c.IsEmployee)).ToListAsync(); diff --git a/source/Nevermore.IntegrationTests/RelatedDocumentTableFixture.cs b/source/Nevermore.IntegrationTests/RelatedDocumentTableFixture.cs index 8fdb2b8b..8ad18451 100644 --- a/source/Nevermore.IntegrationTests/RelatedDocumentTableFixture.cs +++ b/source/Nevermore.IntegrationTests/RelatedDocumentTableFixture.cs @@ -52,7 +52,7 @@ public void GivenRecordsCurrentlyExist() foreach (var item in StartingRecords) trn.ExecuteNonQuery($"INSERT INTO TestSchema.[{DocumentMap.RelatedDocumentTableName}] VALUES ('{item.Id}', '{item.Table}', '{item.RelatedDocumentId}', '{item.RelatedDocumentType}')"); - trn.Commit(); + trn.TryCommit(); } } @@ -65,7 +65,7 @@ public void AndGivenAnOrderReferencing(string[] referenceIds) foreach (var reference in referenceIds) trn.ExecuteNonQuery($"INSERT INTO TestSchema.[{DocumentMap.RelatedDocumentTableName}] VALUES ('{orderId}', 'Order', '{reference}', 'Product')"); - trn.Commit(); + trn.TryCommit(); } // Check that went well @@ -88,7 +88,7 @@ public void WhenANewOrderIsInsertedReferencing(string[] referenceIds) using (var trn = Store.BeginTransaction()) { trn.Insert(order); - trn.Commit(); + trn.TryCommit(); } Console.WriteLine("New Order ID: " + order.Id); @@ -106,7 +106,7 @@ public void WhenTheOrderIsUpdatedReferencing(string[] referenceIds) using (var trn = Store.BeginTransaction()) { trn.Update(order); - trn.Commit(); + trn.TryCommit(); } } @@ -116,7 +116,7 @@ public void WhenTheOrderIsDeleted() using (var trn = Store.BeginTransaction()) { trn.Delete(order); - trn.Commit(); + trn.TryCommit(); } } @@ -128,7 +128,7 @@ public void WhenTheOrderIsDeletedUsingTheQueryBuilder() trn.DeleteQuery() .Where(nameof(order.Id), UnarySqlOperand.Equal, orderId) .Delete(); - trn.Commit(); + trn.TryCommit(); } } diff --git a/source/Nevermore.IntegrationTests/RelationalStoreFixture.cs b/source/Nevermore.IntegrationTests/RelationalStoreFixture.cs index ab071209..89d08bf3 100644 --- a/source/Nevermore.IntegrationTests/RelationalStoreFixture.cs +++ b/source/Nevermore.IntegrationTests/RelationalStoreFixture.cs @@ -29,7 +29,7 @@ public void ShouldGenerateIdsUnlessExplicitlyAssigned() customer2.Id.Value.Should().StartWith("Customers-"); customer3.Id.Value.Should().Be("Customers-Chazza"); - transaction.Commit(); + transaction.TryCommit(); } } @@ -44,7 +44,7 @@ public void ShouldPersistReferenceCollectionsToAllowLikeSearches() transaction.Insert(customer1); transaction.Insert(customer2); transaction.Insert(customer3); - transaction.Commit(); + transaction.TryCommit(); } // ReferenceCollection columns that are indexed are always stored in pipe-separated format with pipes at the front and end: |foo|bar|baz| @@ -71,7 +71,7 @@ public void TableWithTypeAfterJsonShouldBeAbleToDeserialize() transaction.Insert(product2); transaction.Insert(product3); transaction.Insert(product4); - transaction.Commit(); + transaction.TryCommit(); } using (var transaction = Store.BeginTransaction()) @@ -90,7 +90,7 @@ public void ShouldBuildJoinSelectsWithJsonColumnLast() { transaction.Insert(product1); transaction.Insert(product2); - transaction.Commit(); + transaction.TryCommit(); } using (var transaction = Store.BeginTransaction()) @@ -116,7 +116,7 @@ public void ShouldPersistCollectionsToAllowInSearches() transaction.Insert(customer1); transaction.Insert(customer2); transaction.Insert(customer3); - transaction.Commit(); + transaction.TryCommit(); } // ReferenceCollection columns that are indexed are always stored in pipe-separated format with pipes at the front and end: |foo|bar|baz| @@ -137,7 +137,7 @@ public void ShouldHandleIdsWithInOperand() { var customer = new Customer {FirstName = "Alice", LastName = "Apple"}; transaction.Insert(customer); - transaction.Commit(); + transaction.TryCommit(); customerId = customer.Id; } @@ -163,7 +163,7 @@ public void ShouldHandleLoadManyWithCustomKeyType() transaction.Insert(customer1); transaction.Insert(customer2); transaction.Insert(customer3); - transaction.Commit(); + transaction.TryCommit(); ids.Add(customer1.Id); ids.Add(customer3.Id); ids.Add(customer2.Id); @@ -190,7 +190,7 @@ public void ShouldMultiSelect() transaction.Insert(new LineItem {ProductId = "product-1", Name = "Line 2", Quantity = 10}); transaction.Insert(new LineItem {PurchaseDate = DateTime.MaxValue, ProductId = "product-2", Name = "Line 3", Quantity = 20}); - transaction.Commit(); + transaction.TryCommit(); } using (var transaction = Store.BeginTransaction()) @@ -221,7 +221,7 @@ public void ShouldAllowNoPrefixOnProjectionMapping() transaction.Insert(new LineItem {ProductId = "product-1", Name = "Line 2", Quantity = 10}); transaction.Insert(new LineItem {PurchaseDate = DateTime.MaxValue, ProductId = "product-2", Name = "Line 3", Quantity = 20}); - transaction.Commit(); + transaction.TryCommit(); } using (var transaction = Store.BeginTransaction()) @@ -247,7 +247,7 @@ public void ShouldInsertOneRecordWithInsertMany() using (var transaction = Store.BeginTransaction()) { transaction.InsertMany(new[] { product }); - transaction.Commit(); + transaction.TryCommit(); } product.Id.Should().Be("Products-1"); @@ -262,7 +262,7 @@ public void ShouldInsertManyRecordsWithInsertMany() using (var transaction = Store.BeginTransaction()) { transaction.InsertMany(new[] {product1, product2}); - transaction.Commit(); + transaction.TryCommit(); } product1.Id.Should().Be("Products-1"); @@ -316,7 +316,7 @@ public void ShouldPersistAndLoadReferenceCollectionsOnSingleDocuments() var customer = new Customer {FirstName = "Alice", LastName = "Apple", LuckyNumbers = new[] {12, 13}, Nickname = "Ally", Roles = {"web-server", "app-server"}}; transaction.Insert(customer); customerId = customer.Id; - transaction.Commit(); + transaction.TryCommit(); } using (var transaction = Store.BeginTransaction()) { diff --git a/source/Nevermore.IntegrationTests/RelationalTransaction/DeleteFixture.cs b/source/Nevermore.IntegrationTests/RelationalTransaction/DeleteFixture.cs index 155ba7d5..df09e6ab 100644 --- a/source/Nevermore.IntegrationTests/RelationalTransaction/DeleteFixture.cs +++ b/source/Nevermore.IntegrationTests/RelationalTransaction/DeleteFixture.cs @@ -17,7 +17,7 @@ public void DeleteByEntity() { var product = trn.Load(id); trn.Delete(product); - trn.Commit(); + trn.TryCommit(); } using (var trn = Store.BeginTransaction()) @@ -32,7 +32,7 @@ public void DeleteById() using (var trn = Store.BeginTransaction()) { trn.Delete(id); - trn.Commit(); + trn.TryCommit(); } using (var trn = Store.BeginTransaction()) @@ -59,7 +59,7 @@ string AddTestProduct() Name = "foo" }; trn.Insert(product); - trn.Commit(); + trn.TryCommit(); return product.Id; } } diff --git a/source/Nevermore.IntegrationTests/RelationalTransaction/LoadFixture.cs b/source/Nevermore.IntegrationTests/RelationalTransaction/LoadFixture.cs index 65bab4ea..89fc1913 100644 --- a/source/Nevermore.IntegrationTests/RelationalTransaction/LoadFixture.cs +++ b/source/Nevermore.IntegrationTests/RelationalTransaction/LoadFixture.cs @@ -48,7 +48,7 @@ public void LoadWithMultipleIdsWithDifferentLength() Type = ProductType.Normal }; trn.Insert(product2); - trn.Commit(); + trn.TryCommit(); var ids = new[] {product1.Id, product2.Id}; @@ -194,7 +194,7 @@ public void StoreStringInheritedTypesSerializeCorrectly() trn.Insert(brandA); trn.Insert(brandB); - trn.Commit(); + trn.TryCommit(); var allBrands = trn.Stream<(string Name, string JSON)>("select Name, [JSON] from TestSchema.Brand").ToList(); @@ -212,7 +212,7 @@ public void StoreAndLoadStringInheritedTypes() trn.Insert(brandA); trn.Insert(brandB); - trn.Commit(); + trn.TryCommit(); var allBrands = trn.Query().ToList(); @@ -229,7 +229,7 @@ public void StoreAndLoadStringInheritedTypesThatAreProperties() trn.Insert(machineA); trn.Insert(machineB); - trn.Commit(); + trn.TryCommit(); var allMachines = trn.Query().ToList(); @@ -245,7 +245,7 @@ public void StoreAndLoadFromParameterizedRawSql() InsertProductAndLineItems("Unicorn Poop", 3m, trn, 2, 3); // subtotal: $15 of Unicorn Poop InsertProductAndLineItems("Unicorn Dust", 1m, trn, 2, 1, 7); // subtotal: $10 of Unicorn Dust InsertProductAndLineItems("Fairy Bread", 10m, trn, 4); // subtotal: $40 of Fairy Bread - trn.Commit(); + trn.TryCommit(); var productSubtotalQuery = @"SELECT Id, @@ -307,7 +307,7 @@ public void StoreAndLoadAnyIdTypes() var messageA = new MessageWithGuidId { Id = Guid.NewGuid(), Sender = "Sender A", Body = "Body of Message A" }; trn.Insert(messageA); - trn.Commit(); + trn.TryCommit(); var loadedMessageA = trn.Load(messageA.Id); @@ -341,7 +341,7 @@ public void StoreAndLoadManyForStringIdType() { trn.Insert(message); } - trn.Commit(); + trn.TryCommit(); var loadedMessages = trn.LoadMany(messages.Select(m => m.Id));loadedMessages.Should().BeEquivalentTo(messages); } @@ -360,7 +360,7 @@ public void StoreAndLoadManyForIntIdType() { trn.Insert(message); } - trn.Commit(); + trn.TryCommit(); var loadedMessages = trn.LoadMany(messages.Select(m => m.Id)); @@ -381,7 +381,7 @@ public void StoreAndLoadManyForLongIdType() { trn.Insert(message); } - trn.Commit(); + trn.TryCommit(); var loadedMessages = trn.LoadMany(messages.Select(m => m.Id)); @@ -402,7 +402,7 @@ public void StoreAndLoadManyForGuidIdType() { trn.Insert(message); } - trn.Commit(); + trn.TryCommit(); var loadedMessages = trn.LoadMany(messages.Select(m => m.Id)); diff --git a/source/Nevermore.IntegrationTests/ToListWithCountAsyncFixture.cs b/source/Nevermore.IntegrationTests/ToListWithCountAsyncFixture.cs index eb2c1dc8..89a481df 100644 --- a/source/Nevermore.IntegrationTests/ToListWithCountAsyncFixture.cs +++ b/source/Nevermore.IntegrationTests/ToListWithCountAsyncFixture.cs @@ -28,7 +28,7 @@ public async Task QueryReturnsCorrectDataPageAndCount(bool useCteOperation) new Customer {FirstName = "Eric", LastName = "Evans", Nickname = "Bob"} }) t.Insert(c); - await t.CommitAsync(CancellationToken.None); + await t.TryCommitAsync(CancellationToken.None); FeatureFlags.UseCteBasedListWithCount = useCteOperation; var (items, count) = await t.Query() @@ -56,7 +56,7 @@ public async Task WhenPageReturnsNoDataThenNonZeroCountStillReturns(int skip, in new Customer {FirstName = "Charlie", LastName = "Cherry", Nickname = "Chazza"}, }) t.Insert(c); - await t.CommitAsync(CancellationToken.None); + await t.TryCommitAsync(CancellationToken.None); FeatureFlags.UseCteBasedListWithCount = true; var (items, count) = await t.Query() diff --git a/source/Nevermore/Advanced/WriteTransaction.cs b/source/Nevermore/Advanced/WriteTransaction.cs index 2befdd7c..063f41fa 100644 --- a/source/Nevermore/Advanced/WriteTransaction.cs +++ b/source/Nevermore/Advanced/WriteTransaction.cs @@ -337,18 +337,33 @@ public async ValueTask AllocateIdAsync(string tableName, string idPrefix var key = await keyAllocator.NextIdAsync(tableName, cancellationToken).ConfigureAwait(false); return $"{idPrefix}-{key}"; } - - public void Commit() + + public void Commit(CancellationToken cancellationToken = default) { - if (Transaction is null) - throw new InvalidOperationException("There is no current transaction, call Open/OpenAsync to start a transaction"); + if (!OwnsSqlTransaction) return; + + if (!configuration.AllowSynchronousOperations) + throw new SynchronousOperationsDisabledException(); + + CommitTransactionAndRunHooks(); + } + public void TryCommit() + { if (!OwnsSqlTransaction) throw new InvalidOperationException($"{nameof(WriteTransaction)} cannot commit a transaction it does not own"); if (!configuration.AllowSynchronousOperations) throw new SynchronousOperationsDisabledException(); + CommitTransactionAndRunHooks(); + } + + void CommitTransactionAndRunHooks() + { + if (Transaction is null) + throw new InvalidOperationException("There is no current transaction, call Open/OpenAsync to start a transaction"); + configuration.Hooks.BeforeCommit(this); Transaction.Commit(); configuration.Hooks.AfterCommit(this); @@ -356,12 +371,23 @@ public void Commit() public async Task CommitAsync(CancellationToken cancellationToken = default) { - if (Transaction is null) - throw new InvalidOperationException("There is no current transaction, call Open/OpenAsync to start a transaction"); + if (!OwnsSqlTransaction) return; + + await CommitTransactionAndRunHooksAsync(cancellationToken).ConfigureAwait(false); + } + public async Task TryCommitAsync(CancellationToken cancellationToken = default) + { if (!OwnsSqlTransaction) throw new InvalidOperationException($"{nameof(WriteTransaction)} cannot commit a transaction it does not own"); + await CommitTransactionAndRunHooksAsync(cancellationToken).ConfigureAwait(false); + } + async Task CommitTransactionAndRunHooksAsync(CancellationToken cancellationToken) + { + if (Transaction is null) + throw new InvalidOperationException("There is no current transaction, call Open/OpenAsync to start a transaction"); + await configuration.Hooks.BeforeCommitAsync(this).ConfigureAwait(false); await Transaction.CommitAsync(cancellationToken).ConfigureAwait(false); await configuration.Hooks.AfterCommitAsync(this).ConfigureAwait(false); diff --git a/source/Nevermore/IWriteTransaction.cs b/source/Nevermore/IWriteTransaction.cs index 45f900fe..c835220d 100644 --- a/source/Nevermore/IWriteTransaction.cs +++ b/source/Nevermore/IWriteTransaction.cs @@ -5,7 +5,7 @@ namespace Nevermore { public interface IWriteTransaction : IReadTransaction, IWriteQueryExecutor { - void Commit(); - Task CommitAsync(CancellationToken cancellationToken = default); + void TryCommit(); + Task TryCommitAsync(CancellationToken cancellationToken = default); } } \ No newline at end of file diff --git a/source/Nevermore/Mapping/KeyAllocator.cs b/source/Nevermore/Mapping/KeyAllocator.cs index 3506d291..bdbfa0c2 100644 --- a/source/Nevermore/Mapping/KeyAllocator.cs +++ b/source/Nevermore/Mapping/KeyAllocator.cs @@ -69,7 +69,7 @@ async Task GetNextMaxValue(CancellationToken ct) parameters.CommandType = CommandType.StoredProcedure; var result = await transaction.ExecuteScalarAsync("GetNextKeyBlock", parameters, cancellationToken: ct).ConfigureAwait(false); - await transaction.CommitAsync(ct).ConfigureAwait(false); + await transaction.TryCommitAsync(ct).ConfigureAwait(false); return result; } @@ -106,7 +106,7 @@ int GetNextMaxValue() parameters.CommandType = CommandType.StoredProcedure; var result = transaction.ExecuteScalar("GetNextKeyBlock", parameters); - transaction.Commit(); + transaction.TryCommit(); return result; } From 4a90e3b6524c10a7866d8f69f4d791278c9f1e77 Mon Sep 17 00:00:00 2001 From: Jim Pelletier Date: Thu, 22 Feb 2024 15:33:11 +1100 Subject: [PATCH 2/4] Re-adds commit to interface --- .../Advanced/UseExistingTransactionFixture.cs | 2 +- source/Nevermore/Advanced/WriteTransaction.cs | 2 +- source/Nevermore/IWriteTransaction.cs | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/source/Nevermore.IntegrationTests/Advanced/UseExistingTransactionFixture.cs b/source/Nevermore.IntegrationTests/Advanced/UseExistingTransactionFixture.cs index 539a9478..b1fca11a 100644 --- a/source/Nevermore.IntegrationTests/Advanced/UseExistingTransactionFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/UseExistingTransactionFixture.cs @@ -148,7 +148,7 @@ public async Task CommittingNonOwnedTransaction_Throws() { const string expectedMessage = $"{nameof(WriteTransaction)} cannot commit a transaction it does not own"; - await new Func(async () => await nonOwnedTransaction.TryCommitAsync(cancellationToken)) + await new Func(async () => await nonOwnedTransaction.CommitAsync(cancellationToken)) .Should() .ThrowExactlyAsync() .WithMessage(expectedMessage); diff --git a/source/Nevermore/Advanced/WriteTransaction.cs b/source/Nevermore/Advanced/WriteTransaction.cs index 063f41fa..94ebe99f 100644 --- a/source/Nevermore/Advanced/WriteTransaction.cs +++ b/source/Nevermore/Advanced/WriteTransaction.cs @@ -338,7 +338,7 @@ public async ValueTask AllocateIdAsync(string tableName, string idPrefix return $"{idPrefix}-{key}"; } - public void Commit(CancellationToken cancellationToken = default) + public void Commit() { if (!OwnsSqlTransaction) return; diff --git a/source/Nevermore/IWriteTransaction.cs b/source/Nevermore/IWriteTransaction.cs index c835220d..b14a31fa 100644 --- a/source/Nevermore/IWriteTransaction.cs +++ b/source/Nevermore/IWriteTransaction.cs @@ -5,6 +5,8 @@ namespace Nevermore { public interface IWriteTransaction : IReadTransaction, IWriteQueryExecutor { + void Commit(); + Task CommitAsync(CancellationToken cancellationToken = default); void TryCommit(); Task TryCommitAsync(CancellationToken cancellationToken = default); } From 1faae645867b89ef6a787ebd69b93511900c7fcd Mon Sep 17 00:00:00 2001 From: Jim Pelletier Date: Thu, 22 Feb 2024 15:51:12 +1100 Subject: [PATCH 3/4] fixes tests --- .../Advanced/UseExistingTransactionFixture.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/Nevermore.IntegrationTests/Advanced/UseExistingTransactionFixture.cs b/source/Nevermore.IntegrationTests/Advanced/UseExistingTransactionFixture.cs index b1fca11a..539a9478 100644 --- a/source/Nevermore.IntegrationTests/Advanced/UseExistingTransactionFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/UseExistingTransactionFixture.cs @@ -148,7 +148,7 @@ public async Task CommittingNonOwnedTransaction_Throws() { const string expectedMessage = $"{nameof(WriteTransaction)} cannot commit a transaction it does not own"; - await new Func(async () => await nonOwnedTransaction.CommitAsync(cancellationToken)) + await new Func(async () => await nonOwnedTransaction.TryCommitAsync(cancellationToken)) .Should() .ThrowExactlyAsync() .WithMessage(expectedMessage); From 3584b86ab6742b5b02455c65b178e37d4b195d39 Mon Sep 17 00:00:00 2001 From: Jim Pelletier Date: Fri, 1 Mar 2024 13:55:43 +1100 Subject: [PATCH 4/4] Fixes commit methods so this is not a breaking change --- .../AssortedDocumentsBenchmark.cs | 2 +- .../DocumentSizeBenchmark.cs | 4 +- .../RelatedDocumentBenchmark.cs | 4 +- .../Advanced/CheckConstraintsFixture.cs | 2 +- .../Advanced/CompressionMigrationFixture.cs | 8 +- .../Advanced/ConcurrentAccessFixture.cs | 4 +- .../Advanced/CustomKeyAllocatorFixture.cs | 2 +- .../Advanced/HooksFixture.cs | 2 +- .../Advanced/IdentityIdFixture.cs | 4 +- .../Advanced/InstanceTypesFixture.cs | 2 +- .../JsonLastTableColumnResolverFixture.cs | 2 +- .../Advanced/MappingFixture.cs | 4 +- .../Advanced/RowVersionFixture .cs | 2 +- .../Advanced/TableValuesParametersFixture.cs | 2 +- .../Advanced/UseExistingTransactionFixture.cs | 4 +- .../AsyncExamples.cs | 4 +- source/Nevermore.IntegrationTests/Examples.cs | 4 +- .../KeyAllocatorFixture.cs | 8 +- .../QueryBuilderIntegrationFixture.cs | 8 +- .../QueryableIntegrationFixture.cs | 122 +++++++++--------- .../RelatedDocumentTableFixture.cs | 12 +- .../RelationalStoreFixture.cs | 24 ++-- .../RelationalTransaction/DeleteFixture.cs | 6 +- .../RelationalTransaction/LoadFixture.cs | 20 +-- .../ToListWithCountAsyncFixture.cs | 4 +- source/Nevermore/Advanced/WriteTransaction.cs | 8 +- source/Nevermore/IWriteTransaction.cs | 4 +- source/Nevermore/Mapping/KeyAllocator.cs | 4 +- 28 files changed, 138 insertions(+), 138 deletions(-) diff --git a/source/Nevermore.Benchmarks/AssortedDocumentsBenchmark.cs b/source/Nevermore.Benchmarks/AssortedDocumentsBenchmark.cs index da1744a1..fe8b5ac7 100644 --- a/source/Nevermore.Benchmarks/AssortedDocumentsBenchmark.cs +++ b/source/Nevermore.Benchmarks/AssortedDocumentsBenchmark.cs @@ -57,7 +57,7 @@ public override void SetUp() Console.WriteLine($"{item.Bucket} bytes: {item.Count} documents"); } - writer.TryCommit(); + writer.Commit(); } static List GenerateHistory() diff --git a/source/Nevermore.Benchmarks/DocumentSizeBenchmark.cs b/source/Nevermore.Benchmarks/DocumentSizeBenchmark.cs index 53e1fefc..97c5c32e 100644 --- a/source/Nevermore.Benchmarks/DocumentSizeBenchmark.cs +++ b/source/Nevermore.Benchmarks/DocumentSizeBenchmark.cs @@ -35,7 +35,7 @@ public override void SetUp() var historyEntries = Enumerable.Range(1, DocumentSize / 256).Select(n => new BigObjectHistoryEntry {Id = Guid.NewGuid(), Comment = randomString(), LuckyNumbers = Enumerable.Range(0, rand.Next(130, 330)).ToArray(), Date = DateTime.Today.AddDays(n)}); writer.Insert(new BigObject {Id = "BigObject-1", History = historyEntries.OfType().ToList()}); - writer.TryCommit(); + writer.Commit(); } [Params(JsonStorageFormat.TextOnly, JsonStorageFormat.CompressedOnly)] @@ -61,7 +61,7 @@ public void LoadSave() var item = transaction.Load("BigObject-1"); item.Name = Guid.NewGuid().ToString(); transaction.Update(item); - transaction.TryCommit(); + transaction.Commit(); } } } \ No newline at end of file diff --git a/source/Nevermore.Benchmarks/RelatedDocumentBenchmark.cs b/source/Nevermore.Benchmarks/RelatedDocumentBenchmark.cs index fb2abd52..04286fe5 100644 --- a/source/Nevermore.Benchmarks/RelatedDocumentBenchmark.cs +++ b/source/Nevermore.Benchmarks/RelatedDocumentBenchmark.cs @@ -132,7 +132,7 @@ void UpdateDocuments(int numberOfRelatedDocuments) } writer.Update(document); - writer.TryCommit(); + writer.Commit(); } } @@ -154,7 +154,7 @@ void InsertDocuments(int numberOfDocuments, int numberOfRelatedDocuments) writer.Insert(order); } - writer.TryCommit(); + writer.Commit(); } } } \ No newline at end of file diff --git a/source/Nevermore.IntegrationTests/Advanced/CheckConstraintsFixture.cs b/source/Nevermore.IntegrationTests/Advanced/CheckConstraintsFixture.cs index 2434d379..72d37b1a 100644 --- a/source/Nevermore.IntegrationTests/Advanced/CheckConstraintsFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/CheckConstraintsFixture.cs @@ -41,7 +41,7 @@ public void CanInsertValidJson() using var transaction = Store.BeginTransaction(); transaction.ExecuteNonQuery("insert into TestSchema.Person (Id, [JSON]) values ('Persons-1', N'{\"Name\":\"Tom\",\"Text\":\"BBB\"}')"); transaction.ExecuteNonQuery("insert into TestSchema.Person (Id, [JSONBlob]) values ('Persons-1', COMPRESS(N'{\"Name\":\"Tom\",\"Text\":\"BBB\"}'))"); - transaction.TryCommit(); + transaction.Commit(); } [Test] diff --git a/source/Nevermore.IntegrationTests/Advanced/CompressionMigrationFixture.cs b/source/Nevermore.IntegrationTests/Advanced/CompressionMigrationFixture.cs index c518b01f..cd4d92e2 100644 --- a/source/Nevermore.IntegrationTests/Advanced/CompressionMigrationFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/CompressionMigrationFixture.cs @@ -44,7 +44,7 @@ public void DataExistsAlreadyAsText() transaction.ExecuteNonQuery("insert into TestSchema.Person (Id, [JSON]) values ('Persons-1', N'{\"Name\":\"Tom\",\"Text\":\"BBB\"}')"); transaction.ExecuteNonQuery("insert into TestSchema.Person (Id, [JSON]) values ('Persons-2', N'{\"Name\":\"Ben\",\"Text\":\"BBB\"}')"); transaction.ExecuteNonQuery("insert into TestSchema.Person (Id, [JSON]) values ('Persons-3', N'{\"Name\":\"Bob\",\"Text\":\"BBB\"}')"); - transaction.TryCommit(); + transaction.Commit(); } AssertText("Persons-1"); @@ -58,7 +58,7 @@ public void InsertingWillWriteCompressed() using (var transaction = Store.BeginTransaction()) { transaction.Insert(new Person { Id = "Persons-4", Name = "Bill", Text = "AAA" }); - transaction.TryCommit(); + transaction.Commit(); } AssertCompressed("Persons-4"); } @@ -83,7 +83,7 @@ public void UpdatingWillWriteCompressed() var person = transaction.Load("Persons-2"); person.Text = "ZZZ"; transaction.Update(person); - transaction.TryCommit(); + transaction.Commit(); } AssertCompressed("Persons-2"); @@ -108,7 +108,7 @@ public void DataCanBeMigratedManuallyInSql() { transaction.ExecuteNonQuery("update TestSchema.Person set JSONBlob = COMPRESS([JSON]) where Id = 'Persons-3'"); transaction.ExecuteNonQuery("update TestSchema.Person set [JSON] = null where Id = 'Persons-3'"); - transaction.TryCommit(); + transaction.Commit(); } AssertCompressed("Persons-3"); diff --git a/source/Nevermore.IntegrationTests/Advanced/ConcurrentAccessFixture.cs b/source/Nevermore.IntegrationTests/Advanced/ConcurrentAccessFixture.cs index ffc6a759..65ecf87f 100644 --- a/source/Nevermore.IntegrationTests/Advanced/ConcurrentAccessFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/ConcurrentAccessFixture.cs @@ -37,7 +37,7 @@ public void ConcurrentAccessDoesNotGoBoom() return 0; }) .ToArray(); - transaction.TryCommit(); + transaction.Commit(); } // Now hit it really hard and see if we can provoke a failure. @@ -118,7 +118,7 @@ await Enumerable.Range(0, NumberOfDocuments) // ReSharper disable once AccessToDisposedClosure .Select(document => transaction.InsertAsync(document)) .WhenAll(); - await transaction.TryCommitAsync(); + await transaction.CommitAsync(); } // Now hit it really hard and see if we can provoke a failure. diff --git a/source/Nevermore.IntegrationTests/Advanced/CustomKeyAllocatorFixture.cs b/source/Nevermore.IntegrationTests/Advanced/CustomKeyAllocatorFixture.cs index 977d3e3a..d48c63c8 100644 --- a/source/Nevermore.IntegrationTests/Advanced/CustomKeyAllocatorFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/CustomKeyAllocatorFixture.cs @@ -90,7 +90,7 @@ public void ShouldAllocateCustomKeyToInsertedDocuments() using var transaction = store.BeginTransaction(); transaction.Insert(document); - transaction.TryCommit(); + transaction.Commit(); document.Id.Should().Be("Simples-100"); } diff --git a/source/Nevermore.IntegrationTests/Advanced/HooksFixture.cs b/source/Nevermore.IntegrationTests/Advanced/HooksFixture.cs index 98e79220..9cde393f 100644 --- a/source/Nevermore.IntegrationTests/Advanced/HooksFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/HooksFixture.cs @@ -31,7 +31,7 @@ public void ShouldCallHooks() transaction.Delete(customer); AssertLogged(log, "BeforeDelete", "AfterDelete"); - transaction.TryCommit(); + transaction.Commit(); AssertLogged(log, "BeforeCommit", "AfterCommit"); } diff --git a/source/Nevermore.IntegrationTests/Advanced/IdentityIdFixture.cs b/source/Nevermore.IntegrationTests/Advanced/IdentityIdFixture.cs index a12283f7..bd94d453 100644 --- a/source/Nevermore.IntegrationTests/Advanced/IdentityIdFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/IdentityIdFixture.cs @@ -95,7 +95,7 @@ TResult RunInTransaction(Func func, st { using var transaction = Store.BeginTransaction(name: name); var result = func(transaction); - transaction.TryCommit(); + transaction.Commit(); return result; } @@ -113,7 +113,7 @@ async Task RunInTransactionAsync(Func action, string name) diff --git a/source/Nevermore.IntegrationTests/Advanced/InstanceTypesFixture.cs b/source/Nevermore.IntegrationTests/Advanced/InstanceTypesFixture.cs index cbeaff4f..0978e0c8 100644 --- a/source/Nevermore.IntegrationTests/Advanced/InstanceTypesFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/InstanceTypesFixture.cs @@ -109,7 +109,7 @@ public void ShouldStoreConcreteAccounts() using var transaction = Store.BeginTransaction(); transaction.Insert(new AwsAccount { Name = "My AWS account", SecretKey = "keys9812"}); transaction.Insert(new AzureAccount { Name = "My Azure account", AzureSubscriptionId = "sub128721"}); - transaction.TryCommit(); + transaction.Commit(); } [Test, Order(2)] diff --git a/source/Nevermore.IntegrationTests/Advanced/JsonLastTableColumnResolverFixture.cs b/source/Nevermore.IntegrationTests/Advanced/JsonLastTableColumnResolverFixture.cs index 28eeafcb..b76f9fe0 100644 --- a/source/Nevermore.IntegrationTests/Advanced/JsonLastTableColumnResolverFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/JsonLastTableColumnResolverFixture.cs @@ -34,7 +34,7 @@ public void ShouldNotDeadlockWhenRunningAQuery() { var id = writeTransaction.AllocateId(typeof(Customer)); writeTransaction.Insert(new Customer {Id = id}); - writeTransaction.TryCommit(); + writeTransaction.Commit(); } using var readTransaction = Store.BeginReadTransaction(); diff --git a/source/Nevermore.IntegrationTests/Advanced/MappingFixture.cs b/source/Nevermore.IntegrationTests/Advanced/MappingFixture.cs index ea472b77..42d52237 100644 --- a/source/Nevermore.IntegrationTests/Advanced/MappingFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/MappingFixture.cs @@ -110,7 +110,7 @@ public void ShouldInsert() transaction.Insert(user); transaction.Update(user); - transaction.TryCommit(); + transaction.Commit(); } [Test, Order(4)] @@ -136,7 +136,7 @@ public void ShouldDelete() transaction.Delete("users-123"); var user = transaction.Load("users-123"); user.Should().BeNull(); - transaction.TryCommit(); + transaction.Commit(); } } } \ No newline at end of file diff --git a/source/Nevermore.IntegrationTests/Advanced/RowVersionFixture .cs b/source/Nevermore.IntegrationTests/Advanced/RowVersionFixture .cs index c063b774..728b296f 100644 --- a/source/Nevermore.IntegrationTests/Advanced/RowVersionFixture .cs +++ b/source/Nevermore.IntegrationTests/Advanced/RowVersionFixture .cs @@ -150,7 +150,7 @@ TResult RunInTransaction(Func func) { using var transaction = Store.BeginTransaction(); var result = func(transaction); - transaction.TryCommit(); + transaction.Commit(); return result; } diff --git a/source/Nevermore.IntegrationTests/Advanced/TableValuesParametersFixture.cs b/source/Nevermore.IntegrationTests/Advanced/TableValuesParametersFixture.cs index 771ebe5f..12786dcd 100644 --- a/source/Nevermore.IntegrationTests/Advanced/TableValuesParametersFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/TableValuesParametersFixture.cs @@ -45,7 +45,7 @@ public void ShouldBulkInsert() var count = writer.ExecuteScalar("select count(*) from TestSchema.SomeTable"); count.Should().Be(100000); - writer.TryCommit(); + writer.Commit(); } } } \ No newline at end of file diff --git a/source/Nevermore.IntegrationTests/Advanced/UseExistingTransactionFixture.cs b/source/Nevermore.IntegrationTests/Advanced/UseExistingTransactionFixture.cs index 539a9478..dca0c3af 100644 --- a/source/Nevermore.IntegrationTests/Advanced/UseExistingTransactionFixture.cs +++ b/source/Nevermore.IntegrationTests/Advanced/UseExistingTransactionFixture.cs @@ -148,12 +148,12 @@ public async Task CommittingNonOwnedTransaction_Throws() { const string expectedMessage = $"{nameof(WriteTransaction)} cannot commit a transaction it does not own"; - await new Func(async () => await nonOwnedTransaction.TryCommitAsync(cancellationToken)) + await new Func(async () => await nonOwnedTransaction.CommitAsync(cancellationToken)) .Should() .ThrowExactlyAsync() .WithMessage(expectedMessage); - new Action(() => nonOwnedTransaction.TryCommit()) + new Action(() => nonOwnedTransaction.Commit()) .Should() .ThrowExactly() .WithMessage(expectedMessage); diff --git a/source/Nevermore.IntegrationTests/AsyncExamples.cs b/source/Nevermore.IntegrationTests/AsyncExamples.cs index 850f4d87..1520247d 100644 --- a/source/Nevermore.IntegrationTests/AsyncExamples.cs +++ b/source/Nevermore.IntegrationTests/AsyncExamples.cs @@ -23,7 +23,7 @@ public async Task InsertAndLoad() await transaction.InsertAsync( new Product { Name = "First product", Price = 100.00M, Type = ProductType.Dodgy}, new InsertOptions { CustomAssignedId = "Product-First"}); - transaction.TryCommit(); + transaction.Commit(); } using (var reader = await Store.BeginReadTransactionAsync()) @@ -46,7 +46,7 @@ await transaction.InsertAsync( await transaction.InsertAsync( new Product { Name = "Second product", Price = 200.00M, Type = ProductType.Dodgy}, new InsertOptions { CustomAssignedId = "Product-Second"}); - await transaction.TryCommitAsync(); + await transaction.CommitAsync(); } using (var reader = await Store.BeginReadTransactionAsync()) diff --git a/source/Nevermore.IntegrationTests/Examples.cs b/source/Nevermore.IntegrationTests/Examples.cs index 1efbbf5d..fcb9b4cb 100644 --- a/source/Nevermore.IntegrationTests/Examples.cs +++ b/source/Nevermore.IntegrationTests/Examples.cs @@ -81,7 +81,7 @@ public void Insert() using var transaction = store.BeginTransaction(); transaction.Insert(person); - transaction.TryCommit(); + transaction.Commit(); // ID's are assigned automatically when the Insert call completes. person.Id.Should().Be("Persons-1"); @@ -108,7 +108,7 @@ public void InsertMany() new Person {FirstName = "Buggs", LastName = "Bunny", Email = "buggs.bunny@wb.com", Tags = {"rabbit", "wb"}}, new Person {FirstName = "Prince", LastName = null, Email = "prince", Tags = {"singer"}}, }); - transaction.TryCommit(); + transaction.Commit(); } [Test, Order(4)] diff --git a/source/Nevermore.IntegrationTests/KeyAllocatorFixture.cs b/source/Nevermore.IntegrationTests/KeyAllocatorFixture.cs index 58a7c914..ee983f60 100644 --- a/source/Nevermore.IntegrationTests/KeyAllocatorFixture.cs +++ b/source/Nevermore.IntegrationTests/KeyAllocatorFixture.cs @@ -150,7 +150,7 @@ public void ShouldAllocateInParallel() { var id = transaction.AllocateId(); customerIds.Add(id); - transaction.TryCommit(); + transaction.Commit(); } else if (sequence == 1) { @@ -164,7 +164,7 @@ public void ShouldAllocateInParallel() { var id = transaction.AllocateId(); deploymentIds.Add(id); - transaction.TryCommit(); + transaction.Commit(); } } })).ToArray(); @@ -210,7 +210,7 @@ public async Task AllocateIdAsync_ShouldAllocateInParallel() { var id = await transaction.AllocateIdAsync(CancellationToken.None); customerIds.Add(id); - await transaction.TryCommitAsync(); + await transaction.CommitAsync(); } else if (sequence == 1) { @@ -224,7 +224,7 @@ public async Task AllocateIdAsync_ShouldAllocateInParallel() { var id = await transaction.AllocateIdAsync(CancellationToken.None); deploymentIds.Add(id); - await transaction.TryCommitAsync(); + await transaction.CommitAsync(); } } })).ToArray(); diff --git a/source/Nevermore.IntegrationTests/QueryBuilderIntegrationFixture.cs b/source/Nevermore.IntegrationTests/QueryBuilderIntegrationFixture.cs index cd402252..5e982b05 100644 --- a/source/Nevermore.IntegrationTests/QueryBuilderIntegrationFixture.cs +++ b/source/Nevermore.IntegrationTests/QueryBuilderIntegrationFixture.cs @@ -48,7 +48,7 @@ public void WhereNullClause() new Customer {FirstName = "Charlie", LastName = "Cherry", Nickname = "Chazza"} }) t.Insert(c); - t.TryCommit(); + t.Commit(); var customersNull = t.Query() .Where(c => c.Nickname == null) @@ -78,7 +78,7 @@ public void CrossJoin() new Customer {FirstName = "Bob", LastName = "Barker", Nickname = "Bazza"}, new Customer {FirstName = "Charlie", LastName = "Cherry", Nickname = "Chazza"} }); - t.TryCommit(); + t.Commit(); var customersNull = t.Query() .Where(n => n.Nickname != null) @@ -110,7 +110,7 @@ public async Task CountAsyncPolymorphic() }; await t.InsertManyAsync(testBrands); - await t.TryCommitAsync(); + await t.CommitAsync(); var count = await t.Query().Where(b => b.Name.Contains("Brand")).CountAsync(); @@ -133,7 +133,7 @@ public async Task JoinWithPolymorphicDocument() new Customer {FirstName = "Charlie", LastName = "Cherry", Nickname = "Chazza"} }); - await t.TryCommitAsync(); + await t.CommitAsync(); var productQuery = t.Query() .InnerJoin(t.Query()) diff --git a/source/Nevermore.IntegrationTests/QueryableIntegrationFixture.cs b/source/Nevermore.IntegrationTests/QueryableIntegrationFixture.cs index d626435a..b1d00a36 100644 --- a/source/Nevermore.IntegrationTests/QueryableIntegrationFixture.cs +++ b/source/Nevermore.IntegrationTests/QueryableIntegrationFixture.cs @@ -30,7 +30,7 @@ public void WhereEqual() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(c => c.FirstName == "Alice") @@ -53,7 +53,7 @@ public void WhereEqualIdColumn() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(c => c.Id == alice.Id) @@ -79,7 +79,7 @@ public void WhereEqualTypeResolutionColumn() t.Insert(c); } - t.TryCommit(); + t.Commit(); var brands = t.Queryable() .Where(b => b.Type == "BrandB") @@ -105,7 +105,7 @@ public void WhereEqualRowVersionColumn() t.Insert(c); } - t.TryCommit(); + t.Commit(); var documents = t.Queryable() .Where(d => d.RowVersion == testDoc3.RowVersion) @@ -130,7 +130,7 @@ public async Task WhereEqualPolymorphicDocumentColumn() t.Insert(p); } - t.TryCommit(); + t.Commit(); // query by base type var dodgyProduct = t.Queryable() @@ -163,7 +163,7 @@ public void WhereEqualJson() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(m => m.Endpoint.Name == "Tentacle A") @@ -190,7 +190,7 @@ public void WhereEqualJsonDateTimeOffset() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(m => m.LastModified == testLastModified) @@ -216,7 +216,7 @@ public void WhereIsNullJsonValue() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(m => m.Endpoint.Name == null || m.Endpoint.Name == "Tentacle A") @@ -242,7 +242,7 @@ public void WhereIsNullJsonObject() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(m => m.Endpoint == null || m.Endpoint.Name == "Tentacle A") @@ -268,7 +268,7 @@ public void WhereNotEqual() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(c => c.FirstName != "Alice") @@ -294,7 +294,7 @@ public void WhereGreaterThan() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(c => c.Balance > 100) @@ -320,7 +320,7 @@ public void WhereLessThan() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(c => c.Balance < 100) @@ -346,7 +346,7 @@ public void WhereGreaterThanOrEqual() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(c => c.Balance >= 301.4m) @@ -372,7 +372,7 @@ public void WhereLessThanOrEqual() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(c => c.Balance <= 56.3m) @@ -398,7 +398,7 @@ public void WhereUnaryBool() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(c => c.IsVip) @@ -424,7 +424,7 @@ public void WhereNotUnaryBool() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(c => !c.IsVip) @@ -450,7 +450,7 @@ public void WhereUnaryBoolJson() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(c => c.IsEmployee) @@ -476,7 +476,7 @@ public void WhereNotUnaryBoolJson() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(c => !c.IsEmployee) @@ -502,7 +502,7 @@ public void WhereCompositeAnd() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(c => c.Balance >= 50m && c.IsEmployee && c.FirstName.StartsWith("B")) @@ -528,7 +528,7 @@ public void WhereCompositeOr() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(c => c.Balance < 40m || c.IsEmployee || c.LastName.Contains("n")) @@ -554,7 +554,7 @@ public void WhereContains() t.Insert(c); } - t.TryCommit(); + t.Commit(); var names = new[] { "Apple", "Orange", "Peach" }; var customers = t.Queryable() @@ -581,7 +581,7 @@ public void WhereContainsEmpty() t.Insert(c); } - t.TryCommit(); + t.Commit(); var names = Array.Empty(); var customers = t.Queryable() @@ -608,7 +608,7 @@ public void WhereContainsOnDocument() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(c => c.Roles.Contains("RoleC")) @@ -634,7 +634,7 @@ public void WhereContainsOnDocumentJson() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(c => c.LuckyNumbers.Contains(4)) @@ -660,7 +660,7 @@ public void WhereNotContains() t.Insert(c); } - t.TryCommit(); + t.Commit(); var names = new[] { "Apple", "Orange", "Peach" }; var customers = t.Queryable() @@ -687,7 +687,7 @@ public void WhereNotContainsEmpty() t.Insert(c); } - t.TryCommit(); + t.Commit(); var names = Array.Empty(); var customers = t.Queryable() @@ -714,7 +714,7 @@ public void WhereStringContains() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(c => c.Nickname.Contains("hi")) @@ -740,7 +740,7 @@ public void WhereNotStringContains() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(c => !c.Nickname.Contains("hi")) @@ -766,7 +766,7 @@ public void WhereStringContainsSpecialCharacters() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Where(c => c.Nickname.Contains("[")) @@ -794,7 +794,7 @@ public void First() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customer = t.Queryable() .First(); @@ -819,7 +819,7 @@ public void FirstWithPredicate() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customer = t.Queryable() .First(c => c.FirstName == "Alice"); @@ -844,7 +844,7 @@ public void FirstOrDefault() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customer = t.Queryable() .FirstOrDefault(); @@ -869,7 +869,7 @@ public async Task FirstOrDefaultAsync() t.Insert(c); } - await t.TryCommitAsync(); + await t.CommitAsync(); var customer = await t.Queryable() .FirstOrDefaultAsync(); @@ -894,7 +894,7 @@ public void FirstOrDefaultWithPredicate() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customer = t.Queryable() .FirstOrDefault(c => c.FirstName.EndsWith("y")); @@ -919,7 +919,7 @@ public async Task FirstOrDefaultWithPredicateAsync() t.Insert(c); } - await t.TryCommitAsync(); + await t.CommitAsync(); var customer = await t.Queryable() .FirstOrDefaultAsync(c => c.FirstName.EndsWith("y")); @@ -944,7 +944,7 @@ public void Skip() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Skip(2) @@ -970,7 +970,7 @@ public void Take() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Take(2) @@ -998,7 +998,7 @@ public void SkipAndTake() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .Skip(2) @@ -1025,7 +1025,7 @@ public void Count() t.Insert(c); } - t.TryCommit(); + t.Commit(); var count = t.Queryable().Count(); @@ -1049,7 +1049,7 @@ public async Task CountAsync() t.Insert(c); } - await t.TryCommitAsync(); + await t.CommitAsync(); var count = await t.Queryable().CountAsync(); @@ -1073,7 +1073,7 @@ public async Task CountAsyncPolymorphic() t.Insert(b); } - await t.TryCommitAsync(); + await t.CommitAsync(); var count = await t.Queryable().CountAsync(); @@ -1097,7 +1097,7 @@ public void Hint() t.Insert(c); } - t.TryCommit(); + t.Commit(); var a = t.Queryable().Where(x => x.FirstName == "Alice").Hint("WITH (ROWLOCK, UPDLOCK, NOWAIT)").RawDebugView(); a.Should().Be($"SELECT Id,FirstName,LastName,Nickname,Roles,Balance,IsVip,JSON{Environment.NewLine}" + @@ -1122,7 +1122,7 @@ public void CountWithPredicate() t.Insert(c); } - t.TryCommit(); + t.Commit(); var count = t.Queryable().Count(c => c.Nickname.StartsWith("C")); @@ -1146,7 +1146,7 @@ public async Task CountWithPredicateAsync() t.Insert(c); } - await t.TryCommitAsync(); + await t.CommitAsync(); var count = await t.Queryable().CountAsync(c => c.Nickname.StartsWith("C")); @@ -1170,7 +1170,7 @@ public async Task CountWithPredicateAsyncPolymorphic() t.Insert(b); } - await t.TryCommitAsync(); + await t.CommitAsync(); var count = await t.Queryable().CountAsync(b => b.Name.StartsWith("Brand")); @@ -1194,7 +1194,7 @@ public void CountWithOrderBy() t.Insert(c); } - t.TryCommit(); + t.Commit(); var count = t.Queryable().OrderBy(c => c.LastName).Count(c => c.Nickname.StartsWith("C")); @@ -1218,7 +1218,7 @@ public void OrderBy() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable().OrderBy(c => c.Nickname).ToList(); @@ -1242,7 +1242,7 @@ public void OrderByDescending() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable().OrderByDescending(c => c.Nickname).ToList(); @@ -1266,7 +1266,7 @@ public void OrderByThenBy() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .OrderBy(c => c.LastName) @@ -1293,7 +1293,7 @@ public void OrderByThenByDescending() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable() .OrderBy(c => c.LastName) @@ -1320,7 +1320,7 @@ public void Any() t.Insert(c); } - t.TryCommit(); + t.Commit(); var anyCustomers = t.Queryable().Any(); @@ -1344,7 +1344,7 @@ public async Task AnyAsync() t.Insert(c); } - await t.TryCommitAsync(); + await t.CommitAsync(); var anyCustomers = await t.Queryable().AnyAsync(); @@ -1368,7 +1368,7 @@ public void AnyWithPredicate() t.Insert(c); } - t.TryCommit(); + t.Commit(); var anyCustomers = t.Queryable().Any(c => c.Nickname == "Warlock"); @@ -1392,7 +1392,7 @@ public async Task AnyWithPredicateAsync() t.Insert(c); } - await t.TryCommitAsync(); + await t.CommitAsync(); var anyCustomers = await t.Queryable().AnyAsync(c => c.Nickname == "Warlock"); @@ -1416,7 +1416,7 @@ public void WhereCustomSql() t.Insert(c); } - t.TryCommit(); + t.Commit(); var customers = t.Queryable().WhereCustom("[Roles] LIKE '%|B%'").ToList(); @@ -1440,7 +1440,7 @@ public async Task ToListAsync() t.Insert(c); } - await t.TryCommitAsync(); + await t.CommitAsync(); var customers = await t.Queryable().Where(c => c.FirstName == "Alice").ToListAsync(); @@ -1493,7 +1493,7 @@ public async Task ProjectColumnField() t.Insert(c); } - await t.TryCommitAsync(); + await t.CommitAsync(); var customers = t.Queryable().Select(c => c.FirstName); @@ -1517,7 +1517,7 @@ public async Task ProjectJsonField() t.Insert(c); } - await t.TryCommitAsync(); + await t.CommitAsync(); var customers = t.Queryable().Select(c => new { c.FirstName, c.IsEmployee }); @@ -1545,7 +1545,7 @@ public async Task ProjectValueType() t.Insert(c); } - await t.TryCommitAsync(); + await t.CommitAsync(); var customers = await t.Queryable().Select(c => c.IsEmployee).ToListAsync(); @@ -1565,7 +1565,7 @@ public async Task ProjectTypeWithParameterizedConstructor() }; await t.InsertManyAsync(testCustomers); - await t.TryCommitAsync(); + await t.CommitAsync(); var customers = await t.Queryable().Select(c => new CustomerProjection(c.FirstName, c.IsEmployee)).ToListAsync(); @@ -1602,7 +1602,7 @@ public async Task ProjectRecord() }; await t.InsertManyAsync(testCustomers); - await t.TryCommitAsync(); + await t.CommitAsync(); var customers = await t.Queryable().Select(c => new CustomerRecord(c.FirstName, c.IsEmployee)).ToListAsync(); diff --git a/source/Nevermore.IntegrationTests/RelatedDocumentTableFixture.cs b/source/Nevermore.IntegrationTests/RelatedDocumentTableFixture.cs index 8ad18451..8fdb2b8b 100644 --- a/source/Nevermore.IntegrationTests/RelatedDocumentTableFixture.cs +++ b/source/Nevermore.IntegrationTests/RelatedDocumentTableFixture.cs @@ -52,7 +52,7 @@ public void GivenRecordsCurrentlyExist() foreach (var item in StartingRecords) trn.ExecuteNonQuery($"INSERT INTO TestSchema.[{DocumentMap.RelatedDocumentTableName}] VALUES ('{item.Id}', '{item.Table}', '{item.RelatedDocumentId}', '{item.RelatedDocumentType}')"); - trn.TryCommit(); + trn.Commit(); } } @@ -65,7 +65,7 @@ public void AndGivenAnOrderReferencing(string[] referenceIds) foreach (var reference in referenceIds) trn.ExecuteNonQuery($"INSERT INTO TestSchema.[{DocumentMap.RelatedDocumentTableName}] VALUES ('{orderId}', 'Order', '{reference}', 'Product')"); - trn.TryCommit(); + trn.Commit(); } // Check that went well @@ -88,7 +88,7 @@ public void WhenANewOrderIsInsertedReferencing(string[] referenceIds) using (var trn = Store.BeginTransaction()) { trn.Insert(order); - trn.TryCommit(); + trn.Commit(); } Console.WriteLine("New Order ID: " + order.Id); @@ -106,7 +106,7 @@ public void WhenTheOrderIsUpdatedReferencing(string[] referenceIds) using (var trn = Store.BeginTransaction()) { trn.Update(order); - trn.TryCommit(); + trn.Commit(); } } @@ -116,7 +116,7 @@ public void WhenTheOrderIsDeleted() using (var trn = Store.BeginTransaction()) { trn.Delete(order); - trn.TryCommit(); + trn.Commit(); } } @@ -128,7 +128,7 @@ public void WhenTheOrderIsDeletedUsingTheQueryBuilder() trn.DeleteQuery() .Where(nameof(order.Id), UnarySqlOperand.Equal, orderId) .Delete(); - trn.TryCommit(); + trn.Commit(); } } diff --git a/source/Nevermore.IntegrationTests/RelationalStoreFixture.cs b/source/Nevermore.IntegrationTests/RelationalStoreFixture.cs index 89d08bf3..ab071209 100644 --- a/source/Nevermore.IntegrationTests/RelationalStoreFixture.cs +++ b/source/Nevermore.IntegrationTests/RelationalStoreFixture.cs @@ -29,7 +29,7 @@ public void ShouldGenerateIdsUnlessExplicitlyAssigned() customer2.Id.Value.Should().StartWith("Customers-"); customer3.Id.Value.Should().Be("Customers-Chazza"); - transaction.TryCommit(); + transaction.Commit(); } } @@ -44,7 +44,7 @@ public void ShouldPersistReferenceCollectionsToAllowLikeSearches() transaction.Insert(customer1); transaction.Insert(customer2); transaction.Insert(customer3); - transaction.TryCommit(); + transaction.Commit(); } // ReferenceCollection columns that are indexed are always stored in pipe-separated format with pipes at the front and end: |foo|bar|baz| @@ -71,7 +71,7 @@ public void TableWithTypeAfterJsonShouldBeAbleToDeserialize() transaction.Insert(product2); transaction.Insert(product3); transaction.Insert(product4); - transaction.TryCommit(); + transaction.Commit(); } using (var transaction = Store.BeginTransaction()) @@ -90,7 +90,7 @@ public void ShouldBuildJoinSelectsWithJsonColumnLast() { transaction.Insert(product1); transaction.Insert(product2); - transaction.TryCommit(); + transaction.Commit(); } using (var transaction = Store.BeginTransaction()) @@ -116,7 +116,7 @@ public void ShouldPersistCollectionsToAllowInSearches() transaction.Insert(customer1); transaction.Insert(customer2); transaction.Insert(customer3); - transaction.TryCommit(); + transaction.Commit(); } // ReferenceCollection columns that are indexed are always stored in pipe-separated format with pipes at the front and end: |foo|bar|baz| @@ -137,7 +137,7 @@ public void ShouldHandleIdsWithInOperand() { var customer = new Customer {FirstName = "Alice", LastName = "Apple"}; transaction.Insert(customer); - transaction.TryCommit(); + transaction.Commit(); customerId = customer.Id; } @@ -163,7 +163,7 @@ public void ShouldHandleLoadManyWithCustomKeyType() transaction.Insert(customer1); transaction.Insert(customer2); transaction.Insert(customer3); - transaction.TryCommit(); + transaction.Commit(); ids.Add(customer1.Id); ids.Add(customer3.Id); ids.Add(customer2.Id); @@ -190,7 +190,7 @@ public void ShouldMultiSelect() transaction.Insert(new LineItem {ProductId = "product-1", Name = "Line 2", Quantity = 10}); transaction.Insert(new LineItem {PurchaseDate = DateTime.MaxValue, ProductId = "product-2", Name = "Line 3", Quantity = 20}); - transaction.TryCommit(); + transaction.Commit(); } using (var transaction = Store.BeginTransaction()) @@ -221,7 +221,7 @@ public void ShouldAllowNoPrefixOnProjectionMapping() transaction.Insert(new LineItem {ProductId = "product-1", Name = "Line 2", Quantity = 10}); transaction.Insert(new LineItem {PurchaseDate = DateTime.MaxValue, ProductId = "product-2", Name = "Line 3", Quantity = 20}); - transaction.TryCommit(); + transaction.Commit(); } using (var transaction = Store.BeginTransaction()) @@ -247,7 +247,7 @@ public void ShouldInsertOneRecordWithInsertMany() using (var transaction = Store.BeginTransaction()) { transaction.InsertMany(new[] { product }); - transaction.TryCommit(); + transaction.Commit(); } product.Id.Should().Be("Products-1"); @@ -262,7 +262,7 @@ public void ShouldInsertManyRecordsWithInsertMany() using (var transaction = Store.BeginTransaction()) { transaction.InsertMany(new[] {product1, product2}); - transaction.TryCommit(); + transaction.Commit(); } product1.Id.Should().Be("Products-1"); @@ -316,7 +316,7 @@ public void ShouldPersistAndLoadReferenceCollectionsOnSingleDocuments() var customer = new Customer {FirstName = "Alice", LastName = "Apple", LuckyNumbers = new[] {12, 13}, Nickname = "Ally", Roles = {"web-server", "app-server"}}; transaction.Insert(customer); customerId = customer.Id; - transaction.TryCommit(); + transaction.Commit(); } using (var transaction = Store.BeginTransaction()) { diff --git a/source/Nevermore.IntegrationTests/RelationalTransaction/DeleteFixture.cs b/source/Nevermore.IntegrationTests/RelationalTransaction/DeleteFixture.cs index df09e6ab..155ba7d5 100644 --- a/source/Nevermore.IntegrationTests/RelationalTransaction/DeleteFixture.cs +++ b/source/Nevermore.IntegrationTests/RelationalTransaction/DeleteFixture.cs @@ -17,7 +17,7 @@ public void DeleteByEntity() { var product = trn.Load(id); trn.Delete(product); - trn.TryCommit(); + trn.Commit(); } using (var trn = Store.BeginTransaction()) @@ -32,7 +32,7 @@ public void DeleteById() using (var trn = Store.BeginTransaction()) { trn.Delete(id); - trn.TryCommit(); + trn.Commit(); } using (var trn = Store.BeginTransaction()) @@ -59,7 +59,7 @@ string AddTestProduct() Name = "foo" }; trn.Insert(product); - trn.TryCommit(); + trn.Commit(); return product.Id; } } diff --git a/source/Nevermore.IntegrationTests/RelationalTransaction/LoadFixture.cs b/source/Nevermore.IntegrationTests/RelationalTransaction/LoadFixture.cs index 89fc1913..65bab4ea 100644 --- a/source/Nevermore.IntegrationTests/RelationalTransaction/LoadFixture.cs +++ b/source/Nevermore.IntegrationTests/RelationalTransaction/LoadFixture.cs @@ -48,7 +48,7 @@ public void LoadWithMultipleIdsWithDifferentLength() Type = ProductType.Normal }; trn.Insert(product2); - trn.TryCommit(); + trn.Commit(); var ids = new[] {product1.Id, product2.Id}; @@ -194,7 +194,7 @@ public void StoreStringInheritedTypesSerializeCorrectly() trn.Insert(brandA); trn.Insert(brandB); - trn.TryCommit(); + trn.Commit(); var allBrands = trn.Stream<(string Name, string JSON)>("select Name, [JSON] from TestSchema.Brand").ToList(); @@ -212,7 +212,7 @@ public void StoreAndLoadStringInheritedTypes() trn.Insert(brandA); trn.Insert(brandB); - trn.TryCommit(); + trn.Commit(); var allBrands = trn.Query().ToList(); @@ -229,7 +229,7 @@ public void StoreAndLoadStringInheritedTypesThatAreProperties() trn.Insert(machineA); trn.Insert(machineB); - trn.TryCommit(); + trn.Commit(); var allMachines = trn.Query().ToList(); @@ -245,7 +245,7 @@ public void StoreAndLoadFromParameterizedRawSql() InsertProductAndLineItems("Unicorn Poop", 3m, trn, 2, 3); // subtotal: $15 of Unicorn Poop InsertProductAndLineItems("Unicorn Dust", 1m, trn, 2, 1, 7); // subtotal: $10 of Unicorn Dust InsertProductAndLineItems("Fairy Bread", 10m, trn, 4); // subtotal: $40 of Fairy Bread - trn.TryCommit(); + trn.Commit(); var productSubtotalQuery = @"SELECT Id, @@ -307,7 +307,7 @@ public void StoreAndLoadAnyIdTypes() var messageA = new MessageWithGuidId { Id = Guid.NewGuid(), Sender = "Sender A", Body = "Body of Message A" }; trn.Insert(messageA); - trn.TryCommit(); + trn.Commit(); var loadedMessageA = trn.Load(messageA.Id); @@ -341,7 +341,7 @@ public void StoreAndLoadManyForStringIdType() { trn.Insert(message); } - trn.TryCommit(); + trn.Commit(); var loadedMessages = trn.LoadMany(messages.Select(m => m.Id));loadedMessages.Should().BeEquivalentTo(messages); } @@ -360,7 +360,7 @@ public void StoreAndLoadManyForIntIdType() { trn.Insert(message); } - trn.TryCommit(); + trn.Commit(); var loadedMessages = trn.LoadMany(messages.Select(m => m.Id)); @@ -381,7 +381,7 @@ public void StoreAndLoadManyForLongIdType() { trn.Insert(message); } - trn.TryCommit(); + trn.Commit(); var loadedMessages = trn.LoadMany(messages.Select(m => m.Id)); @@ -402,7 +402,7 @@ public void StoreAndLoadManyForGuidIdType() { trn.Insert(message); } - trn.TryCommit(); + trn.Commit(); var loadedMessages = trn.LoadMany(messages.Select(m => m.Id)); diff --git a/source/Nevermore.IntegrationTests/ToListWithCountAsyncFixture.cs b/source/Nevermore.IntegrationTests/ToListWithCountAsyncFixture.cs index 89a481df..eb2c1dc8 100644 --- a/source/Nevermore.IntegrationTests/ToListWithCountAsyncFixture.cs +++ b/source/Nevermore.IntegrationTests/ToListWithCountAsyncFixture.cs @@ -28,7 +28,7 @@ public async Task QueryReturnsCorrectDataPageAndCount(bool useCteOperation) new Customer {FirstName = "Eric", LastName = "Evans", Nickname = "Bob"} }) t.Insert(c); - await t.TryCommitAsync(CancellationToken.None); + await t.CommitAsync(CancellationToken.None); FeatureFlags.UseCteBasedListWithCount = useCteOperation; var (items, count) = await t.Query() @@ -56,7 +56,7 @@ public async Task WhenPageReturnsNoDataThenNonZeroCountStillReturns(int skip, in new Customer {FirstName = "Charlie", LastName = "Cherry", Nickname = "Chazza"}, }) t.Insert(c); - await t.TryCommitAsync(CancellationToken.None); + await t.CommitAsync(CancellationToken.None); FeatureFlags.UseCteBasedListWithCount = true; var (items, count) = await t.Query() diff --git a/source/Nevermore/Advanced/WriteTransaction.cs b/source/Nevermore/Advanced/WriteTransaction.cs index 94ebe99f..e80c2ade 100644 --- a/source/Nevermore/Advanced/WriteTransaction.cs +++ b/source/Nevermore/Advanced/WriteTransaction.cs @@ -338,7 +338,7 @@ public async ValueTask AllocateIdAsync(string tableName, string idPrefix return $"{idPrefix}-{key}"; } - public void Commit() + public void CommitIfOwned() { if (!OwnsSqlTransaction) return; @@ -348,7 +348,7 @@ public void Commit() CommitTransactionAndRunHooks(); } - public void TryCommit() + public void Commit() { if (!OwnsSqlTransaction) throw new InvalidOperationException($"{nameof(WriteTransaction)} cannot commit a transaction it does not own"); @@ -369,14 +369,14 @@ void CommitTransactionAndRunHooks() configuration.Hooks.AfterCommit(this); } - public async Task CommitAsync(CancellationToken cancellationToken = default) + public async Task CommitIfOwnedAsync(CancellationToken cancellationToken = default) { if (!OwnsSqlTransaction) return; await CommitTransactionAndRunHooksAsync(cancellationToken).ConfigureAwait(false); } - public async Task TryCommitAsync(CancellationToken cancellationToken = default) + public async Task CommitAsync(CancellationToken cancellationToken = default) { if (!OwnsSqlTransaction) throw new InvalidOperationException($"{nameof(WriteTransaction)} cannot commit a transaction it does not own"); diff --git a/source/Nevermore/IWriteTransaction.cs b/source/Nevermore/IWriteTransaction.cs index b14a31fa..6f3da32a 100644 --- a/source/Nevermore/IWriteTransaction.cs +++ b/source/Nevermore/IWriteTransaction.cs @@ -5,9 +5,9 @@ namespace Nevermore { public interface IWriteTransaction : IReadTransaction, IWriteQueryExecutor { + void CommitIfOwned(); + Task CommitIfOwnedAsync(CancellationToken cancellationToken = default); void Commit(); Task CommitAsync(CancellationToken cancellationToken = default); - void TryCommit(); - Task TryCommitAsync(CancellationToken cancellationToken = default); } } \ No newline at end of file diff --git a/source/Nevermore/Mapping/KeyAllocator.cs b/source/Nevermore/Mapping/KeyAllocator.cs index bdbfa0c2..3506d291 100644 --- a/source/Nevermore/Mapping/KeyAllocator.cs +++ b/source/Nevermore/Mapping/KeyAllocator.cs @@ -69,7 +69,7 @@ async Task GetNextMaxValue(CancellationToken ct) parameters.CommandType = CommandType.StoredProcedure; var result = await transaction.ExecuteScalarAsync("GetNextKeyBlock", parameters, cancellationToken: ct).ConfigureAwait(false); - await transaction.TryCommitAsync(ct).ConfigureAwait(false); + await transaction.CommitAsync(ct).ConfigureAwait(false); return result; } @@ -106,7 +106,7 @@ int GetNextMaxValue() parameters.CommandType = CommandType.StoredProcedure; var result = transaction.ExecuteScalar("GetNextKeyBlock", parameters); - transaction.TryCommit(); + transaction.Commit(); return result; }