|
From: <ric...@us...> - 2011-03-26 18:52:00
|
Revision: 5544
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5544&view=rev
Author: ricbrown
Date: 2011-03-26 18:51:53 +0000 (Sat, 26 Mar 2011)
Log Message:
-----------
NH-2592 (Add ICriteria functionality missing in QueryOver) - added overloads for on-clause in left joins
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Criterion/DetachedCriteria.cs
trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverJoinBuilder.cs
trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs
trunk/nhibernate/src/NHibernate/IQueryOver.cs
trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs
trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs
Modified: trunk/nhibernate/src/NHibernate/Criterion/DetachedCriteria.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Criterion/DetachedCriteria.cs 2011-03-26 18:27:30 UTC (rev 5543)
+++ trunk/nhibernate/src/NHibernate/Criterion/DetachedCriteria.cs 2011-03-26 18:51:53 UTC (rev 5544)
@@ -155,6 +155,11 @@
return new DetachedCriteria(impl, criteria.CreateCriteria(associationPath, alias, joinType));
}
+ public DetachedCriteria CreateCriteria(string associationPath, string alias, JoinType joinType, ICriterion withClause)
+ {
+ return new DetachedCriteria(impl, criteria.CreateCriteria(associationPath, alias, joinType, withClause));
+ }
+
public string Alias
{
get { return criteria.Alias; }
Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverJoinBuilder.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverJoinBuilder.cs 2011-03-26 18:27:30 UTC (rev 5543)
+++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverJoinBuilder.cs 2011-03-26 18:51:53 UTC (rev 5544)
@@ -28,11 +28,41 @@
return root.JoinQueryOver<U>(path, alias, joinType);
}
+ public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, U>> path, Expression<Func<U>> alias, Expression<Func<U,bool>> withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, U>> path, Expression<Func<U>> alias, Expression<Func<bool>> withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, U>> path, Expression<Func<U>> alias, ICriterion withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, withClause);
+ }
+
public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias)
{
return root.JoinQueryOver<U>(path, alias, joinType);
}
+ public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias, Expression<Func<U,bool>> withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias, Expression<Func<bool>> withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias, ICriterion withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, withClause);
+ }
+
public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, IEnumerable<U>>> path)
{
return root.JoinQueryOver<U>(path, joinType);
@@ -48,11 +78,41 @@
return root.JoinQueryOver<U>(path, alias, joinType);
}
+ public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, IEnumerable<U>>> path, Expression<Func<U>> alias, Expression<Func<U,bool>> withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, IEnumerable<U>>> path, Expression<Func<U>> alias, Expression<Func<bool>> withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, IEnumerable<U>>> path, Expression<Func<U>> alias, ICriterion withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, withClause);
+ }
+
public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias)
{
return root.JoinQueryOver<U>(path, alias, joinType);
}
+ public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, Expression<Func<U,bool>> withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, Expression<Func<bool>> withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, ICriterion withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, withClause);
+ }
+
}
public class IQueryOverJoinBuilder<TRoot,TSubType> : QueryOverJoinBuilderBase<IQueryOver<TRoot,TSubType>, TRoot, TSubType>
@@ -74,11 +134,41 @@
return root.JoinQueryOver<U>(path, alias, joinType);
}
+ public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, U>> path, Expression<Func<U>> alias, Expression<Func<U,bool>> withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, U>> path, Expression<Func<U>> alias, Expression<Func<bool>> withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, U>> path, Expression<Func<U>> alias, ICriterion withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, withClause);
+ }
+
public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias)
{
return root.JoinQueryOver<U>(path, alias, joinType);
}
+ public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias, Expression<Func<U,bool>> withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias, Expression<Func<bool>> withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias, ICriterion withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, withClause);
+ }
+
public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, IEnumerable<U>>> path)
{
return root.JoinQueryOver<U>(path, joinType);
@@ -94,11 +184,41 @@
return root.JoinQueryOver<U>(path, alias, joinType);
}
+ public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, IEnumerable<U>>> path, Expression<Func<U>> alias, Expression<Func<U,bool>> withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, IEnumerable<U>>> path, Expression<Func<U>> alias, Expression<Func<bool>> withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, IEnumerable<U>>> path, Expression<Func<U>> alias, ICriterion withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, withClause);
+ }
+
public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias)
{
return root.JoinQueryOver<U>(path, alias, joinType);
}
+ public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, Expression<Func<U,bool>> withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, Expression<Func<bool>> withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, ICriterion withClause)
+ {
+ return root.JoinQueryOver<U>(path, alias, joinType, withClause);
+ }
+
}
public class QueryOverJoinBuilderBase<TReturn, TRoot, TSubType> where TReturn : IQueryOver<TRoot,TSubType>
@@ -118,11 +238,71 @@
return (TReturn)root.JoinAlias(path, alias, joinType);
}
+ public TReturn JoinAlias<U>(Expression<Func<TSubType, U>> path, Expression<Func<U>> alias, Expression<Func<U,bool>> withClause)
+ {
+ return (TReturn)root.JoinAlias(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public TReturn JoinAlias<U>(Expression<Func<TSubType, U>> path, Expression<Func<U>> alias, Expression<Func<bool>> withClause)
+ {
+ return (TReturn)root.JoinAlias(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public TReturn JoinAlias<U>(Expression<Func<TSubType, U>> path, Expression<Func<U>> alias, ICriterion withClause)
+ {
+ return (TReturn)root.JoinAlias(path, alias, joinType, withClause);
+ }
+
+ public TReturn JoinAlias<U>(Expression<Func<TSubType, IEnumerable<U>>> path, Expression<Func<U>> alias, Expression<Func<U,bool>> withClause)
+ {
+ return (TReturn)root.JoinAlias(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public TReturn JoinAlias<U>(Expression<Func<TSubType, IEnumerable<U>>> path, Expression<Func<U>> alias, Expression<Func<bool>> withClause)
+ {
+ return (TReturn)root.JoinAlias(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public TReturn JoinAlias<U>(Expression<Func<TSubType, IEnumerable<U>>> path, Expression<Func<U>> alias, ICriterion withClause)
+ {
+ return (TReturn)root.JoinAlias(path, alias, joinType, withClause);
+ }
+
public TReturn JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias)
{
return (TReturn)root.JoinAlias(path, alias, joinType);
}
+ public TReturn JoinAlias<U>(Expression<Func<U>> path, Expression<Func<U>> alias, Expression<Func<U,bool>> withClause)
+ {
+ return (TReturn)root.JoinAlias(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public TReturn JoinAlias<U>(Expression<Func<U>> path, Expression<Func<U>> alias, Expression<Func<bool>> withClause)
+ {
+ return (TReturn)root.JoinAlias(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public TReturn JoinAlias<U>(Expression<Func<U>> path, Expression<Func<U>> alias, ICriterion withClause)
+ {
+ return (TReturn)root.JoinAlias(path, alias, joinType, withClause);
+ }
+
+ public TReturn JoinAlias<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, Expression<Func<U,bool>> withClause)
+ {
+ return (TReturn)root.JoinAlias(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public TReturn JoinAlias<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, Expression<Func<bool>> withClause)
+ {
+ return (TReturn)root.JoinAlias(path, alias, joinType, ExpressionProcessor.ProcessExpression(withClause));
+ }
+
+ public TReturn JoinAlias<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, ICriterion withClause)
+ {
+ return (TReturn)root.JoinAlias(path, alias, joinType, withClause);
+ }
+
}
}
Modified: trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs 2011-03-26 18:27:30 UTC (rev 5543)
+++ trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs 2011-03-26 18:51:53 UTC (rev 5544)
@@ -182,6 +182,12 @@
return this;
}
+ private QueryOver<TRoot> ReadOnly()
+ {
+ criteria.SetReadOnly(true);
+ return this;
+ }
+
/// <summary>
/// Method to allow comparison of detached query in Lambda expression
/// e.g., p => p.Name == myQuery.As<string>
@@ -251,6 +257,9 @@
IQueryOver<TRoot> IQueryOver<TRoot>.CacheRegion(string cacheRegion)
{ return CacheRegion(cacheRegion); }
+ IQueryOver<TRoot> IQueryOver<TRoot>.ReadOnly()
+ { return ReadOnly(); }
+
}
/// <summary>
@@ -499,6 +508,16 @@
joinType));
}
+ public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, U>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause)
+ {
+ return new QueryOver<TRoot,U>(impl,
+ criteria.CreateCriteria(
+ ExpressionProcessor.FindMemberExpression(path.Body),
+ ExpressionProcessor.FindMemberExpression(alias.Body),
+ joinType,
+ withClause));
+ }
+
public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias, JoinType joinType)
{
return new QueryOver<TRoot,U>(impl,
@@ -508,6 +527,16 @@
joinType));
}
+ public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause)
+ {
+ return new QueryOver<TRoot,U>(impl,
+ criteria.CreateCriteria(
+ ExpressionProcessor.FindMemberExpression(path.Body),
+ ExpressionProcessor.FindMemberExpression(alias.Body),
+ joinType,
+ withClause));
+ }
+
public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, IEnumerable<U>>> path, Expression<Func<U>> alias)
{
return new QueryOver<TRoot,U>(impl,
@@ -547,6 +576,16 @@
joinType));
}
+ public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause)
+ {
+ return new QueryOver<TRoot,U>(impl,
+ criteria.CreateCriteria(
+ ExpressionProcessor.FindMemberExpression(path.Body),
+ ExpressionProcessor.FindMemberExpression(alias.Body),
+ joinType,
+ withClause));
+ }
+
public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType)
{
return new QueryOver<TRoot,U>(impl,
@@ -556,6 +595,16 @@
joinType));
}
+ public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause)
+ {
+ return new QueryOver<TRoot,U>(impl,
+ criteria.CreateCriteria(
+ ExpressionProcessor.FindMemberExpression(path.Body),
+ ExpressionProcessor.FindMemberExpression(alias.Body),
+ joinType,
+ withClause));
+ }
+
public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, IEnumerable<U>>> path, JoinType joinType)
{
return new QueryOver<TRoot,U>(impl,
@@ -596,6 +645,24 @@
joinType);
}
+ public QueryOver<TRoot,TSubType> JoinAlias<U>(Expression<Func<TSubType, U>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause)
+ {
+ return AddAlias(
+ ExpressionProcessor.FindMemberExpression(path.Body),
+ ExpressionProcessor.FindMemberExpression(alias.Body),
+ joinType,
+ withClause);
+ }
+
+ public QueryOver<TRoot,TSubType> JoinAlias<U>(Expression<Func<TSubType, IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause)
+ {
+ return AddAlias(
+ ExpressionProcessor.FindMemberExpression(path.Body),
+ ExpressionProcessor.FindMemberExpression(alias.Body),
+ joinType,
+ withClause);
+ }
+
public QueryOver<TRoot,TSubType> JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias, JoinType joinType)
{
return AddAlias(
@@ -604,6 +671,24 @@
joinType);
}
+ public QueryOver<TRoot,TSubType> JoinAlias<U>(Expression<Func<U>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause)
+ {
+ return AddAlias(
+ ExpressionProcessor.FindMemberExpression(path.Body),
+ ExpressionProcessor.FindMemberExpression(alias.Body),
+ joinType,
+ withClause);
+ }
+
+ public QueryOver<TRoot,TSubType> JoinAlias<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause)
+ {
+ return AddAlias(
+ ExpressionProcessor.FindMemberExpression(path.Body),
+ ExpressionProcessor.FindMemberExpression(alias.Body),
+ joinType,
+ withClause);
+ }
+
public QueryOverJoinBuilder<TRoot,TSubType> Inner
{
get { return new QueryOverJoinBuilder<TRoot,TSubType>(this, JoinType.InnerJoin); }
@@ -630,6 +715,12 @@
return this;
}
+ private QueryOver<TRoot,TSubType> AddAlias(string path, string alias, JoinType joinType, ICriterion withClause)
+ {
+ criteria.CreateAlias(path, alias, joinType, withClause);
+ return this;
+ }
+
private QueryOver<TRoot,TSubType> Add(Expression<Func<TSubType, bool>> expression)
{
criteria.Add(ExpressionProcessor.ProcessExpression<TSubType>(expression));
@@ -772,9 +863,15 @@
IQueryOver<TRoot,U> IQueryOver<TRoot,TSubType>.JoinQueryOver<U>(Expression<Func<TSubType, U>> path, Expression<Func<U>> alias, JoinType joinType)
{ return JoinQueryOver(path, alias, joinType); }
+ IQueryOver<TRoot,U> IQueryOver<TRoot,TSubType>.JoinQueryOver<U>(Expression<Func<TSubType, U>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause)
+ { return JoinQueryOver(path, alias, joinType, withClause); }
+
IQueryOver<TRoot,U> IQueryOver<TRoot,TSubType>.JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias, JoinType joinType)
{ return JoinQueryOver(path, alias, joinType); }
+ IQueryOver<TRoot,U> IQueryOver<TRoot,TSubType>.JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause)
+ { return JoinQueryOver(path, alias, joinType, withClause); }
+
IQueryOver<TRoot,U> IQueryOver<TRoot,TSubType>.JoinQueryOver<U>(Expression<Func<TSubType, IEnumerable<U>>> path)
{ return JoinQueryOver(path); }
@@ -796,9 +893,15 @@
IQueryOver<TRoot,U> IQueryOver<TRoot,TSubType>.JoinQueryOver<U>(Expression<Func<TSubType, IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType)
{ return JoinQueryOver(path, alias, joinType); }
+ IQueryOver<TRoot,U> IQueryOver<TRoot,TSubType>.JoinQueryOver<U>(Expression<Func<TSubType, IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause)
+ { return JoinQueryOver(path, alias, joinType, withClause); }
+
IQueryOver<TRoot,U> IQueryOver<TRoot,TSubType>.JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType)
{ return JoinQueryOver(path, alias, joinType); }
+ IQueryOver<TRoot,U> IQueryOver<TRoot,TSubType>.JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause)
+ { return JoinQueryOver(path, alias, joinType, withClause); }
+
IQueryOver<TRoot,TSubType> IQueryOver<TRoot,TSubType>.JoinAlias(Expression<Func<TSubType, object>> path, Expression<Func<object>> alias)
{ return JoinAlias(path, alias); }
@@ -808,9 +911,21 @@
IQueryOver<TRoot,TSubType> IQueryOver<TRoot,TSubType>.JoinAlias(Expression<Func<TSubType, object>> path, Expression<Func<object>> alias, JoinType joinType)
{ return JoinAlias(path, alias, joinType); }
+ IQueryOver<TRoot,TSubType> IQueryOver<TRoot,TSubType>.JoinAlias<U>(Expression<Func<TSubType, U>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause)
+ { return JoinAlias(path, alias, joinType, withClause); }
+
+ IQueryOver<TRoot,TSubType> IQueryOver<TRoot,TSubType>.JoinAlias<U>(Expression<Func<TSubType, IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause)
+ { return JoinAlias(path, alias, joinType, withClause); }
+
IQueryOver<TRoot,TSubType> IQueryOver<TRoot,TSubType>.JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias, JoinType joinType)
{ return JoinAlias(path, alias, joinType); }
+ IQueryOver<TRoot,TSubType> IQueryOver<TRoot,TSubType>.JoinAlias<U>(Expression<Func<U>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause)
+ { return JoinAlias(path, alias, joinType, withClause); }
+
+ IQueryOver<TRoot,TSubType> IQueryOver<TRoot,TSubType>.JoinAlias<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause)
+ { return JoinAlias(path, alias, joinType, withClause); }
+
IQueryOverJoinBuilder<TRoot,TSubType> IQueryOver<TRoot,TSubType>.Inner
{ get { return new IQueryOverJoinBuilder<TRoot,TSubType>(this, JoinType.InnerJoin); } }
Modified: trunk/nhibernate/src/NHibernate/IQueryOver.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/IQueryOver.cs 2011-03-26 18:27:30 UTC (rev 5543)
+++ trunk/nhibernate/src/NHibernate/IQueryOver.cs 2011-03-26 18:51:53 UTC (rev 5544)
@@ -154,6 +154,12 @@
/// for the default query cache</param>
IQueryOver<TRoot> CacheRegion(string cacheRegion);
+ /// <summary>
+ /// Set the read-only mode for entities (and proxies) loaded by this QueryOver.
+ /// (see <see cref="ICriteria.SetReadOnly" />).
+ /// </summary>
+ IQueryOver<TRoot> ReadOnly();
+
}
/// <summary>
@@ -431,11 +437,33 @@
/// <param name="path">Lambda expression returning association path</param>
/// <param name="alias">Lambda expression returning alias reference</param>
/// <param name="joinType">Type of join</param>
+ /// <param name="withClause">Additional criterion for the SQL on clause</param>
/// <returns>The created "sub criteria"</returns>
+ IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, U>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause);
+
+ /// <summary>
+ /// Creates a new NHibernate.IQueryOver<TRoot, U>, "rooted" at the associated entity
+ /// </summary>
+ /// <typeparam name="U">Type of sub-criteria</typeparam>
+ /// <param name="path">Lambda expression returning association path</param>
+ /// <param name="alias">Lambda expression returning alias reference</param>
+ /// <param name="joinType">Type of join</param>
+ /// <returns>The created "sub criteria"</returns>
IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias, JoinType joinType);
/// <summary>
/// Creates a new NHibernate.IQueryOver<TRoot, U>, "rooted" at the associated entity
+ /// </summary>
+ /// <typeparam name="U">Type of sub-criteria</typeparam>
+ /// <param name="path">Lambda expression returning association path</param>
+ /// <param name="alias">Lambda expression returning alias reference</param>
+ /// <param name="joinType">Type of join</param>
+ /// <param name="withClause">Additional criterion for the SQL on clause</param>
+ /// <returns>The created "sub criteria"</returns>
+ IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause);
+
+ /// <summary>
+ /// Creates a new NHibernate.IQueryOver<TRoot, U>, "rooted" at the associated entity
/// specifying a collection for the join.
/// </summary>
/// <typeparam name="U">Type of sub-criteria (type of the collection)</typeparam>
@@ -511,10 +539,34 @@
/// <param name="path">Lambda expression returning association path</param>
/// <param name="alias">Lambda expression returning alias reference</param>
/// <param name="joinType">Type of join</param>
+ /// <param name="withClause">Additional criterion for the SQL on clause</param>
/// <returns>The created "sub criteria"</returns>
+ IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause);
+
+ /// <summary>
+ /// Creates a new NHibernate.IQueryOver<TRoot, U>, "rooted" at the associated entity
+ /// specifying a collection for the join.
+ /// </summary>
+ /// <typeparam name="U">Type of sub-criteria (type of the collection)</typeparam>
+ /// <param name="path">Lambda expression returning association path</param>
+ /// <param name="alias">Lambda expression returning alias reference</param>
+ /// <param name="joinType">Type of join</param>
+ /// <returns>The created "sub criteria"</returns>
IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType);
/// <summary>
+ /// Creates a new NHibernate.IQueryOver<TRoot, U>, "rooted" at the associated entity
+ /// specifying a collection for the join.
+ /// </summary>
+ /// <typeparam name="U">Type of sub-criteria (type of the collection)</typeparam>
+ /// <param name="path">Lambda expression returning association path</param>
+ /// <param name="alias">Lambda expression returning alias reference</param>
+ /// <param name="joinType">Type of join</param>
+ /// <param name="withClause">Additional criterion for the SQL on clause</param>
+ /// <returns>The created "sub criteria"</returns>
+ IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause);
+
+ /// <summary>
/// Join an association, assigning an alias to the joined entity
/// </summary>
/// <param name="path">Lambda expression returning association path</param>
@@ -545,9 +597,51 @@
/// <param name="path">Lambda expression returning association path</param>
/// <param name="alias">Lambda expression returning alias reference</param>
/// <param name="joinType">Type of join</param>
+ /// <param name="withClause">Additional criterion for the SQL on clause</param>
/// <returns>criteria instance</returns>
+ IQueryOver<TRoot,TSubType> JoinAlias<U>(Expression<Func<TSubType, U>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause);
+
+ /// <summary>
+ /// Join an association, assigning an alias to the joined entity
+ /// </summary>
+ /// <typeparam name="U">Type of sub-criteria (type of the collection)</typeparam>
+ /// <param name="path">Lambda expression returning association path</param>
+ /// <param name="alias">Lambda expression returning alias reference</param>
+ /// <param name="joinType">Type of join</param>
+ /// <param name="withClause">Additional criterion for the SQL on clause</param>
+ /// <returns>criteria instance</returns>
+ IQueryOver<TRoot,TSubType> JoinAlias<U>(Expression<Func<TSubType, IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause);
+
+ /// <summary>
+ /// Join an association, assigning an alias to the joined entity
+ /// </summary>
+ /// <param name="path">Lambda expression returning association path</param>
+ /// <param name="alias">Lambda expression returning alias reference</param>
+ /// <param name="joinType">Type of join</param>
+ /// <returns>criteria instance</returns>
IQueryOver<TRoot,TSubType> JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias, JoinType joinType);
+ /// <summary>
+ /// Join an association, assigning an alias to the joined entity
+ /// </summary>
+ /// <param name="path">Lambda expression returning association path</param>
+ /// <param name="alias">Lambda expression returning alias reference</param>
+ /// <param name="joinType">Type of join</param>
+ /// <param name="withClause">Additional criterion for the SQL on clause</param>
+ /// <returns>criteria instance</returns>
+ IQueryOver<TRoot,TSubType> JoinAlias<U>(Expression<Func<U>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause);
+
+ /// <summary>
+ /// Join an association, assigning an alias to the joined entity
+ /// </summary>
+ /// <typeparam name="U">Type of sub-criteria (type of the collection)</typeparam>
+ /// <param name="path">Lambda expression returning association path</param>
+ /// <param name="alias">Lambda expression returning alias reference</param>
+ /// <param name="joinType">Type of join</param>
+ /// <param name="withClause">Additional criterion for the SQL on clause</param>
+ /// <returns>criteria instance</returns>
+ IQueryOver<TRoot,TSubType> JoinAlias<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType, ICriterion withClause);
+
IQueryOverJoinBuilder<TRoot,TSubType> Inner { get; }
IQueryOverJoinBuilder<TRoot,TSubType> Left { get; }
IQueryOverJoinBuilder<TRoot,TSubType> Right { get; }
Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs 2011-03-26 18:27:30 UTC (rev 5543)
+++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs 2011-03-26 18:51:53 UTC (rev 5544)
@@ -4,6 +4,7 @@
using System.Linq;
using NUnit.Framework;
+using SharpTestsEx;
using NHibernate.Criterion;
using NHibernate.Transform;
@@ -181,6 +182,79 @@
}
[Test]
+ public void OnClause()
+ {
+ using (ISession s = OpenSession())
+ using (ITransaction t = s.BeginTransaction())
+ {
+ s.Save(new Person() { Name = "John" }
+ .AddChild(new Child() { Nickname = "John"})
+ .AddChild(new Child() { Nickname = "Judy"}));
+
+ s.Save(new Person() { Name = "Jean" });
+ s.Save(new Child() { Nickname = "James" });
+
+ t.Commit();
+ }
+
+ using (ISession s = OpenSession())
+ {
+ Child childAlias = null;
+ Person parentAlias = null;
+ var children =
+ s.QueryOver(() => childAlias)
+ .Left.JoinQueryOver(c => c.Parent, () => parentAlias, p => p.Name == childAlias.Nickname)
+ .WhereRestrictionOn(p => p.Name).IsNotNull
+ .List();
+
+ children.Should().Have.Count.EqualTo(1);
+ }
+
+ using (ISession s = OpenSession())
+ {
+ Child childAlias = null;
+ Person parentAlias = null;
+ var parentNames =
+ s.QueryOver<Child>(() => childAlias)
+ .Left.JoinAlias(c => c.Parent, () => parentAlias, p => p.Name == childAlias.Nickname)
+ .Select(c => parentAlias.Name)
+ .List<string>();
+
+ parentNames
+ .Where(n => !string.IsNullOrEmpty(n))
+ .Should().Have.Count.EqualTo(1);
+ }
+
+ using (ISession s = OpenSession())
+ {
+ Person personAlias = null;
+ Child childAlias = null;
+ var people =
+ s.QueryOver<Person>(() => personAlias)
+ .Left.JoinQueryOver(p => p.Children, () => childAlias, c => c.Nickname == personAlias.Name)
+ .WhereRestrictionOn(c => c.Nickname).IsNotNull
+ .List();
+
+ people.Should().Have.Count.EqualTo(1);
+ }
+
+ using (ISession s = OpenSession())
+ {
+ Person personAlias = null;
+ Child childAlias = null;
+ var childNames =
+ s.QueryOver<Person>(() => personAlias)
+ .Left.JoinAlias(p => p.Children, () => childAlias, c => c.Nickname == personAlias.Name)
+ .Select(p => childAlias.Nickname)
+ .List<string>();
+
+ childNames
+ .Where(n => !string.IsNullOrEmpty(n))
+ .Should().Have.Count.EqualTo(1);
+ }
+ }
+
+ [Test]
public void UniqueResult()
{
using (ISession s = OpenSession())
Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs 2011-03-26 18:27:30 UTC (rev 5543)
+++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs 2011-03-26 18:51:53 UTC (rev 5544)
@@ -412,6 +412,198 @@
}
[Test]
+ public void OnClause_SubCriteria()
+ {
+ ICriteria expected =
+ CreateTestCriteria(typeof(Person))
+ .CreateCriteria("PersonList", "alias1", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "many func t,bool"))
+ .CreateCriteria("PersonList", "alias2", JoinType.LeftOuterJoin, Restrictions.Eq("alias1.Name", "many func bool"))
+ .CreateCriteria("PersonList", "alias3", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "many private"))
+ .CreateCriteria("Father", "alias4", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "one func t,bool"))
+ .CreateCriteria("Father", "alias5", JoinType.LeftOuterJoin, Restrictions.Eq("alias4.Name", "one func bool"))
+ .CreateCriteria("Father", "alias6", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "one private"))
+ .CreateCriteria("alias1.PersonList", "alias7", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a many func t,bool"))
+ .CreateCriteria("alias2.PersonList", "alias8", JoinType.LeftOuterJoin, Restrictions.Eq("alias1.Name", "a many func bool"))
+ .CreateCriteria("alias3.PersonList", "alias9", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a many private"))
+ .CreateCriteria("alias4.Father", "alias10", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a one func t,bool"))
+ .CreateCriteria("alias5.Father", "alias11", JoinType.LeftOuterJoin, Restrictions.Eq("alias4.Name", "a one func bool"))
+ .CreateCriteria("alias6.Father", "alias12", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a one private"));
+
+ Person alias1 = null;
+ Person alias2 = null;
+ Person alias3 = null;
+ Person alias4 = null;
+ Person alias5 = null;
+ Person alias6 = null;
+ Person alias7 = null;
+ Person alias8 = null;
+ Person alias9 = null;
+ Person alias10 = null;
+ Person alias11 = null;
+ Person alias12 = null;
+ IQueryOver<Person> actual =
+ CreateTestQueryOver<Person>()
+ .Left.JoinQueryOver(p => p.PersonList, () => alias1, p => p.Name == "many func t,bool")
+ .Left.JoinQueryOver(p => p.PersonList, () => alias2, () => alias1.Name == "many func bool")
+ .Left.JoinQueryOver(p => p.PersonList, () => alias3, Restrictions.Eq("Name", "many private"))
+ .Left.JoinQueryOver(p => p.Father, () => alias4, p => p.Name == "one func t,bool")
+ .Left.JoinQueryOver(p => p.Father, () => alias5, () => alias4.Name == "one func bool")
+ .Left.JoinQueryOver(p => p.Father, () => alias6, p => p.Name == "one private")
+ .Left.JoinQueryOver(() => alias1.PersonList, () => alias7, p => p.Name == "a many func t,bool")
+ .Left.JoinQueryOver(() => alias2.PersonList, () => alias8, () => alias1.Name == "a many func bool")
+ .Left.JoinQueryOver(() => alias3.PersonList, () => alias9, Restrictions.Eq("Name", "a many private"))
+ .Left.JoinQueryOver(() => alias4.Father, () => alias10, p => p.Name == "a one func t,bool")
+ .Left.JoinQueryOver(() => alias5.Father, () => alias11, () => alias4.Name == "a one func bool")
+ .Left.JoinQueryOver(() => alias6.Father, () => alias12, p => p.Name == "a one private");
+
+ AssertCriteriaAreEqual(expected, actual);
+ }
+
+ [Test]
+ public void OnClauseDetached_SubCriteria()
+ {
+ DetachedCriteria expected =
+ DetachedCriteria.For<Person>()
+ .CreateCriteria("PersonList", "alias1", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "many func t,bool"))
+ .CreateCriteria("PersonList", "alias2", JoinType.LeftOuterJoin, Restrictions.Eq("alias1.Name", "many func bool"))
+ .CreateCriteria("PersonList", "alias3", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "many private"))
+ .CreateCriteria("Father", "alias4", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "one func t,bool"))
+ .CreateCriteria("Father", "alias5", JoinType.LeftOuterJoin, Restrictions.Eq("alias4.Name", "one func bool"))
+ .CreateCriteria("Father", "alias6", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "one private"))
+ .CreateCriteria("alias1.PersonList", "alias7", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a many func t,bool"))
+ .CreateCriteria("alias2.PersonList", "alias8", JoinType.LeftOuterJoin, Restrictions.Eq("alias1.Name", "a many func bool"))
+ .CreateCriteria("alias3.PersonList", "alias9", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a many private"))
+ .CreateCriteria("alias4.Father", "alias10", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a one func t,bool"))
+ .CreateCriteria("alias5.Father", "alias11", JoinType.LeftOuterJoin, Restrictions.Eq("alias4.Name", "a one func bool"))
+ .CreateCriteria("alias6.Father", "alias12", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a one private"));
+
+ Person alias1 = null;
+ Person alias2 = null;
+ Person alias3 = null;
+ Person alias4 = null;
+ Person alias5 = null;
+ Person alias6 = null;
+ Person alias7 = null;
+ Person alias8 = null;
+ Person alias9 = null;
+ Person alias10 = null;
+ Person alias11 = null;
+ Person alias12 = null;
+ QueryOver<Person> actual =
+ QueryOver.Of<Person>()
+ .Left.JoinQueryOver(p => p.PersonList, () => alias1, p => p.Name == "many func t,bool")
+ .Left.JoinQueryOver(p => p.PersonList, () => alias2, () => alias1.Name == "many func bool")
+ .Left.JoinQueryOver(p => p.PersonList, () => alias3, Restrictions.Eq("Name", "many private"))
+ .Left.JoinQueryOver(p => p.Father, () => alias4, p => p.Name == "one func t,bool")
+ .Left.JoinQueryOver(p => p.Father, () => alias5, () => alias4.Name == "one func bool")
+ .Left.JoinQueryOver(p => p.Father, () => alias6, p => p.Name == "one private")
+ .Left.JoinQueryOver(() => alias1.PersonList, () => alias7, p => p.Name == "a many func t,bool")
+ .Left.JoinQueryOver(() => alias2.PersonList, () => alias8, () => alias1.Name == "a many func bool")
+ .Left.JoinQueryOver(() => alias3.PersonList, () => alias9, Restrictions.Eq("Name", "a many private"))
+ .Left.JoinQueryOver(() => alias4.Father, () => alias10, p => p.Name == "a one func t,bool")
+ .Left.JoinQueryOver(() => alias5.Father, () => alias11, () => alias4.Name == "a one func bool")
+ .Left.JoinQueryOver(() => alias6.Father, () => alias12, p => p.Name == "a one private");
+
+ AssertCriteriaAreEqual(expected, actual);
+ }
+
+ [Test]
+ public void OnClause_Alias()
+ {
+ ICriteria expected =
+ CreateTestCriteria(typeof(Person))
+ .CreateAlias("PersonList", "alias1", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "many func t,bool"))
+ .CreateAlias("PersonList", "alias2", JoinType.LeftOuterJoin, Restrictions.Eq("alias1.Name", "many func bool"))
+ .CreateAlias("PersonList", "alias3", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "many private"))
+ .CreateAlias("Father", "alias4", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "one func t,bool"))
+ .CreateAlias("Father", "alias5", JoinType.LeftOuterJoin, Restrictions.Eq("alias4.Name", "one func bool"))
+ .CreateAlias("Father", "alias6", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "one private"))
+ .CreateAlias("alias1.PersonList", "alias7", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a many func t,bool"))
+ .CreateAlias("alias2.PersonList", "alias8", JoinType.LeftOuterJoin, Restrictions.Eq("alias1.Name", "a many func bool"))
+ .CreateAlias("alias3.PersonList", "alias9", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a many private"))
+ .CreateAlias("alias4.Father", "alias10", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a one func t,bool"))
+ .CreateAlias("alias5.Father", "alias11", JoinType.LeftOuterJoin, Restrictions.Eq("alias4.Name", "a one func bool"))
+ .CreateAlias("alias6.Father", "alias12", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a one private"));
+
+ Person alias1 = null;
+ Person alias2 = null;
+ Person alias3 = null;
+ Person alias4 = null;
+ Person alias5 = null;
+ Person alias6 = null;
+ Person alias7 = null;
+ Person alias8 = null;
+ Person alias9 = null;
+ Person alias10 = null;
+ Person alias11 = null;
+ Person alias12 = null;
+ IQueryOver<Person> actual =
+ CreateTestQueryOver<Person>()
+ .Left.JoinAlias(p => p.PersonList, () => alias1, p => p.Name == "many func t,bool")
+ .Left.JoinAlias(p => p.PersonList, () => alias2, () => alias1.Name == "many func bool")
+ .Left.JoinAlias(p => p.PersonList, () => alias3, Restrictions.Eq("Name", "many private"))
+ .Left.JoinAlias(p => p.Father, () => alias4, p => p.Name == "one func t,bool")
+ .Left.JoinAlias(p => p.Father, () => alias5, () => alias4.Name == "one func bool")
+ .Left.JoinAlias(p => p.Father, () => alias6, p => p.Name == "one private")
+ .Left.JoinAlias(() => alias1.PersonList, () => alias7, p => p.Name == "a many func t,bool")
+ .Left.JoinAlias(() => alias2.PersonList, () => alias8, () => alias1.Name == "a many func bool")
+ .Left.JoinAlias(() => alias3.PersonList, () => alias9, Restrictions.Eq("Name", "a many private"))
+ .Left.JoinAlias(() => alias4.Father, () => alias10, p => p.Name == "a one func t,bool")
+ .Left.JoinAlias(() => alias5.Father, () => alias11, () => alias4.Name == "a one func bool")
+ .Left.JoinAlias(() => alias6.Father, () => alias12, p => p.Name == "a one private");
+
+ AssertCriteriaAreEqual(expected, actual);
+ }
+
+ [Test]
+ public void OnClauseDetached_Alias()
+ {
+ DetachedCriteria expected =
+ DetachedCriteria.For<Person>()
+ .CreateAlias("PersonList", "alias1", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "many func t,bool"))
+ .CreateAlias("PersonList", "alias2", JoinType.LeftOuterJoin, Restrictions.Eq("alias1.Name", "many func bool"))
+ .CreateAlias("PersonList", "alias3", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "many private"))
+ .CreateAlias("Father", "alias4", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "one func t,bool"))
+ .CreateAlias("Father", "alias5", JoinType.LeftOuterJoin, Restrictions.Eq("alias4.Name", "one func bool"))
+ .CreateAlias("Father", "alias6", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "one private"))
+ .CreateAlias("alias1.PersonList", "alias7", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a many func t,bool"))
+ .CreateAlias("alias2.PersonList", "alias8", JoinType.LeftOuterJoin, Restrictions.Eq("alias1.Name", "a many func bool"))
+ .CreateAlias("alias3.PersonList", "alias9", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a many private"))
+ .CreateAlias("alias4.Father", "alias10", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a one func t,bool"))
+ .CreateAlias("alias5.Father", "alias11", JoinType.LeftOuterJoin, Restrictions.Eq("alias4.Name", "a one func bool"))
+ .CreateAlias("alias6.Father", "alias12", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a one private"));
+
+ Person alias1 = null;
+ Person alias2 = null;
+ Person alias3 = null;
+ Person alias4 = null;
+ Person alias5 = null;
+ Person alias6 = null;
+ Person alias7 = null;
+ Person alias8 = null;
+ Person alias9 = null;
+ Person alias10 = null;
+ Person alias11 = null;
+ Person alias12 = null;
+ QueryOver<Person> actual =
+ QueryOver.Of<Person>()
+ .Left.JoinAlias(p => p.PersonList, () => alias1, p => p.Name == "many func t,bool")
+ .Left.JoinAlias(p => p.PersonList, () => alias2, () => alias1.Name == "many func bool")
+ .Left.JoinAlias(p => p.PersonList, () => alias3, Restrictions.Eq("Name", "many private"))
+ .Left.JoinAlias(p => p.Father, () => alias4, p => p.Name == "one func t,bool")
+ .Left.JoinAlias(p => p.Father, () => alias5, () => alias4.Name == "one func bool")
+ .Left.JoinAlias(p => p.Father, () => alias6, p => p.Name == "one private")
+ .Left.JoinAlias(() => alias1.PersonList, () => alias7, p => p.Name == "a many func t,bool")
+ .Left.JoinAlias(() => alias2.PersonList, () => alias8, () => alias1.Name == "a many func bool")
+ .Left.JoinAlias(() => alias3.PersonList, () => alias9, Restrictions.Eq("Name", "a many private"))
+ .Left.JoinAlias(() => alias4.Father, () => alias10, p => p.Name == "a one func t,bool")
+ .Left.JoinAlias(() => alias5.Father, () => alias11, () => alias4.Name == "a one func bool")
+ .Left.JoinAlias(() => alias6.Father, () => alias12, p => p.Name == "a one private");
+
+ AssertCriteriaAreEqual(expected, actual);
+ }
+
+ [Test]
public void OrderBy()
{
ICriteria expected =
@@ -571,6 +763,20 @@
}
[Test]
+ public void Readonly()
+ {
+ ICriteria expected =
+ CreateTestCriteria(typeof(Person))
+ .SetReadOnly(true);
+
+ IQueryOver<Person> actual =
+ CreateTestQueryOver<Person>()
+ .ReadOnly();
+
+ AssertCriteriaAreEqual(expected, actual);
+ }
+
+ [Test]
public void DetachedQueryOver()
{
DetachedCriteria expected =
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|