diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH2614/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH2614/Fixture.cs new file mode 100644 index 00000000000..2b7c0006da0 --- /dev/null +++ b/src/NHibernate.Test/Async/NHSpecificTest/GH2614/Fixture.cs @@ -0,0 +1,54 @@ +//------------------------------------------------------------------------------ +// +// 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.GH2614 +{ + using System.Threading.Tasks; + [TestFixture] + public class FixtureAsync : BugTestCase + { + protected override void OnSetUp() + { + using (var s = OpenSession()) + using (var t = s.BeginTransaction()) + { + s.Save(new ConcreteClass1 {Name = "C1"}); + s.Save(new ConcreteClass2 {Name = "C2"}); + 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 PolymorphicListReturnsCorrectResultsAsync() + { + using (var s = OpenSession()) + using (s.BeginTransaction()) + { + var query = s.CreateQuery( + @"SELECT Name FROM NHibernate.Test.NHSpecificTest.GH2614.BaseClass ROOT"); + query.SetMaxResults(5); + var list = await (query.ListAsync()); + Assert.That(list.Count, Is.EqualTo(2)); + } + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH2614/BaseClass.cs b/src/NHibernate.Test/NHSpecificTest/GH2614/BaseClass.cs new file mode 100644 index 00000000000..07ae632ad07 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH2614/BaseClass.cs @@ -0,0 +1,8 @@ +namespace NHibernate.Test.NHSpecificTest.GH2614 +{ + public abstract class BaseClass + { + public virtual int Id { get; set; } + public virtual string Name { get; set; } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH2614/ConcreteClass1.cs b/src/NHibernate.Test/NHSpecificTest/GH2614/ConcreteClass1.cs new file mode 100644 index 00000000000..e164a83a07d --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH2614/ConcreteClass1.cs @@ -0,0 +1,6 @@ +namespace NHibernate.Test.NHSpecificTest.GH2614 +{ + public class ConcreteClass1 : BaseClass + { + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH2614/ConcreteClass2.cs b/src/NHibernate.Test/NHSpecificTest/GH2614/ConcreteClass2.cs new file mode 100644 index 00000000000..0c5f9f20eb7 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH2614/ConcreteClass2.cs @@ -0,0 +1,8 @@ +using System.Collections.Generic; + +namespace NHibernate.Test.NHSpecificTest.GH2614 +{ + public class ConcreteClass2 : BaseClass + { + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH2614/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH2614/Fixture.cs new file mode 100644 index 00000000000..82876011bae --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH2614/Fixture.cs @@ -0,0 +1,43 @@ +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.GH2614 +{ + [TestFixture] + public class Fixture : BugTestCase + { + protected override void OnSetUp() + { + using (var s = OpenSession()) + using (var t = s.BeginTransaction()) + { + s.Save(new ConcreteClass1 {Name = "C1"}); + s.Save(new ConcreteClass2 {Name = "C2"}); + 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 PolymorphicListReturnsCorrectResults() + { + using (var s = OpenSession()) + using (s.BeginTransaction()) + { + var query = s.CreateQuery( + @"SELECT Name FROM NHibernate.Test.NHSpecificTest.GH2614.BaseClass ROOT"); + query.SetMaxResults(5); + var list = query.List(); + Assert.That(list.Count, Is.EqualTo(2)); + } + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH2614/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/GH2614/Mappings.hbm.xml new file mode 100644 index 00000000000..3aaefa26341 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH2614/Mappings.hbm.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + diff --git a/src/NHibernate/Async/Engine/Query/HQLQueryPlan.cs b/src/NHibernate/Async/Engine/Query/HQLQueryPlan.cs index f0e5674ea69..a5ced8d10d7 100644 --- a/src/NHibernate/Async/Engine/Query/HQLQueryPlan.cs +++ b/src/NHibernate/Async/Engine/Query/HQLQueryPlan.cs @@ -78,7 +78,7 @@ public async Task PerformListAsync(QueryParameters queryParameters, ISessionImpl for (int x = 0; x < size; x++) { object result = tmp[x]; - if (distinction.Add(result)) + if (!distinction.Add(result)) { continue; } diff --git a/src/NHibernate/Engine/Query/HQLQueryPlan.cs b/src/NHibernate/Engine/Query/HQLQueryPlan.cs index eb02c296cea..fd6717a3d33 100644 --- a/src/NHibernate/Engine/Query/HQLQueryPlan.cs +++ b/src/NHibernate/Engine/Query/HQLQueryPlan.cs @@ -128,7 +128,7 @@ public void PerformList(QueryParameters queryParameters, ISessionImplementor ses for (int x = 0; x < size; x++) { object result = tmp[x]; - if (distinction.Add(result)) + if (!distinction.Add(result)) { continue; }