From 2cff5a4d01d5c4f8a409c8c66789de4d04aacd31 Mon Sep 17 00:00:00 2001 From: Gunnar Liljas Date: Wed, 2 Jan 2019 20:04:21 +0100 Subject: [PATCH 1/2] Move discovery of executedSpaces to RegisterCleanupActions --- .../SecondLevelCacheTest/InvalidationTests.cs | 40 +++++++++++++++++-- .../SecondLevelCacheTest/InvalidationTests.cs | 40 +++++++++++++++++-- src/NHibernate/Async/Engine/ActionQueue.cs | 4 -- src/NHibernate/Engine/ActionQueue.cs | 8 ++-- 4 files changed, 78 insertions(+), 14 deletions(-) diff --git a/src/NHibernate.Test/Async/SecondLevelCacheTest/InvalidationTests.cs b/src/NHibernate.Test/Async/SecondLevelCacheTest/InvalidationTests.cs index 794140f797b..7f892d37417 100644 --- a/src/NHibernate.Test/Async/SecondLevelCacheTest/InvalidationTests.cs +++ b/src/NHibernate.Test/Async/SecondLevelCacheTest/InvalidationTests.cs @@ -15,6 +15,7 @@ using NHibernate.Cache; using NHibernate.Cfg; using NHibernate.Impl; +using NHibernate.Linq; using NHibernate.Test.SecondLevelCacheTests; using NSubstitute; using NUnit.Framework; @@ -59,6 +60,7 @@ public async Task InvalidatesEntitiesAsync() using (var session = OpenSession()) { + //Add Item using (var tx = session.BeginTransaction()) { foreach (var i in Enumerable.Range(1, 10)) @@ -70,6 +72,7 @@ public async Task InvalidatesEntitiesAsync() await (tx.CommitAsync()); } + //Update Item using (var tx = session.BeginTransaction()) { foreach (var i in Enumerable.Range(1, 10)) @@ -81,6 +84,7 @@ public async Task InvalidatesEntitiesAsync() await (tx.CommitAsync()); } + //Delete Item using (var tx = session.BeginTransaction()) { foreach (var i in Enumerable.Range(1, 10)) @@ -91,14 +95,44 @@ public async Task InvalidatesEntitiesAsync() await (tx.CommitAsync()); } + + //Update Item using HQL + using (var tx = session.BeginTransaction()) + { + await (session.CreateQuery("UPDATE Item SET Name='Test'").ExecuteUpdateAsync()); + + await (tx.CommitAsync()); + } + + + //Update Item using LINQ + using (var tx = session.BeginTransaction()) + { + await (session.Query() + .UpdateBuilder() + .Set(x => x.Name, "Test") + .UpdateAsync(CancellationToken.None)); + + await (tx.CommitAsync()); + } + + //Update Item using SQL + using (var tx = session.BeginTransaction()) + { + await (session.CreateSQLQuery("UPDATE Item SET Name='Test'") + .ExecuteUpdateAsync()); + + await (tx.CommitAsync()); + } } - //Should receive one preinvalidation and one invalidation per commit + //Should receive one preinvalidation per non-DML commit Assert.That(preInvalidations, Has.Count.EqualTo(3)); Assert.That(preInvalidations, Has.All.Count.EqualTo(1).And.Contains("Item")); - Assert.That(invalidations, Has.Count.EqualTo(3)); - Assert.That(invalidations, Has.All.Count.EqualTo(1).And.Contains("Item")); + ///...and one invalidation per commit + Assert.That(invalidations, Has.Count.EqualTo(6)); + Assert.That(invalidations, Has.All.Contains("Item")); } protected override void OnTearDown() diff --git a/src/NHibernate.Test/SecondLevelCacheTest/InvalidationTests.cs b/src/NHibernate.Test/SecondLevelCacheTest/InvalidationTests.cs index 050a488bc1e..827f113acce 100644 --- a/src/NHibernate.Test/SecondLevelCacheTest/InvalidationTests.cs +++ b/src/NHibernate.Test/SecondLevelCacheTest/InvalidationTests.cs @@ -5,6 +5,7 @@ using NHibernate.Cache; using NHibernate.Cfg; using NHibernate.Impl; +using NHibernate.Linq; using NHibernate.Test.SecondLevelCacheTests; using NSubstitute; using NUnit.Framework; @@ -47,6 +48,7 @@ public void InvalidatesEntities() using (var session = OpenSession()) { + //Add Item using (var tx = session.BeginTransaction()) { foreach (var i in Enumerable.Range(1, 10)) @@ -58,6 +60,7 @@ public void InvalidatesEntities() tx.Commit(); } + //Update Item using (var tx = session.BeginTransaction()) { foreach (var i in Enumerable.Range(1, 10)) @@ -69,6 +72,7 @@ public void InvalidatesEntities() tx.Commit(); } + //Delete Item using (var tx = session.BeginTransaction()) { foreach (var i in Enumerable.Range(1, 10)) @@ -79,14 +83,44 @@ public void InvalidatesEntities() tx.Commit(); } + + //Update Item using HQL + using (var tx = session.BeginTransaction()) + { + session.CreateQuery("UPDATE Item SET Name='Test'").ExecuteUpdate(); + + tx.Commit(); + } + + + //Update Item using LINQ + using (var tx = session.BeginTransaction()) + { + session.Query() + .UpdateBuilder() + .Set(x => x.Name, "Test") + .Update(); + + tx.Commit(); + } + + //Update Item using SQL + using (var tx = session.BeginTransaction()) + { + session.CreateSQLQuery("UPDATE Item SET Name='Test'") + .ExecuteUpdate(); + + tx.Commit(); + } } - //Should receive one preinvalidation and one invalidation per commit + //Should receive one preinvalidation per non-DML commit Assert.That(preInvalidations, Has.Count.EqualTo(3)); Assert.That(preInvalidations, Has.All.Count.EqualTo(1).And.Contains("Item")); - Assert.That(invalidations, Has.Count.EqualTo(3)); - Assert.That(invalidations, Has.All.Count.EqualTo(1).And.Contains("Item")); + ///...and one invalidation per commit + Assert.That(invalidations, Has.Count.EqualTo(6)); + Assert.That(invalidations, Has.All.Contains("Item")); } protected override void OnTearDown() diff --git a/src/NHibernate/Async/Engine/ActionQueue.cs b/src/NHibernate/Async/Engine/ActionQueue.cs index 15a5951dbdd..c8b81d2868b 100644 --- a/src/NHibernate/Async/Engine/ActionQueue.cs +++ b/src/NHibernate/Async/Engine/ActionQueue.cs @@ -82,10 +82,6 @@ private async Task InnerExecuteAsync(IExecutable executable, CancellationToken c } finally { - if (executable.PropertySpaces != null) - { - executedSpaces.UnionWith(executable.PropertySpaces); - } RegisterCleanupActions(executable); } } diff --git a/src/NHibernate/Engine/ActionQueue.cs b/src/NHibernate/Engine/ActionQueue.cs index d4d8344000a..174abad01d6 100644 --- a/src/NHibernate/Engine/ActionQueue.cs +++ b/src/NHibernate/Engine/ActionQueue.cs @@ -185,10 +185,6 @@ private void InnerExecute(IExecutable executable) } finally { - if (executable.PropertySpaces != null) - { - executedSpaces.UnionWith(executable.PropertySpaces); - } RegisterCleanupActions(executable); } } @@ -197,6 +193,10 @@ private void RegisterCleanupActions(IExecutable executable) { beforeTransactionProcesses.Register(executable.BeforeTransactionCompletionProcess); afterTransactionProcesses.Register(executable.AfterTransactionCompletionProcess); + if (executable.PropertySpaces != null) + { + executedSpaces.UnionWith(executable.PropertySpaces); + } } /// From 5a09c7f2779fa44af8dd6d80c5454c0583a7d4b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Delaporte?= <12201973+fredericdelaporte@users.noreply.github.com> Date: Sun, 6 Jan 2019 15:23:52 +0100 Subject: [PATCH 2/2] Release 5.1.4 To be squashed? --- appveyor.yml | 2 +- build-common/NHibernate.props | 2 +- build-common/common.xml | 4 ++-- releasenotes.txt | 9 +++++++++ 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index c4f82989f1b..b7748b6127e 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: 5.1.3.{build} +version: 5.1.4.{build} image: Visual Studio 2017 environment: matrix: diff --git a/build-common/NHibernate.props b/build-common/NHibernate.props index 331fd0bda73..08a6e8f5777 100644 --- a/build-common/NHibernate.props +++ b/build-common/NHibernate.props @@ -2,7 +2,7 @@ 5 1 - 3 + 4 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/build-common/common.xml b/build-common/common.xml index 3cbf4c1bb88..ce4d7ba63d9 100644 --- a/build-common/common.xml +++ b/build-common/common.xml @@ -13,8 +13,8 @@ - - + + diff --git a/releasenotes.txt b/releasenotes.txt index 96e55077acf..af96ceaa050 100644 --- a/releasenotes.txt +++ b/releasenotes.txt @@ -1,3 +1,12 @@ +Build 5.1.4 +============================= + +Release notes - NHibernate - Version 5.1.4 + +** Bug + + * #1959 Backport Query space invalidation doesn't work for bulk actions + Build 5.1.3 =============================