From: <fab...@us...> - 2009-07-05 18:48:09
|
Revision: 4584 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4584&view=rev Author: fabiomaulo Date: 2009-07-05 18:48:06 +0000 (Sun, 05 Jul 2009) Log Message: ----------- Fix NH-1868 Modified Paths: -------------- branches/2.1.x/nhibernate/src/NHibernate/Param/ParameterTranslationsImpl.cs branches/2.1.x/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1868/ branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1868/Fixture.cs branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1868/Mappings.hbm.xml branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1868/Model.cs Modified: branches/2.1.x/nhibernate/src/NHibernate/Param/ParameterTranslationsImpl.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate/Param/ParameterTranslationsImpl.cs 2009-07-05 16:55:21 UTC (rev 4583) +++ branches/2.1.x/nhibernate/src/NHibernate/Param/ParameterTranslationsImpl.cs 2009-07-05 18:48:06 UTC (rev 4584) @@ -71,7 +71,7 @@ { // NH Different behaviour NH-1776 // Analyze all named parameters declared after filters - //in general all named parameters but depend on the complexity of the query + // in general all named parameters but depend on the complexity of the query (see sub query) foreach (ParameterInfo entry in _namedParameters.Values) { int amountOfPush = 0; @@ -79,7 +79,7 @@ { // a parameter span, at least, one value; where span more than one all values are cosecutive // the first position determines the position of the others values - if (entry.SqlLocations[0] >= existingParameterLocation) + if (entry.SqlLocations[0]+amountOfPush >= existingParameterLocation) { amountOfPush++; } Added: branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1868/Fixture.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1868/Fixture.cs (rev 0) +++ branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1868/Fixture.cs 2009-07-05 18:48:06 UTC (rev 4584) @@ -0,0 +1,103 @@ +using System; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH1868 +{ + [TestFixture] + public class Fixture : BugTestCase + { + protected override void OnSetUp() + { + base.OnSetUp(); + using (ISession session = OpenSession()) + { + using (ITransaction tx = session.BeginTransaction()) + { + cat = new Category {ValidUntil = DateTime.Now}; + session.Save(cat); + + package = new Package {ValidUntil = DateTime.Now}; + session.Save(package); + + tx.Commit(); + } + } + } + + private Category cat; + private Package package; + + protected override void OnTearDown() + { + using (ISession session = OpenSession()) + { + using (ITransaction tx = session.BeginTransaction()) + { + session.Delete("from Category"); + session.Delete("from Package"); + tx.Commit(); + } + } + base.OnTearDown(); + } + + public void ExecuteQuery(Action<ISession> sessionModifier) + { + using (ISession session = OpenSession()) + { + using (ITransaction tx = session.BeginTransaction()) + { + sessionModifier(session); + session.Refresh(cat); + session.Refresh(package); + + session.CreateQuery( + @" + select + inv + from + Invoice inv + , Package p + where + p = :package + and inv.Category = :cat + and inv.ValidUntil > :now + and inv.Package = :package + ") + .SetEntity("cat", cat).SetEntity("package", package).SetDateTime("now", DateTime.Now).UniqueResult<Invoice>(); + + tx.Commit(); + } + } + } + + [Test] + public void Bug() + { + Assert.DoesNotThrow(() => ExecuteQuery(s => s.EnableFilter("validity").SetParameter("date", DateTime.Now))); + } + + [Test] + public void FilterOnOffOn() + { + Assert.DoesNotThrow(() => ExecuteQuery(s => s.EnableFilter("validity").SetParameter("date", DateTime.Now))); + Assert.DoesNotThrow(() => ExecuteQuery(s => { })); + Assert.DoesNotThrow(() => ExecuteQuery(s => s.EnableFilter("validity").SetParameter("date", DateTime.Now))); + } + + [Test] + public void FilterQueryTwice() + { + Assert.DoesNotThrow(() => ExecuteQuery(s => s.EnableFilter("validity").SetParameter("date", DateTime.Now))); + Assert.DoesNotThrow(() => ExecuteQuery(s => s.EnableFilter("validity").SetParameter("date", DateTime.Now))); + } + + [Test] + public void FilterQuery3() + { + Assert.DoesNotThrow(() => ExecuteQuery(s => s.EnableFilter("validity").SetParameter("date", DateTime.Now))); + Assert.DoesNotThrow(() => ExecuteQuery(s => s.EnableFilter("validity").SetParameter("date", DateTime.Now))); + Assert.DoesNotThrow(() => ExecuteQuery(s => s.EnableFilter("validity").SetParameter("date", DateTime.Now))); + } + } +} \ No newline at end of file Added: branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1868/Mappings.hbm.xml =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1868/Mappings.hbm.xml (rev 0) +++ branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1868/Mappings.hbm.xml 2009-07-05 18:48:06 UTC (rev 4584) @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH1868"> + + <class name="Category"> + <id name="ID" type="Int32"> + <generator class="hilo" /> + </id> + <property name="ValidUntil" type="DateTime" /> + <filter name="validity" condition="ValidUntil > :date" /> + </class> + + <class name="Package"> + <id name="ID" type="Int32"> + <generator class="hilo" /> + </id> + <property name="ValidUntil" type="DateTime" /> + <filter name="validity" condition="ValidUntil > :date" /> + </class> + + <class name="Invoice"> + <id name="ID" type="Int32"> + <generator class="hilo" /> + </id> + + <many-to-one name="Category" column="CategoryId" class="Category" /> + <many-to-one name="Package" column="PacakgeId" class="Package" /> + <property name="ValidUntil" type="DateTime" /> + <filter name="validity" condition="ValidUntil > :date" /> + </class> + + <filter-def name="validity"> + <filter-param name="date" type="DateTime"/> + </filter-def> + +</hibernate-mapping> Added: branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1868/Model.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1868/Model.cs (rev 0) +++ branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1868/Model.cs 2009-07-05 18:48:06 UTC (rev 4584) @@ -0,0 +1,24 @@ +using System; + +namespace NHibernate.Test.NHSpecificTest.NH1868 +{ + public class Category + { + public virtual int ID { get; private set; } + public virtual DateTime ValidUntil { get; set; } + } + + public class Package + { + public virtual int ID { get; private set; } + public virtual DateTime ValidUntil { get; set; } + } + + public class Invoice + { + public virtual int ID { get; private set; } + public virtual DateTime ValidUntil { get; set; } + public virtual Category Category { get; set; } + public virtual Package Package { 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-07-05 16:55:21 UTC (rev 4583) +++ branches/2.1.x/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-07-05 18:48:06 UTC (rev 4584) @@ -532,6 +532,8 @@ <Compile Include="NHSpecificTest\NH1859\SampleTest.cs" /> <Compile Include="NHSpecificTest\NH1864\Fixture.cs" /> <Compile Include="NHSpecificTest\NH1864\Model.cs" /> + <Compile Include="NHSpecificTest\NH1868\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH1868\Model.cs" /> <Compile Include="NHSpecificTest\NH473\Child.cs" /> <Compile Include="NHSpecificTest\NH473\Fixture.cs" /> <Compile Include="NHSpecificTest\NH473\Parent.cs" /> @@ -1942,6 +1944,7 @@ <EmbeddedResource Include="Bytecode\Lightweight\ProductLine.hbm.xml" /> <EmbeddedResource Include="DriverTest\MultiTypeEntity.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH1868\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1849\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1857\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1859\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |