|
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.
|