diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH3465/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH3465/Fixture.cs new file mode 100644 index 00000000000..8d4b62bb325 --- /dev/null +++ b/src/NHibernate.Test/Async/NHSpecificTest/GH3465/Fixture.cs @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// +// 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; + +namespace NHibernate.Test.NHSpecificTest.GH3465 +{ + using System.Threading.Tasks; + [TestFixture] + public class FixtureAsync : BugTestCase + { + [Test] + public void ThetaJoinSubQueryAsync() + { + using (var session = OpenSession()) + using (session.BeginTransaction()) + { + var query = session.CreateQuery("select e.Id from EntityA e where exists (from e.Children b, EntityC c)"); + Assert.DoesNotThrowAsync(() => query.ListAsync()); + } + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH3465/Entities.cs b/src/NHibernate.Test/NHSpecificTest/GH3465/Entities.cs new file mode 100644 index 00000000000..3a325ed9ba8 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3465/Entities.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; + +namespace NHibernate.Test.NHSpecificTest.GH3465 +{ + class EntityA + { + public virtual Guid Id { get; set; } + public virtual ISet Children { get; set; } + } + class EntityB + { + public virtual Guid Id { get; set; } + public virtual EntityA Parent { get; set; } + } + class EntityC + { + public virtual Guid Id { get; set; } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH3465/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH3465/Fixture.cs new file mode 100644 index 00000000000..e51af1211d9 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3465/Fixture.cs @@ -0,0 +1,20 @@ +using System.Linq; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.GH3465 +{ + [TestFixture] + public class Fixture : BugTestCase + { + [Test] + public void ThetaJoinSubQuery() + { + using (var session = OpenSession()) + using (session.BeginTransaction()) + { + var query = session.CreateQuery("select e.Id from EntityA e where exists (from e.Children b, EntityC c)"); + Assert.DoesNotThrow(() => query.List()); + } + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH3465/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/GH3465/Mappings.hbm.xml new file mode 100644 index 00000000000..b89c139fa29 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3465/Mappings.hbm.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + diff --git a/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElement.cs b/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElement.cs index a22c13e84ff..ade63aaa929 100644 --- a/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElement.cs +++ b/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElement.cs @@ -716,7 +716,7 @@ public void SetOrigin(FromElement origin, bool manyToMany) JoinSequence.SetUseThetaStyle(true); } } - else + else if (Walker.CurrentClauseType != HqlSqlWalker.FROM) { FromClause.AppendFromElement(this); }