From: <fab...@us...> - 2009-10-14 17:27:05
|
Revision: 4743 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4743&view=rev Author: fabiomaulo Date: 2009-10-14 17:26:57 +0000 (Wed, 14 Oct 2009) Log Message: ----------- Fix NH-1990 Modified Paths: -------------- branches/2.1.x/nhibernate/src/NHibernate/Loader/Collection/SubselectOneToManyLoader.cs branches/2.1.x/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1990/ branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1990/Fixture.cs branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1990/Mappings.hbm.xml branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1990/Model.cs Modified: branches/2.1.x/nhibernate/src/NHibernate/Loader/Collection/SubselectOneToManyLoader.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate/Loader/Collection/SubselectOneToManyLoader.cs 2009-10-14 16:19:19 UTC (rev 4742) +++ branches/2.1.x/nhibernate/src/NHibernate/Loader/Collection/SubselectOneToManyLoader.cs 2009-10-14 17:26:57 UTC (rev 4743) @@ -3,6 +3,7 @@ using NHibernate.Persister.Collection; using NHibernate.SqlCommand; using NHibernate.Type; +using NHibernate.Util; namespace NHibernate.Loader.Collection { @@ -31,8 +32,8 @@ namedParameters = queryParameters.NamedParameters; // NH Different behavior: to deal with positionslParameter+NamedParameter+ParameterOfFilters - types = queryParameters.PositionalParameterTypes; - values = queryParameters.PositionalParameterValues; + types = new List<IType>(new JoinedEnumerable<IType>(queryParameters.FilteredParameterTypes, queryParameters.PositionalParameterTypes)).ToArray(); + values = new List<object>(new JoinedEnumerable<object>(queryParameters.FilteredParameterValues, queryParameters.PositionalParameterValues)).ToArray(); this.namedParameterLocMap = namedParameterLocMap; } Added: branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1990/Fixture.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1990/Fixture.cs (rev 0) +++ branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1990/Fixture.cs 2009-10-14 17:26:57 UTC (rev 4743) @@ -0,0 +1,134 @@ +using System.Collections.Generic; +using System.Text; +using NHibernate.Criterion; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH1990 +{ + [TestFixture] + public class Fixture : BugTestCase + { + protected override void OnSetUp() + { + using (ISession s = OpenSession()) + { + using (ITransaction tx = s.BeginTransaction()) + { + for (int i = 0; i < 10; i++) + { + var feed = new NewsFeed + { + Url = string.Format("Feed{0}Uri", i), + Title = string.Format("Feed{0}", i), + Status = (i % 2 == 0 ? 1 : 2) + }; + s.Save(feed); + + for (int j = 0; j < 8; j++) + { + var item = new NewsItem + {Title = string.Format("Feed{0}Item{1}", i, j), Status = (j % 2 == 0 ? 1 : 2), Feed = feed}; + s.Save(item); + } + } + tx.Commit(); + } + } + } + + protected override void OnTearDown() + { + using (ISession s = OpenSession()) + { + using (ITransaction tx = s.BeginTransaction()) + { + s.Delete(string.Format("from {0}", typeof (NewsItem).Name)); + s.Delete(string.Format("from {0}", typeof (NewsFeed).Name)); + tx.Commit(); + } + } + } + + [Test] + public void FetchingBySubqueryFilterParameters() + { + using (ISession s = OpenSession()) + { + using (ITransaction tx = s.BeginTransaction()) + { + IFilter filter = s.EnableFilter("StatusFilter"); + filter.SetParameter("Status", 1); + + ICriteria criteria = s.CreateCriteria(typeof (NewsFeed), "NewsFeed"); + IList<NewsFeed> feeds = criteria.List<NewsFeed>(); + + Assert.That(feeds.Count, Is.EqualTo(5)); + foreach (NewsFeed feed in feeds) + { + Assert.That(feed.Items.Count, Is.EqualTo(4)); + } + + tx.Commit(); + } + } + } + + [Test] + public void FetchingBySubqueryFilterParametersAndPositionalParameters() + { + using (ISession s = OpenSession()) + { + using (ITransaction tx = s.BeginTransaction()) + { + IFilter filter = s.EnableFilter("StatusFilter"); + filter.SetParameter("Status", 1); + + ICriteria criteria = s.CreateCriteria(typeof (NewsFeed), "NewsFeed"); + criteria.Add(Restrictions.In("Url", new[] {"Feed2Uri", "Feed4Uri", "Feed8Uri"})); + + IList<NewsFeed> feeds = criteria.List<NewsFeed>(); + + Assert.That(feeds.Count, Is.EqualTo(3)); + foreach (NewsFeed feed in feeds) + { + Assert.That(feed.Items.Count, Is.EqualTo(4)); + } + + tx.Commit(); + } + } + } + + [Test] + public void FetchingBySubqueryFilterParametersAndPositionalParametersAndNamedParameters() + { + using (ISession s = OpenSession()) + { + using (ITransaction tx = s.BeginTransaction()) + { + IFilter filter = s.EnableFilter("StatusFilter"); + filter.SetParameter("Status", 1); + + var hql = new StringBuilder(); + hql.AppendLine("from NewsFeed"); + hql.AppendLine("where (Url = ? or Url = ?) and Title in (:TitleList)) "); + + IQuery query = s.CreateQuery(hql.ToString()); + query.SetString(0, "Feed4Uri"); + query.SetString(1, "Feed8Uri"); + query.SetParameterList("TitleList", new[] {"Feed2", "Feed4", "Feed8"}); + + IList<NewsFeed> feeds = query.List<NewsFeed>(); + + Assert.That(feeds.Count, Is.EqualTo(2)); + foreach (NewsFeed feed in feeds) + { + Assert.That(feed.Items.Count, Is.EqualTo(4)); + } + + tx.Commit(); + } + } + } + } +} \ No newline at end of file Added: branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1990/Mappings.hbm.xml =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1990/Mappings.hbm.xml (rev 0) +++ branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1990/Mappings.hbm.xml 2009-10-14 17:26:57 UTC (rev 4743) @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + namespace="NHibernate.Test.NHSpecificTest.NH1990" + assembly="NHibernate.Test"> + + <class name="NewsFeed" table="NWS_Feed" batch-size="100"> + <id name="Id" type="Guid" column="OID"> + <generator class="guid"></generator> + </id> + <property name="Title" type="String" not-null="true"/> + <property name="Url" type="String" not-null="true"/> + <property name="Status" type="Int32" not-null="true"/> + <bag name="Items" cascade="all" fetch="subselect" inverse="true" > + <key column="FK_Feed_OID"/> + <one-to-many class="NewsItem"></one-to-many> + <filter name="StatusFilter" condition=":Status=Status" /> + </bag> + <filter name="StatusFilter" condition=":Status=Status" /> + </class> + + <class name="NewsItem" table="NWS_Item" batch-size="100"> + <id name="Id" type="Guid" column="OID"> + <generator class="guid"></generator> + </id> + <property name="Title" type="String" not-null="true"/> + <property name="Status" type="Int32" not-null="true"/> + <many-to-one name="Feed" class="NewsFeed" column="FK_Feed_OID" not-null="true"/> + + <filter name="StatusFilter" condition=":Status=Status" /> + </class> + + <filter-def name="StatusFilter"> + <filter-param name="Status" type="Int32"/> + </filter-def> +</hibernate-mapping> + + Added: branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1990/Model.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1990/Model.cs (rev 0) +++ branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1990/Model.cs 2009-10-14 17:26:57 UTC (rev 4743) @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; + +namespace NHibernate.Test.NHSpecificTest.NH1990 +{ + public class NewsFeed + { + public NewsFeed() + { + Items = new List<NewsItem>(); + } + + public virtual Guid Id { get; set; } + public virtual string Title { get; set; } + public virtual string Url { get; set; } + public virtual int Status { get; set; } + public virtual IList<NewsItem> Items { get; set; } + } + + public class NewsItem + { + public virtual Guid Id { get; set; } + public virtual string Title { get; set; } + public virtual int Status { get; set; } + public virtual NewsFeed Feed { get; set; } + } +} \ No newline at end of file Modified: branches/2.1.x/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-10-14 16:19:19 UTC (rev 4742) +++ branches/2.1.x/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-10-14 17:26:57 UTC (rev 4743) @@ -583,6 +583,8 @@ <Compile Include="NHSpecificTest\NH1948\Model.cs" /> <Compile Include="NHSpecificTest\NH1959\Fixture.cs" /> <Compile Include="NHSpecificTest\NH1959\Model.cs" /> + <Compile Include="NHSpecificTest\NH1990\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH1990\Model.cs" /> <Compile Include="NHSpecificTest\NH473\Child.cs" /> <Compile Include="NHSpecificTest\NH473\Fixture.cs" /> <Compile Include="NHSpecificTest\NH473\Parent.cs" /> @@ -1996,6 +1998,7 @@ <EmbeddedResource Include="DriverTest\MultiTypeEntity.hbm.xml" /> <EmbeddedResource Include="DriverTest\SqlServerCeEntity.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH1990\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1959\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1948\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1941\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |