From: <ric...@us...> - 2009-08-28 11:52:13
|
Revision: 4701 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4701&view=rev Author: ricbrown Date: 2009-08-28 11:52:04 +0000 (Fri, 28 Aug 2009) Log Message: ----------- Fix NH-1905 Modified Paths: -------------- branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/DotNode.cs branches/2.1.x/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1905/ branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1905/Fixture.cs branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1905/Mappings.hbm.xml branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1905/Model.cs Modified: branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/DotNode.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/DotNode.cs 2009-08-25 12:45:10 UTC (rev 4700) +++ branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/DotNode.cs 2009-08-28 11:52:04 UTC (rev 4701) @@ -496,7 +496,13 @@ // /////////////////////////////////////////////////////////////////////////////// - if ( elem == null ) + bool found = elem != null; + // even though we might find a pre-existing element by join path, for FromElements originating in a from-clause + // we should only ever use the found element if the aliases match (null != null here). Implied joins are + // always (?) ok to reuse. + bool useFoundFromElement = found && ( elem.IsImplied || ( AreSame(classAlias, elem.ClassAlias ) ) ); + + if ( ! useFoundFromElement ) { // If this is an implied join in a from element, then use the impled join type which is part of the // tree parser's state (set by the gramamar actions). @@ -531,6 +537,11 @@ FromElement = elem; // This 'dot' expression now refers to the resulting from element. } + private bool AreSame(String alias1, String alias2) { + // again, null != null here + return !StringHelper.IsEmpty( alias1 ) && !StringHelper.IsEmpty( alias2 ) && alias1.Equals( alias2 ); + } + private void SetImpliedJoin(FromElement elem) { _impliedJoin = elem; Added: branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1905/Fixture.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1905/Fixture.cs (rev 0) +++ branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1905/Fixture.cs 2009-08-28 11:52:04 UTC (rev 4701) @@ -0,0 +1,22 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using NHibernate.Cfg; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH1905 +{ + [TestFixture] + public class Fixture : BugTestCase + { + [Test] + public void Query() + { + using (ISession s = OpenSession()) + { + s.CreateQuery("select d from Det d left join d.Mas m where (SELECT count(e) FROM d.Mas.Els e WHERE e.Descr='e1')>0") + .List(); + } + } + } +} Added: branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1905/Mappings.hbm.xml =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1905/Mappings.hbm.xml (rev 0) +++ branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1905/Mappings.hbm.xml 2009-08-28 11:52:04 UTC (rev 4701) @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH1905"> + + + <class name="Mas" table="mas" > + <id name="Id" type="Int32" > + <generator class="assigned" /> + </id> + <set name="Els" table="MasEls" > + <key column="IdMas" /> + <many-to-many column="IdEls" class="El"/> + </set> + </class> + + <class name="Det" table="det" > + <id name="Id" type="Int32" > + <generator class="assigned" /> + </id> + <many-to-one class="Mas" name="Mas" column="IdMas" /> + </class> + + <class name="El" table="Els" > + <id name="Id" type="Int32" > + <generator class="assigned" /> + </id> + <property name="Descr" type="String" /> + </class> + +</hibernate-mapping> Added: branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1905/Model.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1905/Model.cs (rev 0) +++ branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1905/Model.cs 2009-08-28 11:52:04 UTC (rev 4701) @@ -0,0 +1,60 @@ +using Iesi.Collections.Generic; + +namespace NHibernate.Test.NHSpecificTest.NH1905 +{ + public class Mas + { + private int _Id; + + public virtual int Id + { + get { return _Id; } + set { _Id = value; } + } + + private ISet<El> _Els; + + public virtual ISet<El> Els + { + get { return _Els; } + set { _Els = value; } + } + } + + + public class Det + { + private int _Id; + private Mas _Mas; + + public virtual int Id + { + get { return _Id; } + set { _Id = value; } + } + + public virtual Mas Mas + { + get { return _Mas; } + set { _Mas = value; } + } + } + + public class El + { + private int _Id; + private string _Descr; + + public virtual int Id + { + get { return _Id; } + set { _Id = value; } + } + + public virtual string Descr + { + get { return _Descr; } + set { _Descr = value; } + } + } +} Modified: branches/2.1.x/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-08-25 12:45:10 UTC (rev 4700) +++ branches/2.1.x/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-08-28 11:52:04 UTC (rev 4701) @@ -359,6 +359,8 @@ <Compile Include="NHSpecificTest\ElementsEnums\IntEnumsBagPartialNameFixture.cs" /> <Compile Include="NHSpecificTest\ElementsEnums\IntEnumsBagFixture.cs" /> <Compile Include="NHSpecificTest\ElementsEnums\Something.cs" /> + <Compile Include="NHSpecificTest\NH1905\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH1905\Model.cs" /> <Compile Include="NHSpecificTest\NH1911\Fixture.cs" /> <Compile Include="NHSpecificTest\NH1911\Model.cs" /> <Compile Include="NHSpecificTest\NH1920\Fixture.cs" /> @@ -1974,6 +1976,7 @@ <EmbeddedResource Include="Bytecode\Lightweight\ProductLine.hbm.xml" /> <EmbeddedResource Include="DriverTest\MultiTypeEntity.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH1905\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1939\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1911\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1920\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |