|
From: <ric...@us...> - 2009-07-08 15:34:58
|
Revision: 4591
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4591&view=rev
Author: ricbrown
Date: 2009-07-08 15:34:48 +0000 (Wed, 08 Jul 2009)
Log Message:
-----------
Added QueryOver syntax for join-types.
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs
trunk/nhibernate/src/NHibernate/IQueryOver.cs
trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Model.cs
trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs
Modified: trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs 2009-07-08 09:44:23 UTC (rev 4590)
+++ trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs 2009-07-08 15:34:48 UTC (rev 4591)
@@ -117,6 +117,21 @@
get { return new QueryOverJoinBuilder<T>(this, JoinType.InnerJoin); }
}
+ public QueryOverJoinBuilder<T> Left
+ {
+ get { return new QueryOverJoinBuilder<T>(this, JoinType.LeftOuterJoin); }
+ }
+
+ public QueryOverJoinBuilder<T> Right
+ {
+ get { return new QueryOverJoinBuilder<T>(this, JoinType.RightOuterJoin); }
+ }
+
+ public QueryOverJoinBuilder<T> Full
+ {
+ get { return new QueryOverJoinBuilder<T>(this, JoinType.FullJoin); }
+ }
+
public IList<T> List()
{
return _criteria.List<T>();
@@ -198,9 +213,18 @@
IQueryOver<T> IQueryOver<T>.Join(Expression<Func<T, object>> path, Expression<Func<object>> alias, JoinType joinType)
{ return Join(path, alias, joinType); }
+ IQueryOverJoinBuilder<T> IQueryOver<T>.Inner
+ { get { return new IQueryOverJoinBuilder<T>(this, JoinType.InnerJoin); } }
+
IQueryOverJoinBuilder<T> IQueryOver<T>.Left
{ get { return new IQueryOverJoinBuilder<T>(this, JoinType.LeftOuterJoin); } }
+ IQueryOverJoinBuilder<T> IQueryOver<T>.Right
+ { get { return new IQueryOverJoinBuilder<T>(this, JoinType.RightOuterJoin); } }
+
+ IQueryOverJoinBuilder<T> IQueryOver<T>.Full
+ { get { return new IQueryOverJoinBuilder<T>(this, JoinType.FullJoin); } }
+
}
}
Modified: trunk/nhibernate/src/NHibernate/IQueryOver.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/IQueryOver.cs 2009-07-08 09:44:23 UTC (rev 4590)
+++ trunk/nhibernate/src/NHibernate/IQueryOver.cs 2009-07-08 15:34:48 UTC (rev 4591)
@@ -121,7 +121,10 @@
/// <returns>criteria instance</returns>
IQueryOver<T> Join(Expression<Func<T, object>> path, Expression<Func<object>> alias, JoinType joinType);
- IQueryOverJoinBuilder<T> Left { get; }
+ IQueryOverJoinBuilder<T> Inner { get; }
+ IQueryOverJoinBuilder<T> Left { get; }
+ IQueryOverJoinBuilder<T> Right { get; }
+ IQueryOverJoinBuilder<T> Full { get; }
/// <summary>
/// Get the results of the root type and fill the <see cref="IList<T>"/>
Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Model.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Model.cs 2009-07-08 09:44:23 UTC (rev 4590)
+++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Model.cs 2009-07-08 15:34:48 UTC (rev 4591)
@@ -23,5 +23,20 @@
public virtual string Nickname { get; set; }
}
+ public class Relation
+ {
+
+ public virtual Relation Related1 { get; set; }
+ public virtual Relation Related2 { get; set; }
+ public virtual Relation Related3 { get; set; }
+ public virtual Relation Related4 { get; set; }
+
+ public virtual IEnumerable<Relation> Collection1 { get; set; }
+ public virtual IEnumerable<Relation> Collection2 { get; set; }
+ public virtual IEnumerable<Relation> Collection3 { get; set; }
+ public virtual IEnumerable<Relation> Collection4 { get; set; }
+
+ }
+
}
Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs 2009-07-08 09:44:23 UTC (rev 4590)
+++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs 2009-07-08 15:34:48 UTC (rev 4591)
@@ -179,19 +179,31 @@
}
[Test]
- public void Alias_LeftJoin()
+ public void Alias_JoinCombinations()
{
ICriteria expected =
- CreateTestCriteria(typeof(Person))
- .CreateAlias("Father", "fatherAlias", JoinType.LeftOuterJoin)
- .CreateAlias("Children", "childAlias", JoinType.LeftOuterJoin);
+ CreateTestCriteria(typeof(Relation))
+ .CreateAlias("Related1", "related1Alias")
+ .CreateAlias("Collection1", "collection1Alias")
+ .CreateAlias("Related2", "related2Alias", JoinType.LeftOuterJoin)
+ .CreateAlias("Collection2", "collection2Alias", JoinType.LeftOuterJoin)
+ .CreateAlias("Related3", "related3Alias", JoinType.RightOuterJoin)
+ .CreateAlias("Collection3", "collection3Alias", JoinType.RightOuterJoin)
+ .CreateAlias("Related4", "related4Alias", JoinType.FullJoin)
+ .CreateAlias("Collection4", "collection4Alias", JoinType.FullJoin);
- Person fatherAlias = null;
- Child childAlias = null;
- IQueryOver<Person> actual =
- CreateTestQueryOver<Person>()
- .Left.Join(p => p.Father, () => fatherAlias)
- .Left.Join(p => p.Children, () => childAlias);
+ Relation related1Alias = null, related2Alias = null, related3Alias = null, related4Alias = null;
+ Relation collection1Alias = null, collection2Alias = null, collection3Alias = null, collection4Alias = null;
+ IQueryOver<Relation> actual =
+ CreateTestQueryOver<Relation>()
+ .Inner.Join(r => r.Related1, () => related1Alias)
+ .Inner.Join(r => r.Collection1, () => collection1Alias)
+ .Left.Join(r => r.Related2, () => related2Alias)
+ .Left.Join(r => r.Collection2, () => collection2Alias)
+ .Right.Join(r => r.Related3, () => related3Alias)
+ .Right.Join(r => r.Collection3, () => collection3Alias)
+ .Full.Join(r => r.Related4, () => related4Alias)
+ .Full.Join(r => r.Collection4, () => collection4Alias);
AssertCriteriaAreEqual(expected, actual);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|