From: <jul...@us...> - 2010-09-30 16:27:24
|
Revision: 5229 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5229&view=rev Author: julian-maughan Date: 2010-09-30 16:27:15 +0000 (Thu, 30 Sep 2010) Log Message: ----------- Multi-query and composite id test (ref. NH-1869) Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Entities.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Mappings.hbm.xml Property changes on: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869 ___________________________________________________________________ Added: bugtraq:url + http://jira.nhibernate.org/browse/%BUGID% Added: bugtraq:logregex + NH-\d+ Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Entities.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Entities.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Entities.cs 2010-09-30 16:27:15 UTC (rev 5229) @@ -0,0 +1,78 @@ +namespace NHibernate.Test.NHSpecificTest.NH1869 +{ + public abstract class Entity<T, TKey> where T : Entity<T, TKey> + { + private int? m_oldHashCode; + + public override bool Equals(object obj) + { + T other = obj as T; + + if (other == null) + { + return false; + } + + bool otherIsTransient = Equals(other.Id, default(TKey)); + bool thisIsTransient = Equals(Id, default(TKey)); + + if (otherIsTransient && thisIsTransient) + { + return ReferenceEquals(other, this); + } + + return other.Id.Equals(Id); + } + + public override int GetHashCode() + { + if (m_oldHashCode.HasValue) + { + return m_oldHashCode.Value; + } + bool thisIsTransient = Equals(Id, default(TKey)); + + if (thisIsTransient) + { + m_oldHashCode = base.GetHashCode(); + return m_oldHashCode.Value; + } + + return Id.GetHashCode(); + } + + public abstract TKey Id { get; set; } + + public static bool operator ==(Entity<T, TKey> x, Entity<T, TKey> y) + { + return Equals(x, y); + } + + public static bool operator !=(Entity<T, TKey> x, Entity<T, TKey> y) + { + return !(x == y); + } + } + + public class Keyword : Entity<Keyword, int> + { + public override int Id { get; set; } + } + + public class NodeKeyword + { + public virtual int NodeId { get; set; } + public virtual Keyword Keyword { get; set; } + + public override bool Equals(object obj) + { + NodeKeyword other = (NodeKeyword)obj; + return NodeId == other.NodeId && Keyword == other.Keyword; + } + + public override int GetHashCode() + { + return NodeId.GetHashCode() + Keyword.GetHashCode(); + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Fixture.cs 2010-09-30 16:27:15 UTC (rev 5229) @@ -0,0 +1,69 @@ +using System.Collections; +using NHibernate.Driver; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH1869 +{ + [TestFixture] + public class Fixture : BugTestCase + { + private Keyword _keyword; + + protected override void OnTearDown() + { + using (ISession session = sessions.OpenSession()) + { + using (ITransaction transaction = session.BeginTransaction()) + { + session.Delete("from NodeKeyword"); + session.Delete("from Keyword"); + transaction.Commit(); + } + } + } + + [Test] + public void Test() + { + IDriver driver = sessions.ConnectionProvider.Driver; + if (!driver.SupportsMultipleQueries) + { + Assert.Ignore("Driver {0} does not support multi-queries", driver.GetType().FullName); + } + + using (ISession session = sessions.OpenSession()) + using (ITransaction transaction = session.BeginTransaction()) + { + _keyword = new Keyword(); + session.Save(_keyword); + + NodeKeyword nodeKeyword = new NodeKeyword(); + nodeKeyword.NodeId = 1; + nodeKeyword.Keyword = _keyword; + session.Save(nodeKeyword); + + transaction.Commit(); + } + + using (ISession session = sessions.OpenSession()) + { + //If uncomment the line below the test will pass + //GetResult(session); + IList result = GetResult(session); + Assert.That(result, Has.Count.EqualTo(2)); + Assert.That(result[0], Has.Count.EqualTo(1)); + Assert.That(result[1], Has.Count.EqualTo(1)); + } + } + + private IList GetResult(ISession session) + { + IQuery query1 = session.CreateQuery("from NodeKeyword nk"); + IQuery query2 = session.CreateQuery("from NodeKeyword nk"); + + var multi = session.CreateMultiQuery(); + multi.Add(query1).Add(query2); + return multi.List(); + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Mappings.hbm.xml 2010-09-30 16:27:15 UTC (rev 5229) @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping + xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH1869"> + + <class name="Keyword" table="Keywords" lazy="true"> + <id name="Id" column="id"> + <generator class="native" /> + </id> + </class> + + <class name="NodeKeyword" table="NodeKeywords" lazy="true"> + <composite-id> + <key-property name="NodeId" column="nodeId" /> + <key-many-to-one name="Keyword" column="keywordId" /> + </composite-id> + </class> + +</hibernate-mapping> \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-28 21:23:08 UTC (rev 5228) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-30 16:27:15 UTC (rev 5229) @@ -468,6 +468,8 @@ <Compile Include="NHSpecificTest\NH1836\Entity.cs" /> <Compile Include="NHSpecificTest\NH1836\EntityDTO.cs" /> <Compile Include="NHSpecificTest\NH1836\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH1869\Entities.cs" /> + <Compile Include="NHSpecificTest\NH1869\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2111\A.cs" /> <Compile Include="NHSpecificTest\NH2111\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2112\Fixture.cs" /> @@ -1803,6 +1805,7 @@ <EmbeddedResource Include="NHSpecificTest\NH2278\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1136\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2202\Mappings.hbm.xml" /> + <EmbeddedResource Include="NHSpecificTest\NH1869\Mappings.hbm.xml" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\NHibernate.ByteCode.Castle\NHibernate.ByteCode.Castle.csproj"> @@ -2658,6 +2661,7 @@ <EmbeddedResource Include="DynamicEntity\Tuplizer\Customer.hbm.xml" /> </ItemGroup> <ItemGroup> + <Folder Include="NHSpecificTest\NH1869" /> <Folder Include="Properties\" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |