From 10a5d4cc24d06afb03a311c09ec2df0a5f05d338 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, 24 Apr 2022 18:41:49 +0200 Subject: [PATCH 1/5] Fix many-to-one disabled filters for arbitrary joins fix #3046 --- .../Async/NHSpecificTest/GH3046/Fixture.cs | 83 +++++++++++++++++++ .../NHSpecificTest/GH3046/Fixture.cs | 71 ++++++++++++++++ .../NHSpecificTest/GH3046/Mappings.hbm.xml | 26 ++++++ .../NHSpecificTest/GH3046/Model.cs | 15 ++++ src/NHibernate/Engine/JoinSequence.cs | 17 ++-- src/NHibernate/Loader/JoinWalker.cs | 5 +- 6 files changed, 210 insertions(+), 7 deletions(-) create mode 100644 src/NHibernate.Test/Async/NHSpecificTest/GH3046/Fixture.cs create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3046/Fixture.cs create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3046/Mappings.hbm.xml create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3046/Model.cs diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH3046/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH3046/Fixture.cs new file mode 100644 index 00000000000..fbb2f0c39a6 --- /dev/null +++ b/src/NHibernate.Test/Async/NHSpecificTest/GH3046/Fixture.cs @@ -0,0 +1,83 @@ +//------------------------------------------------------------------------------ +// +// 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 NUnit.Framework; +using NHibernate.Linq; + +namespace NHibernate.Test.NHSpecificTest.GH3046 +{ + using System.Threading.Tasks; + // Duplicated from GH2549 with minor changes to trigger the trouble. + [TestFixture] + public class FixtureAsync : BugTestCase + { + protected override void OnSetUp() + { + using (var s = OpenSession()) + using (var t = s.BeginTransaction()) + { + s.Save(new Person {Id = 1, Name = "Name"}); + s.Save(new Customer {Deleted = false, Name = "Name", Id = 1}); + s.Save(new Customer {Deleted = true, Name = "Name", Id = 2}); + + t.Commit(); + } + } + + protected override void OnTearDown() + { + using (var s = OpenSession()) + using (var t = s.BeginTransaction()) + { + s.CreateQuery("delete from System.Object").ExecuteUpdate(); + t.Commit(); + } + } + + [Test] + public async Task EntityJoinFilterLinqAsync() + { + using (var s = OpenSession()) + { + var list = await ((from p in s.Query() + join c in s.Query() on p.Name equals c.Name + select p).ToListAsync()); + + s.EnableFilter("DeletedCustomer").SetParameter("deleted", false); + + var filteredList = await ((from p in s.Query() + join c in s.Query() on p.Name equals c.Name + select p).ToListAsync()); + + Assert.That(list, Has.Count.EqualTo(2)); + Assert.That(filteredList, Has.Count.EqualTo(1)); + } + } + + [Test] + public async Task EntityJoinFilterQueryOverAsync() + { + using (var s = OpenSession()) + { + Customer c = null; + Person p = null; + var list = await (s.QueryOver(() => p).JoinEntityAlias(() => c, () => c.Name == p.Name).ListAsync()); + + s.EnableFilter("DeletedCustomer").SetParameter("deleted", false); + + var filteredList = await (s.QueryOver(() => p).JoinEntityAlias(() => c, () => c.Name == p.Name).ListAsync()); + + Assert.That(list, Has.Count.EqualTo(2)); + Assert.That(filteredList, Has.Count.EqualTo(1)); + } + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH3046/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH3046/Fixture.cs new file mode 100644 index 00000000000..dae831d082c --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3046/Fixture.cs @@ -0,0 +1,71 @@ +using System.Linq; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.GH3046 +{ + // Duplicated from GH2549 with minor changes to trigger the trouble. + [TestFixture] + public class Fixture : BugTestCase + { + protected override void OnSetUp() + { + using (var s = OpenSession()) + using (var t = s.BeginTransaction()) + { + s.Save(new Person {Id = 1, Name = "Name"}); + s.Save(new Customer {Deleted = false, Name = "Name", Id = 1}); + s.Save(new Customer {Deleted = true, Name = "Name", Id = 2}); + + t.Commit(); + } + } + + protected override void OnTearDown() + { + using (var s = OpenSession()) + using (var t = s.BeginTransaction()) + { + s.CreateQuery("delete from System.Object").ExecuteUpdate(); + t.Commit(); + } + } + + [Test] + public void EntityJoinFilterLinq() + { + using (var s = OpenSession()) + { + var list = (from p in s.Query() + join c in s.Query() on p.Name equals c.Name + select p).ToList(); + + s.EnableFilter("DeletedCustomer").SetParameter("deleted", false); + + var filteredList = (from p in s.Query() + join c in s.Query() on p.Name equals c.Name + select p).ToList(); + + Assert.That(list, Has.Count.EqualTo(2)); + Assert.That(filteredList, Has.Count.EqualTo(1)); + } + } + + [Test] + public void EntityJoinFilterQueryOver() + { + using (var s = OpenSession()) + { + Customer c = null; + Person p = null; + var list = s.QueryOver(() => p).JoinEntityAlias(() => c, () => c.Name == p.Name).List(); + + s.EnableFilter("DeletedCustomer").SetParameter("deleted", false); + + var filteredList = s.QueryOver(() => p).JoinEntityAlias(() => c, () => c.Name == p.Name).List(); + + Assert.That(list, Has.Count.EqualTo(2)); + Assert.That(filteredList, Has.Count.EqualTo(1)); + } + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH3046/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/GH3046/Mappings.hbm.xml new file mode 100644 index 00000000000..f643c12c8e3 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3046/Mappings.hbm.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/NHibernate.Test/NHSpecificTest/GH3046/Model.cs b/src/NHibernate.Test/NHSpecificTest/GH3046/Model.cs new file mode 100644 index 00000000000..d02d100c9b2 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3046/Model.cs @@ -0,0 +1,15 @@ +namespace NHibernate.Test.NHSpecificTest.GH3046 +{ + public class Customer + { + public virtual int Id { get; set; } + public virtual bool Deleted { get; set; } + public virtual string Name { get; set; } + } + + public class Person + { + public virtual int Id { get; set; } + public virtual string Name { get; set; } + } +} diff --git a/src/NHibernate/Engine/JoinSequence.cs b/src/NHibernate/Engine/JoinSequence.cs index e706d97886e..12f227880dc 100644 --- a/src/NHibernate/Engine/JoinSequence.cs +++ b/src/NHibernate/Engine/JoinSequence.cs @@ -175,7 +175,7 @@ internal virtual JoinFragment ToJoinFragment( { Join join = joins[i]; string on = join.AssociationType.GetOnCondition(join.Alias, factory, enabledFilters); - SqlString condition = new SqlString(); + SqlString condition; if (last != null && IsManyToManyRoot(last) && ((IQueryableCollection)last).ElementType == join.AssociationType) @@ -195,10 +195,17 @@ internal virtual JoinFragment ToJoinFragment( { // NH Different behavior : NH1179 and NH1293 // Apply filters for entity joins and Many-To-One association - var enabledForManyToOne = FilterHelper.GetEnabledForManyToOne(enabledFilters); - condition = new SqlString(string.IsNullOrEmpty(on) && (ForceFilter || enabledForManyToOne.Count > 0) - ? join.Joinable.FilterFragment(join.Alias, enabledForManyToOne) - : on); + if (string.IsNullOrEmpty(on)) + { + var enabledFiltersForJoin = ForceFilter ? enabledFilters : FilterHelper.GetEnabledForManyToOne(enabledFilters); + condition = new SqlString(enabledFiltersForJoin.Count > 0 + ? join.Joinable.FilterFragment(join.Alias, enabledFiltersForJoin) + : on); + } + else + { + condition = new SqlString(on); + } } if (withClauseFragment != null) diff --git a/src/NHibernate/Loader/JoinWalker.cs b/src/NHibernate/Loader/JoinWalker.cs index 1f1ed70fc56..83565345d00 100644 --- a/src/NHibernate/Loader/JoinWalker.cs +++ b/src/NHibernate/Loader/JoinWalker.cs @@ -853,9 +853,10 @@ protected JoinFragment MergeOuterJoins(IList associati oj.AddJoins(outerjoin); // NH Different behavior : NH1179 and NH1293 // Apply filters for entity joins and Many-To-One associations - if (oj.ForceFilter || enabledFiltersForManyToOne.Count > 0) + var enabledFiltersForJoin = oj.ForceFilter ? enabledFilters : enabledFiltersForManyToOne; + if (enabledFiltersForJoin.Count > 0) { - string manyToOneFilterFragment = oj.Joinable.FilterFragment(oj.RHSAlias, enabledFiltersForManyToOne); + string manyToOneFilterFragment = oj.Joinable.FilterFragment(oj.RHSAlias, enabledFiltersForJoin); bool joinClauseDoesNotContainsFilterAlready = outerjoin.ToFromFragmentString.IndexOfCaseInsensitive(manyToOneFilterFragment) == -1; if (joinClauseDoesNotContainsFilterAlready) From 0eb73ae2f8cc61ccc565e6c19a650c4b352b32a3 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, 24 Apr 2022 19:12:27 +0200 Subject: [PATCH 2/5] Refix discriminator cases --- src/NHibernate/Engine/JoinSequence.cs | 2 +- src/NHibernate/Loader/JoinWalker.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NHibernate/Engine/JoinSequence.cs b/src/NHibernate/Engine/JoinSequence.cs index 12f227880dc..0682cc10df5 100644 --- a/src/NHibernate/Engine/JoinSequence.cs +++ b/src/NHibernate/Engine/JoinSequence.cs @@ -198,7 +198,7 @@ internal virtual JoinFragment ToJoinFragment( if (string.IsNullOrEmpty(on)) { var enabledFiltersForJoin = ForceFilter ? enabledFilters : FilterHelper.GetEnabledForManyToOne(enabledFilters); - condition = new SqlString(enabledFiltersForJoin.Count > 0 + condition = new SqlString(ForceFilter || enabledFiltersForJoin.Count > 0 ? join.Joinable.FilterFragment(join.Alias, enabledFiltersForJoin) : on); } diff --git a/src/NHibernate/Loader/JoinWalker.cs b/src/NHibernate/Loader/JoinWalker.cs index 83565345d00..ff02c24306d 100644 --- a/src/NHibernate/Loader/JoinWalker.cs +++ b/src/NHibernate/Loader/JoinWalker.cs @@ -854,7 +854,7 @@ protected JoinFragment MergeOuterJoins(IList associati // NH Different behavior : NH1179 and NH1293 // Apply filters for entity joins and Many-To-One associations var enabledFiltersForJoin = oj.ForceFilter ? enabledFilters : enabledFiltersForManyToOne; - if (enabledFiltersForJoin.Count > 0) + if (oj.ForceFilter || enabledFiltersForJoin.Count > 0) { string manyToOneFilterFragment = oj.Joinable.FilterFragment(oj.RHSAlias, enabledFiltersForJoin); bool joinClauseDoesNotContainsFilterAlready = From 9f991664ad078c5af4dfe13f5b37655df66c2330 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Delaporte?= <12201973+fredericdelaporte@users.noreply.github.com> Date: Tue, 26 Apr 2022 21:47:09 +0200 Subject: [PATCH 3/5] Reuse original fixture class --- .../Async/NHSpecificTest/GH3046/Fixture.cs | 66 +----------------- .../NHSpecificTest/GH3046/Fixture.cs | 67 +------------------ .../NHSpecificTest/GH3046/Mappings.hbm.xml | 2 +- .../NHSpecificTest/GH3046/Model.cs | 15 ----- 4 files changed, 6 insertions(+), 144 deletions(-) delete mode 100644 src/NHibernate.Test/NHSpecificTest/GH3046/Model.cs diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH3046/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH3046/Fixture.cs index fbb2f0c39a6..434def8948a 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/GH3046/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/GH3046/Fixture.cs @@ -8,76 +8,14 @@ //------------------------------------------------------------------------------ -using System.Linq; using NUnit.Framework; -using NHibernate.Linq; namespace NHibernate.Test.NHSpecificTest.GH3046 { using System.Threading.Tasks; - // Duplicated from GH2549 with minor changes to trigger the trouble. + // Only the mapping needs a change for this test case. It is fetched by the fixture namespace, so it will use the mapping defined here. [TestFixture] - public class FixtureAsync : BugTestCase + public class FixtureAsync : GH2549.FixtureAsync { - protected override void OnSetUp() - { - using (var s = OpenSession()) - using (var t = s.BeginTransaction()) - { - s.Save(new Person {Id = 1, Name = "Name"}); - s.Save(new Customer {Deleted = false, Name = "Name", Id = 1}); - s.Save(new Customer {Deleted = true, Name = "Name", Id = 2}); - - t.Commit(); - } - } - - protected override void OnTearDown() - { - using (var s = OpenSession()) - using (var t = s.BeginTransaction()) - { - s.CreateQuery("delete from System.Object").ExecuteUpdate(); - t.Commit(); - } - } - - [Test] - public async Task EntityJoinFilterLinqAsync() - { - using (var s = OpenSession()) - { - var list = await ((from p in s.Query() - join c in s.Query() on p.Name equals c.Name - select p).ToListAsync()); - - s.EnableFilter("DeletedCustomer").SetParameter("deleted", false); - - var filteredList = await ((from p in s.Query() - join c in s.Query() on p.Name equals c.Name - select p).ToListAsync()); - - Assert.That(list, Has.Count.EqualTo(2)); - Assert.That(filteredList, Has.Count.EqualTo(1)); - } - } - - [Test] - public async Task EntityJoinFilterQueryOverAsync() - { - using (var s = OpenSession()) - { - Customer c = null; - Person p = null; - var list = await (s.QueryOver(() => p).JoinEntityAlias(() => c, () => c.Name == p.Name).ListAsync()); - - s.EnableFilter("DeletedCustomer").SetParameter("deleted", false); - - var filteredList = await (s.QueryOver(() => p).JoinEntityAlias(() => c, () => c.Name == p.Name).ListAsync()); - - Assert.That(list, Has.Count.EqualTo(2)); - Assert.That(filteredList, Has.Count.EqualTo(1)); - } - } } } diff --git a/src/NHibernate.Test/NHSpecificTest/GH3046/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH3046/Fixture.cs index dae831d082c..452f1b83cb9 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH3046/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH3046/Fixture.cs @@ -1,71 +1,10 @@ -using System.Linq; -using NUnit.Framework; +using NUnit.Framework; namespace NHibernate.Test.NHSpecificTest.GH3046 { - // Duplicated from GH2549 with minor changes to trigger the trouble. + // Only the mapping needs a change for this test case. It is fetched by the fixture namespace, so it will use the mapping defined here. [TestFixture] - public class Fixture : BugTestCase + public class Fixture : GH2549.Fixture { - protected override void OnSetUp() - { - using (var s = OpenSession()) - using (var t = s.BeginTransaction()) - { - s.Save(new Person {Id = 1, Name = "Name"}); - s.Save(new Customer {Deleted = false, Name = "Name", Id = 1}); - s.Save(new Customer {Deleted = true, Name = "Name", Id = 2}); - - t.Commit(); - } - } - - protected override void OnTearDown() - { - using (var s = OpenSession()) - using (var t = s.BeginTransaction()) - { - s.CreateQuery("delete from System.Object").ExecuteUpdate(); - t.Commit(); - } - } - - [Test] - public void EntityJoinFilterLinq() - { - using (var s = OpenSession()) - { - var list = (from p in s.Query() - join c in s.Query() on p.Name equals c.Name - select p).ToList(); - - s.EnableFilter("DeletedCustomer").SetParameter("deleted", false); - - var filteredList = (from p in s.Query() - join c in s.Query() on p.Name equals c.Name - select p).ToList(); - - Assert.That(list, Has.Count.EqualTo(2)); - Assert.That(filteredList, Has.Count.EqualTo(1)); - } - } - - [Test] - public void EntityJoinFilterQueryOver() - { - using (var s = OpenSession()) - { - Customer c = null; - Person p = null; - var list = s.QueryOver(() => p).JoinEntityAlias(() => c, () => c.Name == p.Name).List(); - - s.EnableFilter("DeletedCustomer").SetParameter("deleted", false); - - var filteredList = s.QueryOver(() => p).JoinEntityAlias(() => c, () => c.Name == p.Name).List(); - - Assert.That(list, Has.Count.EqualTo(2)); - Assert.That(filteredList, Has.Count.EqualTo(1)); - } - } } } diff --git a/src/NHibernate.Test/NHSpecificTest/GH3046/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/GH3046/Mappings.hbm.xml index f643c12c8e3..af5ee602af6 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH3046/Mappings.hbm.xml +++ b/src/NHibernate.Test/NHSpecificTest/GH3046/Mappings.hbm.xml @@ -1,6 +1,6 @@  + namespace="NHibernate.Test.NHSpecificTest.GH2549" > diff --git a/src/NHibernate.Test/NHSpecificTest/GH3046/Model.cs b/src/NHibernate.Test/NHSpecificTest/GH3046/Model.cs deleted file mode 100644 index d02d100c9b2..00000000000 --- a/src/NHibernate.Test/NHSpecificTest/GH3046/Model.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace NHibernate.Test.NHSpecificTest.GH3046 -{ - public class Customer - { - public virtual int Id { get; set; } - public virtual bool Deleted { get; set; } - public virtual string Name { get; set; } - } - - public class Person - { - public virtual int Id { get; set; } - public virtual string Name { get; set; } - } -} From 042036240278640e9e9f54de9e976ab1642b38d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Delaporte?= <12201973+fredericdelaporte@users.noreply.github.com> Date: Thu, 28 Apr 2022 01:26:37 +0200 Subject: [PATCH 4/5] Just extend GH2549 tests instead --- .../Async/NHSpecificTest/GH2549/Fixture.cs | 13 +++++----- .../Async/NHSpecificTest/GH3046/Fixture.cs | 21 --------------- .../NHSpecificTest/GH2549/Fixture.cs | 13 +++++----- .../NHSpecificTest/GH2549/Mappings.hbm.xml | 5 ++++ .../NHSpecificTest/GH3046/Fixture.cs | 10 ------- .../NHSpecificTest/GH3046/Mappings.hbm.xml | 26 ------------------- 6 files changed, 19 insertions(+), 69 deletions(-) delete mode 100644 src/NHibernate.Test/Async/NHSpecificTest/GH3046/Fixture.cs delete mode 100644 src/NHibernate.Test/NHSpecificTest/GH3046/Fixture.cs delete mode 100644 src/NHibernate.Test/NHSpecificTest/GH3046/Mappings.hbm.xml diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH2549/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH2549/Fixture.cs index 82227867203..d1cba91d52c 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/GH2549/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/GH2549/Fixture.cs @@ -15,6 +15,7 @@ namespace NHibernate.Test.NHSpecificTest.GH2549 { using System.Threading.Tasks; + // Also test GH3046, when useManyToOne is true. [TestFixture] public class FixtureAsync : BugTestCase { @@ -41,8 +42,8 @@ protected override void OnTearDown() } } - [Test] - public async Task EntityJoinFilterLinqAsync() + [Theory] + public async Task EntityJoinFilterLinqAsync(bool useManyToOne) { using (var s = OpenSession()) { @@ -50,7 +51,7 @@ public async Task EntityJoinFilterLinqAsync() join c in s.Query() on p.Name equals c.Name select p).ToListAsync()); - s.EnableFilter("DeletedCustomer").SetParameter("deleted", false); + s.EnableFilter(useManyToOne ? "DeletedCustomer" : "DeletedCustomerNoManyToOne").SetParameter("deleted", false); var filteredList = await ((from p in s.Query() join c in s.Query() on p.Name equals c.Name @@ -61,8 +62,8 @@ join c in s.Query() on p.Name equals c.Name } } - [Test] - public async Task EntityJoinFilterQueryOverAsync() + [Theory] + public async Task EntityJoinFilterQueryOverAsync(bool useManyToOne) { using (var s = OpenSession()) { @@ -70,7 +71,7 @@ public async Task EntityJoinFilterQueryOverAsync() Person p = null; var list = await (s.QueryOver(() => p).JoinEntityAlias(() => c, () => c.Name == p.Name).ListAsync()); - s.EnableFilter("DeletedCustomer").SetParameter("deleted", false); + s.EnableFilter(useManyToOne ? "DeletedCustomer" : "DeletedCustomerNoManyToOne").SetParameter("deleted", false); var filteredList = await (s.QueryOver(() => p).JoinEntityAlias(() => c, () => c.Name == p.Name).ListAsync()); diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH3046/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH3046/Fixture.cs deleted file mode 100644 index 434def8948a..00000000000 --- a/src/NHibernate.Test/Async/NHSpecificTest/GH3046/Fixture.cs +++ /dev/null @@ -1,21 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by AsyncGenerator. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - - -using NUnit.Framework; - -namespace NHibernate.Test.NHSpecificTest.GH3046 -{ - using System.Threading.Tasks; - // Only the mapping needs a change for this test case. It is fetched by the fixture namespace, so it will use the mapping defined here. - [TestFixture] - public class FixtureAsync : GH2549.FixtureAsync - { - } -} diff --git a/src/NHibernate.Test/NHSpecificTest/GH2549/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH2549/Fixture.cs index a01c1ec2572..f243773531d 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH2549/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH2549/Fixture.cs @@ -3,6 +3,7 @@ namespace NHibernate.Test.NHSpecificTest.GH2549 { + // Also test GH3046, when useManyToOne is true. [TestFixture] public class Fixture : BugTestCase { @@ -29,8 +30,8 @@ protected override void OnTearDown() } } - [Test] - public void EntityJoinFilterLinq() + [Theory] + public void EntityJoinFilterLinq(bool useManyToOne) { using (var s = OpenSession()) { @@ -38,7 +39,7 @@ public void EntityJoinFilterLinq() join c in s.Query() on p.Name equals c.Name select p).ToList(); - s.EnableFilter("DeletedCustomer").SetParameter("deleted", false); + s.EnableFilter(useManyToOne ? "DeletedCustomer" : "DeletedCustomerNoManyToOne").SetParameter("deleted", false); var filteredList = (from p in s.Query() join c in s.Query() on p.Name equals c.Name @@ -49,8 +50,8 @@ join c in s.Query() on p.Name equals c.Name } } - [Test] - public void EntityJoinFilterQueryOver() + [Theory] + public void EntityJoinFilterQueryOver(bool useManyToOne) { using (var s = OpenSession()) { @@ -58,7 +59,7 @@ public void EntityJoinFilterQueryOver() Person p = null; var list = s.QueryOver(() => p).JoinEntityAlias(() => c, () => c.Name == p.Name).List(); - s.EnableFilter("DeletedCustomer").SetParameter("deleted", false); + s.EnableFilter(useManyToOne ? "DeletedCustomer" : "DeletedCustomerNoManyToOne").SetParameter("deleted", false); var filteredList = s.QueryOver(() => p).JoinEntityAlias(() => c, () => c.Name == p.Name).List(); diff --git a/src/NHibernate.Test/NHSpecificTest/GH2549/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/GH2549/Mappings.hbm.xml index 65b540b9202..de096391e88 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH2549/Mappings.hbm.xml +++ b/src/NHibernate.Test/NHSpecificTest/GH2549/Mappings.hbm.xml @@ -10,6 +10,7 @@ + @@ -23,4 +24,8 @@ + + + + diff --git a/src/NHibernate.Test/NHSpecificTest/GH3046/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH3046/Fixture.cs deleted file mode 100644 index 452f1b83cb9..00000000000 --- a/src/NHibernate.Test/NHSpecificTest/GH3046/Fixture.cs +++ /dev/null @@ -1,10 +0,0 @@ -using NUnit.Framework; - -namespace NHibernate.Test.NHSpecificTest.GH3046 -{ - // Only the mapping needs a change for this test case. It is fetched by the fixture namespace, so it will use the mapping defined here. - [TestFixture] - public class Fixture : GH2549.Fixture - { - } -} diff --git a/src/NHibernate.Test/NHSpecificTest/GH3046/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/GH3046/Mappings.hbm.xml deleted file mode 100644 index af5ee602af6..00000000000 --- a/src/NHibernate.Test/NHSpecificTest/GH3046/Mappings.hbm.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - From 890a131cfc784460b7a0c13c75e4f88dca1d3079 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Delaporte?= <12201973+fredericdelaporte@users.noreply.github.com> Date: Thu, 28 Apr 2022 01:31:32 +0200 Subject: [PATCH 5/5] Adjust a comment --- src/NHibernate.Test/Async/NHSpecificTest/GH2549/Fixture.cs | 2 +- src/NHibernate.Test/NHSpecificTest/GH2549/Fixture.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH2549/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH2549/Fixture.cs index d1cba91d52c..63ef36ffe09 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/GH2549/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/GH2549/Fixture.cs @@ -15,7 +15,7 @@ namespace NHibernate.Test.NHSpecificTest.GH2549 { using System.Threading.Tasks; - // Also test GH3046, when useManyToOne is true. + // Test GH3046 too, when useManyToOne is true. [TestFixture] public class FixtureAsync : BugTestCase { diff --git a/src/NHibernate.Test/NHSpecificTest/GH2549/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH2549/Fixture.cs index f243773531d..8912bec9a25 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH2549/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH2549/Fixture.cs @@ -3,7 +3,7 @@ namespace NHibernate.Test.NHSpecificTest.GH2549 { - // Also test GH3046, when useManyToOne is true. + // Test GH3046 too, when useManyToOne is true. [TestFixture] public class Fixture : BugTestCase {