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