From 989833ecc3a5c08b21de6910cc5d17d0c5fd1db0 Mon Sep 17 00:00:00 2001 From: Roman Artiukhin Date: Wed, 28 Sep 2022 12:37:26 +0300 Subject: [PATCH 1/5] Test case --- .../NHSpecificTest/GH3164/ContentItem.cs | 9 +++ .../GH3164/ContentItemMapping.cs | 16 ++++++ .../NHSpecificTest/GH3164/FixtureByCode.cs | 55 +++++++++++++++++++ .../NHSpecificTest/GH3164/Head.cs | 12 ++++ .../NHSpecificTest/GH3164/HeadMapping.cs | 24 ++++++++ .../NHSpecificTest/GH3164/IHead.cs | 10 ++++ 6 files changed, 126 insertions(+) create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3164/ContentItem.cs create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3164/ContentItemMapping.cs create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3164/FixtureByCode.cs create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3164/Head.cs create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3164/HeadMapping.cs create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3164/IHead.cs diff --git a/src/NHibernate.Test/NHSpecificTest/GH3164/ContentItem.cs b/src/NHibernate.Test/NHSpecificTest/GH3164/ContentItem.cs new file mode 100644 index 00000000000..523b9245586 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3164/ContentItem.cs @@ -0,0 +1,9 @@ +namespace NHibernate.Test.NHSpecificTest.GH3164 +{ + public class ContentItem + { + public virtual int Id { get; set; } + public virtual string Name { get; set; } + public virtual IHead Head { get; set; } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH3164/ContentItemMapping.cs b/src/NHibernate.Test/NHSpecificTest/GH3164/ContentItemMapping.cs new file mode 100644 index 00000000000..af995adc917 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3164/ContentItemMapping.cs @@ -0,0 +1,16 @@ +using NHibernate.Mapping.ByCode; +using NHibernate.Mapping.ByCode.Conformist; + +namespace NHibernate.Test.NHSpecificTest.GH3164 +{ + public class ContentItemMapping : ClassMapping + { + public ContentItemMapping() + { + Table("ContentItems"); + Id(x => x.Id, m => m.Generator(Generators.Identity)); + Property(x => x.Name); + Component(x => x.Head, x => x.Lazy(true)); + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH3164/FixtureByCode.cs b/src/NHibernate.Test/NHSpecificTest/GH3164/FixtureByCode.cs new file mode 100644 index 00000000000..e5e8e800c9f --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3164/FixtureByCode.cs @@ -0,0 +1,55 @@ +using System.Linq; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping.ByCode; +using NUnit.Framework; +using NHibernate.Linq; + +namespace NHibernate.Test.NHSpecificTest.GH3164 +{ + [TestFixture] + public class ByCodeFixture : TestCaseMappingByCode + { + protected override HbmMapping GetMappings() + { + var mapper = new ModelMapper(); + mapper.AddMapping(); + mapper.AddMapping(); + + return mapper.CompileMappingForAllExplicitlyAddedEntities(); + } + + protected override void OnSetUp() + { + using (var session = OpenSession()) + using (var transaction = session.BeginTransaction()) + { + var e1 = new ContentItem { Name = "Test" }; + session.Save(e1); + + transaction.Commit(); + } + } + + protected override void OnTearDown() + { + using (var session = OpenSession()) + using (var transaction = session.BeginTransaction()) + { + session.CreateQuery("delete from System.Object").ExecuteUpdate(); + + transaction.Commit(); + } + } + + [Test] + public void FetchComponent() + { + using (var session = OpenSession()) + { + var result = session.Query().Fetch(i => i.Head).ToList(); + + Assert.That(result.Count, Is.EqualTo(1)); + } + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH3164/Head.cs b/src/NHibernate.Test/NHSpecificTest/GH3164/Head.cs new file mode 100644 index 00000000000..4166a33880c --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3164/Head.cs @@ -0,0 +1,12 @@ +using System; + +namespace NHibernate.Test.NHSpecificTest.GH3164 +{ + [Serializable] + public class Head : IHead + { + public virtual string Title { get; set; } + + public virtual bool DummyFieldToLoadEmptyComponent { get; } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH3164/HeadMapping.cs b/src/NHibernate.Test/NHSpecificTest/GH3164/HeadMapping.cs new file mode 100644 index 00000000000..2194ff2b6c7 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3164/HeadMapping.cs @@ -0,0 +1,24 @@ +using NHibernate.Mapping.ByCode; +using NHibernate.Mapping.ByCode.Conformist; + +namespace NHibernate.Test.NHSpecificTest.GH3164 +{ + public class HeadMapping : ComponentMapping + { + public HeadMapping() + { + Class(); + Property(x => x.Title, m => + { + m.Column("PageTitle"); + m.Lazy(true); + }); + Property(x => x.DummyFieldToLoadEmptyComponent, m => + { + m.Access(Accessor.ReadOnly); + m.Formula("1"); + }); + Lazy(true); + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH3164/IHead.cs b/src/NHibernate.Test/NHSpecificTest/GH3164/IHead.cs new file mode 100644 index 00000000000..336366707cc --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3164/IHead.cs @@ -0,0 +1,10 @@ +namespace NHibernate.Test.NHSpecificTest.GH3164 +{ + + public interface IHead + { + string Title { get; set; } + + bool DummyFieldToLoadEmptyComponent { get; } + } +} From 0b3d67919276fd5437cb231ae34fa5cf53d1e83c Mon Sep 17 00:00:00 2001 From: Roman Artiukhin Date: Thu, 29 Sep 2022 12:15:15 +0300 Subject: [PATCH 2/5] Fix --- .../Persister/Entity/AbstractEntityPersister.cs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs b/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs index 43f8403143b..477ceecd609 100644 --- a/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs +++ b/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs @@ -1673,14 +1673,10 @@ private string PropertySelectFragment(string name, string suffix, ICollection o == null)) - { - columnNames = SubclassPropertyFormulaTemplateClosure[index]; - } - foreach (var columnName in columnNames) + for (var i = 0; i < columnNames.Length; i++) { + var columnName = columnNames[i] ?? SubclassPropertyFormulaTemplateClosure[index][i]; fetchColumnsAndFormulas.Add(columnName); } } From 8b332697f628e55035380e20f978581cafbab559 Mon Sep 17 00:00:00 2001 From: Roman Artiukhin Date: Thu, 29 Sep 2022 12:42:45 +0300 Subject: [PATCH 3/5] Async regen --- .../NHSpecificTest/GH3164/FixtureByCode.cs | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/NHibernate.Test/Async/NHSpecificTest/GH3164/FixtureByCode.cs diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH3164/FixtureByCode.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH3164/FixtureByCode.cs new file mode 100644 index 00000000000..cf8f572cee7 --- /dev/null +++ b/src/NHibernate.Test/Async/NHSpecificTest/GH3164/FixtureByCode.cs @@ -0,0 +1,66 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by AsyncGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + + +using System.Linq; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping.ByCode; +using NUnit.Framework; +using NHibernate.Linq; + +namespace NHibernate.Test.NHSpecificTest.GH3164 +{ + using System.Threading.Tasks; + [TestFixture] + public class ByCodeFixtureAsync : TestCaseMappingByCode + { + protected override HbmMapping GetMappings() + { + var mapper = new ModelMapper(); + mapper.AddMapping(); + mapper.AddMapping(); + + return mapper.CompileMappingForAllExplicitlyAddedEntities(); + } + + protected override void OnSetUp() + { + using (var session = OpenSession()) + using (var transaction = session.BeginTransaction()) + { + var e1 = new ContentItem { Name = "Test" }; + session.Save(e1); + + transaction.Commit(); + } + } + + protected override void OnTearDown() + { + using (var session = OpenSession()) + using (var transaction = session.BeginTransaction()) + { + session.CreateQuery("delete from System.Object").ExecuteUpdate(); + + transaction.Commit(); + } + } + + [Test] + public async Task FetchComponentAsync() + { + using (var session = OpenSession()) + { + var result = await (session.Query().Fetch(i => i.Head).ToListAsync()); + + Assert.That(result.Count, Is.EqualTo(1)); + } + } + } +} From 40c0c2d49ada5523d7da01684c4f6af54509423f Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Thu, 29 Sep 2022 20:44:18 +0000 Subject: [PATCH 4/5] Enable 5.3.14 dev builds --- build-common/NHibernate.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build-common/NHibernate.props b/build-common/NHibernate.props index f0caa03e318..d93d4ba1ab1 100644 --- a/build-common/NHibernate.props +++ b/build-common/NHibernate.props @@ -3,9 +3,9 @@ 5.3 - 13 + 14 - + dev $(NhVersion).$(VersionPatch) $(VersionSuffix).$(BuildNumber) From 6e111f4e1eb7e19efa50235b7e899a8527173655 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Fri, 30 Sep 2022 10:02:42 +1300 Subject: [PATCH 5/5] Review suggestions --- src/NHibernate/Persister/Entity/AbstractEntityPersister.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs b/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs index 477ceecd609..c6ac2cb8dfb 100644 --- a/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs +++ b/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs @@ -1673,10 +1673,11 @@ private string PropertySelectFragment(string name, string suffix, ICollection