|
From: <fab...@us...> - 2010-09-01 18:39:50
|
Revision: 5177
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5177&view=rev
Author: fabiomaulo
Date: 2010-09-01 18:39:43 +0000 (Wed, 01 Sep 2010)
Log Message:
-----------
additional tests of NH-2029 (does not fail)
Modified Paths:
--------------
trunk/nhibernate/doc/reference/modules/filters.xml
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/ManyToOneFilters20Behaviour/Fixture.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/ManyToOneFilters20Behaviour/Mappings.hbm.xml
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/ManyToOneFilters20Behaviour/Model.cs
Modified: trunk/nhibernate/doc/reference/modules/filters.xml
===================================================================
--- trunk/nhibernate/doc/reference/modules/filters.xml 2010-09-01 17:44:35 UTC (rev 5176)
+++ trunk/nhibernate/doc/reference/modules/filters.xml 2010-09-01 18:39:43 UTC (rev 5177)
@@ -124,6 +124,14 @@
the operator.
</para>
+ <para>
+ Default all filter definitions are applied to <literal><many-to-one/></literal> and
+ <literal><one-to-one/></literal> elements. You can turn off this behaviour by
+ using <literal>use-many-to-one</literal> attribute on <literal><filter-def/></literal>
+ element.
+ </para>
+ <programlisting><![CDATA[<filter-def name="effectiveDate" use-many-to-one="false"/>]]></programlisting>
+
</sect1>
</chapter>
Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/ManyToOneFilters20Behaviour/Fixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/ManyToOneFilters20Behaviour/Fixture.cs 2010-09-01 17:44:35 UTC (rev 5176)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/ManyToOneFilters20Behaviour/Fixture.cs 2010-09-01 18:39:43 UTC (rev 5177)
@@ -16,12 +16,14 @@
private static IList<Parent> joinGraphUsingCriteria(ISession s)
{
- return s.CreateCriteria(typeof (Parent)).SetFetchMode("Child", FetchMode.Join).List<Parent>();
+ return s.CreateCriteria(typeof(Parent)).SetFetchMode("Child", FetchMode.Join).List<Parent>();
}
private static Parent createParent()
{
- return new Parent {Child = new Child()};
+ var ret = new Parent { Child = new Child() };
+ ret.Address = new Address { Parent = ret };
+ return ret;
}
private static void enableFilters(ISession s)
@@ -95,39 +97,125 @@
}
}
- [Test]
- public void VerifyQueryWithWhereClause()
- {
- using (ISession s = OpenSession())
- {
- using (ITransaction tx = s.BeginTransaction())
- {
- var p = createParent();
- p.ParentString = "a";
- p.Child.ChildString = "b";
- s.Save(p);
- tx.Commit();
- }
- }
- IList<Parent> resCriteria;
- IList<Parent> resHql;
- using (ISession s = OpenSession())
- {
- enableFilters(s);
- resCriteria = s.CreateCriteria(typeof(Parent), "p")
- .CreateCriteria("Child", "c")
- .SetFetchMode("Child", FetchMode.Join)
- .Add(Restrictions.Eq("p.ParentString", "a"))
- .Add(Restrictions.Eq("c.ChildString", "b"))
- .List<Parent>();
- resHql = s.CreateQuery(@"select p from Parent p
+ [Test]
+ public void VerifyQueryWithWhereClause()
+ {
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ var p = createParent();
+ p.ParentString = "a";
+ p.Child.ChildString = "b";
+ s.Save(p);
+ tx.Commit();
+ }
+ }
+ IList<Parent> resCriteria;
+ IList<Parent> resHql;
+ using (ISession s = OpenSession())
+ {
+ enableFilters(s);
+ resCriteria = s.CreateCriteria(typeof(Parent), "p")
+ .CreateCriteria("Child", "c")
+ .SetFetchMode("Child", FetchMode.Join)
+ .Add(Restrictions.Eq("p.ParentString", "a"))
+ .Add(Restrictions.Eq("c.ChildString", "b"))
+ .List<Parent>();
+ resHql = s.CreateQuery(@"select p from Parent p
join fetch p.Child c
where p.ParentString='a' and c.ChildString='b'").List<Parent>();
- }
- Assert.AreEqual(1, resCriteria.Count);
- Assert.IsNotNull(resCriteria[0].Child);
- Assert.AreEqual(1, resHql.Count);
- Assert.IsNotNull(resHql[0].Child);
- }
+ }
+ Assert.AreEqual(1, resCriteria.Count);
+ Assert.IsNotNull(resCriteria[0].Child);
+ Assert.AreEqual(1, resHql.Count);
+ Assert.IsNotNull(resHql[0].Child);
+ }
+
+ [Test]
+ public void VerifyAlwaysFiltersOnPropertyRef()
+ {
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ Parent p = createParent();
+ s.Save(p);
+ tx.Commit();
+ }
+ }
+
+ using (ISession s = OpenSession())
+ {
+ enableFilters(s);
+ IList<Parent> resCriteria = joinGraphUsingCriteria(s);
+ IList<Parent> resHql = joinGraphUsingHql(s);
+
+ Assert.IsNotNull(resCriteria[0].Address);
+ Assert.IsNotNull(resHql[0].Address);
+ }
+ }
+
+ [Test]
+ public void ExplicitFiltersOnCollectionsShouldBeActive()
+ {
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ Parent p = createParent();
+ p.Children = new List<Child>
+ {
+ new Child {IsActive = true},
+ new Child {IsActive = false},
+ new Child {IsActive = true}
+ };
+ s.Save(p);
+ tx.Commit();
+ }
+ }
+
+ using (ISession s = OpenSession())
+ {
+ IFilter f = s.EnableFilter("active");
+ f.SetParameter("active", 1);
+ IList<Parent> resCriteria = joinGraphUsingCriteria(s);
+ IList<Parent> resHql = joinGraphUsingHql(s);
+
+ Assert.AreEqual(2, resCriteria[0].Children.Count);
+ Assert.AreEqual(2, resHql[0].Children.Count);
+ }
+ }
+
+ [Test]
+ public void ExplicitFiltersOnCollectionsShouldBeActiveWithEagerLoad()
+ {
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ Parent p = createParent();
+ p.Children = new List<Child>
+ {
+ new Child {IsActive = true},
+ new Child {IsActive = false},
+ new Child {IsActive = true}
+ };
+ s.Save(p);
+ tx.Commit();
+ }
+ }
+
+ using (ISession s = OpenSession())
+ {
+ IFilter f = s.EnableFilter("active");
+ f.SetParameter("active", 1);
+ IList<Parent> resCriteria = s.CreateCriteria(typeof(Parent)).SetFetchMode("Children", FetchMode.Join).List<Parent>();
+ IList<Parent> resHql = s.CreateQuery("select p from Parent p join fetch p.Children").List<Parent>();
+
+ Assert.AreEqual(2, resCriteria[0].Children.Count);
+ Assert.AreEqual(2, resHql[0].Children.Count);
+ }
+ }
}
}
Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/ManyToOneFilters20Behaviour/Mappings.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/ManyToOneFilters20Behaviour/Mappings.hbm.xml 2010-09-01 17:44:35 UTC (rev 5176)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/ManyToOneFilters20Behaviour/Mappings.hbm.xml 2010-09-01 18:39:43 UTC (rev 5177)
@@ -10,6 +10,12 @@
<many-to-one name="Child" class="Child" cascade="all" not-null="true"/>
<property name="ParentString"/>
+ <one-to-one name="Address" property-ref="Parent" cascade="all"/>
+ <bag name="Children" cascade="all">
+ <key column="Parent" />
+ <one-to-many class="Child"/>
+ <filter name="active" condition=":active = IsActive"/>
+ </bag>
</class>
<class name="Child">
@@ -20,13 +26,28 @@
<property name="Always"/>
<property name="ChildString"/>
<filter name="activeChild" condition=":active = IsActive" />
+ <filter name="active" condition=":active = IsActive" />
<filter name="alwaysValid" condition=":always = Always" />
</class>
+
+ <class name="Address">
+ <id name="Id">
+ <generator class="guid.comb"/>
+ </id>
+ <property name="IsActive"/>
+ <many-to-one name="Parent" />
+ <filter name="active" condition=":active = IsActive" />
+ </class>
+
<filter-def name="activeChild" use-many-to-one="false">
<filter-param name="active" type="int"/>
</filter-def>
+ <filter-def name="active" use-many-to-one="false">
+ <filter-param name="active" type="int"/>
+ </filter-def>
+
<filter-def name="alwaysValid">
<filter-param name="always" type="int"/>
</filter-def>
Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/ManyToOneFilters20Behaviour/Model.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/ManyToOneFilters20Behaviour/Model.cs 2010-09-01 17:44:35 UTC (rev 5176)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/ManyToOneFilters20Behaviour/Model.cs 2010-09-01 18:39:43 UTC (rev 5177)
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
namespace NHibernate.Test.NHSpecificTest.ManyToOneFilters20Behaviour
{
@@ -6,7 +7,9 @@
{
public virtual Guid Id { get; set; }
public virtual Child Child { get; set; }
- public virtual string ParentString { get; set; }
+ public virtual Address Address { get; set; }
+ public virtual IList<Child> Children { get; set; }
+ public virtual string ParentString { get; set; }
}
public class Child
@@ -19,6 +22,13 @@
public virtual Guid Id { get; set; }
public virtual bool IsActive { get; set; }
public virtual bool Always { get; set; }
- public virtual string ChildString { get; set; }
+ public virtual string ChildString { get; set; }
}
+
+ public class Address
+ {
+ public virtual Guid Id { get; set; }
+ public virtual Parent Parent { get; set; }
+ public virtual bool IsActive { get; set; }
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|