From b604c898039901d43146f69dce115f64408856c3 Mon Sep 17 00:00:00 2001 From: Roman Artiukhin Date: Sat, 5 Feb 2022 12:27:00 +0200 Subject: [PATCH 1/3] Test case --- .../Async/NHSpecificTest/GH1062/Fixture.cs | 42 +++++++++++++++++++ .../NHSpecificTest/GH1062/Entity.cs | 11 +++++ .../NHSpecificTest/GH1062/Fixture.cs | 31 ++++++++++++++ .../NHSpecificTest/GH1062/Mappings.hbm.xml | 37 ++++++++++++++++ 4 files changed, 121 insertions(+) create mode 100644 src/NHibernate.Test/Async/NHSpecificTest/GH1062/Fixture.cs create mode 100644 src/NHibernate.Test/NHSpecificTest/GH1062/Entity.cs create mode 100644 src/NHibernate.Test/NHSpecificTest/GH1062/Fixture.cs create mode 100644 src/NHibernate.Test/NHSpecificTest/GH1062/Mappings.hbm.xml diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH1062/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH1062/Fixture.cs new file mode 100644 index 00000000000..22c2236adda --- /dev/null +++ b/src/NHibernate.Test/Async/NHSpecificTest/GH1062/Fixture.cs @@ -0,0 +1,42 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by AsyncGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + + +using NHibernate.Dialect; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.GH1062 +{ + using System.Threading.Tasks; + [TestFixture] + public class TriggerIdentityDinamicInsertFixtureAsync : BugTestCase + { + protected override bool AppliesTo(Dialect.Dialect dialect) + { + return dialect is Oracle8iDialect; + } + + [Test] + public async Task CanSaveEnityAsync() + { + using (var session = OpenSession()) + using (var tran = session.BeginTransaction()) + { + var e = new MyEntity { Name = "entity-1" }; + await (session.SaveAsync(e)); + + Assert.AreEqual(1, e.Id, "id not generated through forced insertion"); + + await (session.DeleteAsync(e)); + await (tran.CommitAsync()); + session.Close(); + } + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH1062/Entity.cs b/src/NHibernate.Test/NHSpecificTest/GH1062/Entity.cs new file mode 100644 index 00000000000..771bf8d17e1 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH1062/Entity.cs @@ -0,0 +1,11 @@ +using System; + +namespace NHibernate.Test.NHSpecificTest.GH1062 +{ + public class MyEntity + { + public virtual int Id { get; protected set; } + + public virtual string Name { get; set; } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH1062/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH1062/Fixture.cs new file mode 100644 index 00000000000..5e8c714d5ee --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH1062/Fixture.cs @@ -0,0 +1,31 @@ +using NHibernate.Dialect; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.GH1062 +{ + [TestFixture] + public class TriggerIdentityDinamicInsertFixture : BugTestCase + { + protected override bool AppliesTo(Dialect.Dialect dialect) + { + return dialect is Oracle8iDialect; + } + + [Test] + public void CanSaveEnity() + { + using (var session = OpenSession()) + using (var tran = session.BeginTransaction()) + { + var e = new MyEntity { Name = "entity-1" }; + session.Save(e); + + Assert.AreEqual(1, e.Id, "id not generated through forced insertion"); + + session.Delete(e); + tran.Commit(); + session.Close(); + } + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH1062/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/GH1062/Mappings.hbm.xml new file mode 100644 index 00000000000..cc7b2eadabf --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH1062/Mappings.hbm.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 298760db8119b0147682e839e72de48f810a4747 Mon Sep 17 00:00:00 2001 From: Roman Artiukhin Date: Sat, 5 Feb 2022 12:45:51 +0200 Subject: [PATCH 2/3] Fix dynamic insert for trigger-identity --- .../Async/Persister/Entity/AbstractEntityPersister.cs | 2 +- src/NHibernate/Persister/Entity/AbstractEntityPersister.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NHibernate/Async/Persister/Entity/AbstractEntityPersister.cs b/src/NHibernate/Async/Persister/Entity/AbstractEntityPersister.cs index bb79a22e7f6..d2d859aeff5 100644 --- a/src/NHibernate/Async/Persister/Entity/AbstractEntityPersister.cs +++ b/src/NHibernate/Async/Persister/Entity/AbstractEntityPersister.cs @@ -1025,7 +1025,7 @@ public async Task InsertAsync(object[] fields, object obj, ISessionImple { // For the case of dynamic-insert="true", we need to generate the INSERT SQL bool[] notNull = GetPropertiesToInsert(fields); - id = await (InsertAsync(fields, notNull, GenerateInsertString(true, notNull), obj, session, cancellationToken)).ConfigureAwait(false); + id = await (InsertAsync(fields, notNull, GenerateIdentityInsertString(notNull), obj, session, cancellationToken)).ConfigureAwait(false); for (int j = 1; j < span; j++) { await (InsertAsync(id, fields, notNull, j, GenerateInsertString(notNull, j), obj, session, cancellationToken)).ConfigureAwait(false); diff --git a/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs b/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs index 3ef508e9e98..05f84dfae89 100644 --- a/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs +++ b/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs @@ -3494,7 +3494,7 @@ public object Insert(object[] fields, object obj, ISessionImplementor session) { // For the case of dynamic-insert="true", we need to generate the INSERT SQL bool[] notNull = GetPropertiesToInsert(fields); - id = Insert(fields, notNull, GenerateInsertString(true, notNull), obj, session); + id = Insert(fields, notNull, GenerateIdentityInsertString(notNull), obj, session); for (int j = 1; j < span; j++) { Insert(id, fields, notNull, j, GenerateInsertString(notNull, j), obj, session); From 1652ffcedd158552d6874a68d19e8297345180be Mon Sep 17 00:00:00 2001 From: Roman Artiukhin Date: Sun, 6 Feb 2022 10:00:57 +0200 Subject: [PATCH 3/3] Commented --- src/NHibernate.Test/Async/NHSpecificTest/GH1062/Fixture.cs | 1 + src/NHibernate.Test/NHSpecificTest/GH1062/Fixture.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH1062/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH1062/Fixture.cs index 22c2236adda..6c29de0ac74 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/GH1062/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/GH1062/Fixture.cs @@ -14,6 +14,7 @@ namespace NHibernate.Test.NHSpecificTest.GH1062 { using System.Threading.Tasks; + //NH-1893 [TestFixture] public class TriggerIdentityDinamicInsertFixtureAsync : BugTestCase { diff --git a/src/NHibernate.Test/NHSpecificTest/GH1062/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH1062/Fixture.cs index 5e8c714d5ee..9057541f491 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH1062/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH1062/Fixture.cs @@ -3,6 +3,7 @@ namespace NHibernate.Test.NHSpecificTest.GH1062 { + //NH-1893 [TestFixture] public class TriggerIdentityDinamicInsertFixture : BugTestCase {