|
From: <ric...@us...> - 2011-05-29 18:06:28
|
Revision: 5879
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5879&view=rev
Author: ricbrown
Date: 2011-05-29 18:06:21 +0000 (Sun, 29 May 2011)
Log Message:
-----------
NH-2683: Added QueryOver functions to projections and SQL functions
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Criterion/Lambda/LambdaRestrictionBuilder.cs
trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverRestrictionBuilder.cs
trunk/nhibernate/src/NHibernate/Criterion/Projections.cs
trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs
trunk/nhibernate/src/NHibernate/Criterion/Restrictions.cs
trunk/nhibernate/src/NHibernate/Criterion/RestrictionsExtensions.cs
trunk/nhibernate/src/NHibernate/Impl/ExpressionProcessor.cs
trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs
trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/ProjectionsFixture.cs
trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs
trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/RestrictionsFixture.cs
Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/LambdaRestrictionBuilder.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Criterion/Lambda/LambdaRestrictionBuilder.cs 2011-05-29 02:36:57 UTC (rev 5878)
+++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/LambdaRestrictionBuilder.cs 2011-05-29 18:06:21 UTC (rev 5879)
@@ -14,13 +14,13 @@
{
public class LambdaBetweenBuilder
{
- private string propertyName;
+ private IProjection projection;
private object lo;
private bool isNot;
- public LambdaBetweenBuilder(string propertyName, object lo, bool isNot)
+ public LambdaBetweenBuilder(IProjection projection, object lo, bool isNot)
{
- this.propertyName = propertyName;
+ this.projection = projection;
this.lo = lo;
this.isNot = isNot;
}
@@ -28,13 +28,13 @@
public AbstractCriterion And(object hi)
{
if (isNot)
- return Restrictions.Not(Restrictions.Between(propertyName, lo, hi));
+ return Restrictions.Not(Restrictions.Between(projection, lo, hi));
- return Restrictions.Between(propertyName, lo, hi);
+ return Restrictions.Between(projection, lo, hi);
}
}
- private string propertyName;
+ private IProjection projection;
private bool isNot;
private AbstractCriterion Process(AbstractCriterion criterion)
@@ -48,9 +48,9 @@
/// <summary>
/// Constructed with property name
/// </summary>
- public LambdaRestrictionBuilder(string propertyName)
+ public LambdaRestrictionBuilder(IProjection projection)
{
- this.propertyName = propertyName;
+ this.projection = projection;
}
/// <summary>
@@ -58,7 +58,7 @@
/// </summary>
public LambdaBetweenBuilder IsBetween(object lo)
{
- return new LambdaBetweenBuilder(propertyName, lo, isNot);
+ return new LambdaBetweenBuilder(projection, lo, isNot);
}
public LambdaRestrictionBuilder Not
@@ -75,7 +75,7 @@
/// </summary>
public AbstractCriterion IsIn(ICollection values)
{
- return Process(Restrictions.In(propertyName, values));
+ return Process(Restrictions.In(projection, values));
}
/// <summary>
@@ -83,7 +83,7 @@
/// </summary>
public AbstractCriterion IsIn(object[] values)
{
- return Process(Restrictions.In(propertyName, values));
+ return Process(Restrictions.In(projection, values));
}
/// <summary>
@@ -91,7 +91,7 @@
/// </summary>
public AbstractCriterion IsInG<T>(ICollection<T> values)
{
- return Process(Restrictions.InG(propertyName, values));
+ return Process(Restrictions.InG(projection, values));
}
/// <summary>
@@ -99,7 +99,7 @@
/// </summary>
public AbstractCriterion IsInsensitiveLike(object value)
{
- return Process(Restrictions.InsensitiveLike(propertyName, value));
+ return Process(Restrictions.InsensitiveLike(projection, value));
}
/// <summary>
@@ -107,7 +107,7 @@
/// </summary>
public AbstractCriterion IsInsensitiveLike(string value, MatchMode matchMode)
{
- return Process(Restrictions.InsensitiveLike(propertyName, value, matchMode));
+ return Process(Restrictions.InsensitiveLike(projection, value, matchMode));
}
/// <summary>
@@ -115,7 +115,7 @@
/// </summary>
public AbstractCriterion IsEmpty
{
- get { return Process(Restrictions.IsEmpty(propertyName)); }
+ get { return Process(Restrictions.IsEmpty(ExpressionProcessor.FindProperty(projection))); }
}
/// <summary>
@@ -123,7 +123,7 @@
/// </summary>
public AbstractCriterion IsNotEmpty
{
- get { return Process(Restrictions.IsNotEmpty(propertyName)); }
+ get { return Process(Restrictions.IsNotEmpty(ExpressionProcessor.FindProperty(projection))); }
}
/// <summary>
@@ -131,7 +131,7 @@
/// </summary>
public AbstractCriterion IsNull
{
- get { return Process(Restrictions.IsNull(propertyName)); }
+ get { return Process(Restrictions.IsNull(projection)); }
}
/// <summary>
@@ -139,7 +139,7 @@
/// </summary>
public AbstractCriterion IsNotNull
{
- get { return Process(Restrictions.IsNotNull(propertyName)); }
+ get { return Process(Restrictions.IsNotNull(projection)); }
}
/// <summary>
@@ -147,7 +147,7 @@
/// </summary>
public AbstractCriterion IsLike(object value)
{
- return Process(Restrictions.Like(propertyName, value));
+ return Process(Restrictions.Like(projection, value));
}
/// <summary>
@@ -155,7 +155,7 @@
/// </summary>
public AbstractCriterion IsLike(string value, MatchMode matchMode)
{
- return Process(Restrictions.Like(propertyName, value, matchMode));
+ return Process(Restrictions.Like(projection, value, matchMode));
}
/// <summary>
@@ -163,7 +163,7 @@
/// </summary>
public AbstractCriterion IsLike(string value, MatchMode matchMode, char? escapeChar)
{
- return Process(Restrictions.Like(propertyName, value, matchMode, escapeChar));
+ return Process(Restrictions.Like(ExpressionProcessor.FindProperty(projection), value, matchMode, escapeChar));
}
}
Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverRestrictionBuilder.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverRestrictionBuilder.cs 2011-05-29 02:36:57 UTC (rev 5878)
+++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverRestrictionBuilder.cs 2011-05-29 18:06:21 UTC (rev 5879)
@@ -13,8 +13,8 @@
public class QueryOverRestrictionBuilder<TRoot,TSubType> : QueryOverRestrictionBuilderBase<QueryOver<TRoot,TSubType>, TRoot, TSubType>
{
- public QueryOverRestrictionBuilder(QueryOver<TRoot,TSubType> root, string propertyName)
- : base(root, propertyName) { }
+ public QueryOverRestrictionBuilder(QueryOver<TRoot,TSubType> root, IProjection projection)
+ : base(root, projection) { }
public QueryOverRestrictionBuilder<TRoot,TSubType> Not
{
@@ -30,8 +30,8 @@
public class IQueryOverRestrictionBuilder<TRoot,TSubType> : QueryOverRestrictionBuilderBase<IQueryOver<TRoot,TSubType>, TRoot, TSubType>
{
- public IQueryOverRestrictionBuilder(IQueryOver<TRoot,TSubType> root, string propertyName)
- : base(root, propertyName) { }
+ public IQueryOverRestrictionBuilder(IQueryOver<TRoot,TSubType> root, IProjection projection)
+ : base(root, projection) { }
public IQueryOverRestrictionBuilder<TRoot,TSubType> Not
{
@@ -50,14 +50,14 @@
public class LambdaBetweenBuilder
{
private TReturn root;
- private string propertyName;
+ private IProjection projection;
private bool isNot;
private object lo;
- public LambdaBetweenBuilder(TReturn root, string propertyName, bool isNot, object lo)
+ public LambdaBetweenBuilder(TReturn root, IProjection projection, bool isNot, object lo)
{
this.root = root;
- this.propertyName = propertyName;
+ this.projection = projection;
this.isNot = isNot;
this.lo = lo;
}
@@ -72,21 +72,21 @@
public TReturn And(object hi)
{
- return Add(Restrictions.Between(propertyName, lo, hi));
+ return Add(Restrictions.Between(projection, lo, hi));
}
}
private TReturn root;
- private string propertyName;
+ private IProjection projection;
protected bool isNot;
/// <summary>
/// Constructed with property name
/// </summary>
- public QueryOverRestrictionBuilderBase(TReturn root, string propertyName)
+ public QueryOverRestrictionBuilderBase(TReturn root, IProjection projection)
{
this.root = root;
- this.propertyName = propertyName;
+ this.projection = projection;
}
private TReturn Add(ICriterion criterion)
@@ -102,7 +102,7 @@
/// </summary>
public LambdaBetweenBuilder IsBetween(object lo)
{
- return new LambdaBetweenBuilder(root, propertyName, isNot, lo);
+ return new LambdaBetweenBuilder(root, projection, isNot, lo);
}
/// <summary>
@@ -110,7 +110,7 @@
/// </summary>
public TReturn IsIn(ICollection values)
{
- return Add(Restrictions.In(propertyName, values));
+ return Add(Restrictions.In(projection, values));
}
/// <summary>
@@ -118,7 +118,7 @@
/// </summary>
public TReturn IsIn(object[] values)
{
- return Add(Restrictions.In(propertyName, values));
+ return Add(Restrictions.In(projection, values));
}
/// <summary>
@@ -126,7 +126,7 @@
/// </summary>
public TReturn IsInG<T>(ICollection<T> values)
{
- return Add(Restrictions.InG(propertyName, values));
+ return Add(Restrictions.InG(projection, values));
}
/// <summary>
@@ -134,7 +134,7 @@
/// </summary>
public TReturn IsInsensitiveLike(object value)
{
- return Add(Restrictions.InsensitiveLike(propertyName, value));
+ return Add(Restrictions.InsensitiveLike(projection, value));
}
/// <summary>
@@ -142,7 +142,7 @@
/// </summary>
public TReturn IsInsensitiveLike(string value, MatchMode matchMode)
{
- return Add(Restrictions.InsensitiveLike(propertyName, value, matchMode));
+ return Add(Restrictions.InsensitiveLike(projection, value, matchMode));
}
/// <summary>
@@ -150,7 +150,7 @@
/// </summary>
public TReturn IsEmpty
{
- get { return Add(Restrictions.IsEmpty(propertyName)); }
+ get { return Add(Restrictions.IsEmpty(ExpressionProcessor.FindProperty(projection))); }
}
/// <summary>
@@ -158,7 +158,7 @@
/// </summary>
public TReturn IsNotEmpty
{
- get { return Add(Restrictions.IsNotEmpty(propertyName)); }
+ get { return Add(Restrictions.IsNotEmpty(ExpressionProcessor.FindProperty(projection))); }
}
/// <summary>
@@ -166,7 +166,7 @@
/// </summary>
public TReturn IsNull
{
- get { return Add(Restrictions.IsNull(propertyName)); }
+ get { return Add(Restrictions.IsNull(projection)); }
}
/// <summary>
@@ -174,7 +174,7 @@
/// </summary>
public TReturn IsNotNull
{
- get { return Add(Restrictions.IsNotNull(propertyName)); }
+ get { return Add(Restrictions.IsNotNull(projection)); }
}
/// <summary>
@@ -182,7 +182,7 @@
/// </summary>
public TReturn IsLike(object value)
{
- return Add(Restrictions.Like(propertyName, value));
+ return Add(Restrictions.Like(projection, value));
}
/// <summary>
@@ -190,7 +190,7 @@
/// </summary>
public TReturn IsLike(string value, MatchMode matchMode)
{
- return Add(Restrictions.Like(propertyName, value, matchMode));
+ return Add(Restrictions.Like(projection, value, matchMode));
}
/// <summary>
@@ -198,7 +198,7 @@
/// </summary>
public TReturn IsLike(string value, MatchMode matchMode, char? escapeChar)
{
- return Add(Restrictions.Like(propertyName, value, matchMode, escapeChar));
+ return Add(Restrictions.Like(ExpressionProcessor.FindProperty(projection), value, matchMode, escapeChar));
}
}
Modified: trunk/nhibernate/src/NHibernate/Criterion/Projections.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Criterion/Projections.cs 2011-05-29 02:36:57 UTC (rev 5878)
+++ trunk/nhibernate/src/NHibernate/Criterion/Projections.cs 2011-05-29 18:06:21 UTC (rev 5879)
@@ -324,7 +324,7 @@
/// </summary>
public static AggregateProjection Avg<T>(Expression<Func<T, object>> expression)
{
- return Projections.Avg(ExpressionProcessor.FindMemberExpression(expression.Body));
+ return Projections.Avg(ExpressionProcessor.FindMemberProjection(expression.Body));
}
/// <summary>
@@ -332,7 +332,7 @@
/// </summary>
public static AggregateProjection Avg(Expression<Func<object>> expression)
{
- return Projections.Avg(ExpressionProcessor.FindMemberExpression(expression.Body));
+ return Projections.Avg(ExpressionProcessor.FindMemberProjection(expression.Body));
}
/// <summary>
@@ -340,7 +340,7 @@
/// </summary>
public static CountProjection Count<T>(Expression<Func<T, object>> expression)
{
- return Projections.Count(ExpressionProcessor.FindMemberExpression(expression.Body));
+ return Projections.Count(ExpressionProcessor.FindMemberProjection(expression.Body));
}
/// <summary>
@@ -348,7 +348,7 @@
/// </summary>
public static CountProjection Count(Expression<Func<object>> expression)
{
- return Projections.Count(ExpressionProcessor.FindMemberExpression(expression.Body));
+ return Projections.Count(ExpressionProcessor.FindMemberProjection(expression.Body));
}
/// <summary>
@@ -388,7 +388,7 @@
/// </summary>
public static AggregateProjection Max<T>(Expression<Func<T, object>> expression)
{
- return Projections.Max(ExpressionProcessor.FindMemberExpression(expression.Body));
+ return Projections.Max(ExpressionProcessor.FindMemberProjection(expression.Body));
}
/// <summary>
@@ -396,7 +396,7 @@
/// </summary>
public static AggregateProjection Max(Expression<Func<object>> expression)
{
- return Projections.Max(ExpressionProcessor.FindMemberExpression(expression.Body));
+ return Projections.Max(ExpressionProcessor.FindMemberProjection(expression.Body));
}
/// <summary>
@@ -404,7 +404,7 @@
/// </summary>
public static AggregateProjection Min<T>(Expression<Func<T, object>> expression)
{
- return Projections.Min(ExpressionProcessor.FindMemberExpression(expression.Body));
+ return Projections.Min(ExpressionProcessor.FindMemberProjection(expression.Body));
}
/// <summary>
@@ -412,7 +412,7 @@
/// </summary>
public static AggregateProjection Min(Expression<Func<object>> expression)
{
- return Projections.Min(ExpressionProcessor.FindMemberExpression(expression.Body));
+ return Projections.Min(ExpressionProcessor.FindMemberProjection(expression.Body));
}
/// <summary>
@@ -441,7 +441,7 @@
/// </summary>
public static AggregateProjection Sum<T>(Expression<Func<T, object>> expression)
{
- return Projections.Sum(ExpressionProcessor.FindMemberExpression(expression.Body));
+ return Projections.Sum(ExpressionProcessor.FindMemberProjection(expression.Body));
}
/// <summary>
@@ -449,7 +449,7 @@
/// </summary>
public static AggregateProjection Sum(Expression<Func<object>> expression)
{
- return Projections.Sum(ExpressionProcessor.FindMemberExpression(expression.Body));
+ return Projections.Sum(ExpressionProcessor.FindMemberProjection(expression.Body));
}
/// <summary>
Modified: trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs 2011-05-29 02:36:57 UTC (rev 5878)
+++ trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs 2011-05-29 18:06:21 UTC (rev 5879)
@@ -344,12 +344,12 @@
public QueryOverRestrictionBuilder<TRoot,TSubType> AndRestrictionOn(Expression<Func<TSubType, object>> expression)
{
- return new QueryOverRestrictionBuilder<TRoot,TSubType>(this, ExpressionProcessor.FindMemberExpression(expression.Body));
+ return new QueryOverRestrictionBuilder<TRoot,TSubType>(this, ExpressionProcessor.FindMemberProjection(expression.Body));
}
public QueryOverRestrictionBuilder<TRoot,TSubType> AndRestrictionOn(Expression<Func<object>> expression)
{
- return new QueryOverRestrictionBuilder<TRoot,TSubType>(this, ExpressionProcessor.FindMemberExpression(expression.Body));
+ return new QueryOverRestrictionBuilder<TRoot,TSubType>(this, ExpressionProcessor.FindMemberProjection(expression.Body));
}
public QueryOver<TRoot,TSubType> Where(Expression<Func<TSubType, bool>> expression)
@@ -379,12 +379,12 @@
public QueryOverRestrictionBuilder<TRoot,TSubType> WhereRestrictionOn(Expression<Func<TSubType, object>> expression)
{
- return new QueryOverRestrictionBuilder<TRoot,TSubType>(this, ExpressionProcessor.FindMemberExpression(expression.Body));
+ return new QueryOverRestrictionBuilder<TRoot,TSubType>(this, ExpressionProcessor.FindMemberProjection(expression.Body));
}
public QueryOverRestrictionBuilder<TRoot,TSubType> WhereRestrictionOn(Expression<Func<object>> expression)
{
- return new QueryOverRestrictionBuilder<TRoot,TSubType>(this, ExpressionProcessor.FindMemberExpression(expression.Body));
+ return new QueryOverRestrictionBuilder<TRoot,TSubType>(this, ExpressionProcessor.FindMemberProjection(expression.Body));
}
public QueryOver<TRoot,TSubType> Select(params Expression<Func<TRoot, object>>[] projections)
@@ -791,10 +791,10 @@
{ return AndNot(expression); }
IQueryOverRestrictionBuilder<TRoot,TSubType> IQueryOver<TRoot,TSubType>.AndRestrictionOn(Expression<Func<TSubType, object>> expression)
- { return new IQueryOverRestrictionBuilder<TRoot,TSubType>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); }
+ { return new IQueryOverRestrictionBuilder<TRoot,TSubType>(this, ExpressionProcessor.FindMemberProjection(expression.Body)); }
IQueryOverRestrictionBuilder<TRoot,TSubType> IQueryOver<TRoot,TSubType>.AndRestrictionOn(Expression<Func<object>> expression)
- { return new IQueryOverRestrictionBuilder<TRoot,TSubType>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); }
+ { return new IQueryOverRestrictionBuilder<TRoot,TSubType>(this, ExpressionProcessor.FindMemberProjection(expression.Body)); }
IQueryOver<TRoot,TSubType> IQueryOver<TRoot,TSubType>.Where(Expression<Func<TSubType, bool>> expression)
{ return Where(expression); }
@@ -812,10 +812,10 @@
{ return WhereNot(expression); }
IQueryOverRestrictionBuilder<TRoot,TSubType> IQueryOver<TRoot,TSubType>.WhereRestrictionOn(Expression<Func<TSubType, object>> expression)
- { return new IQueryOverRestrictionBuilder<TRoot,TSubType>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); }
+ { return new IQueryOverRestrictionBuilder<TRoot,TSubType>(this, ExpressionProcessor.FindMemberProjection(expression.Body)); }
IQueryOverRestrictionBuilder<TRoot,TSubType> IQueryOver<TRoot,TSubType>.WhereRestrictionOn(Expression<Func<object>> expression)
- { return new IQueryOverRestrictionBuilder<TRoot,TSubType>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); }
+ { return new IQueryOverRestrictionBuilder<TRoot,TSubType>(this, ExpressionProcessor.FindMemberProjection(expression.Body)); }
IQueryOver<TRoot,TSubType> IQueryOver<TRoot,TSubType>.Select(params Expression<Func<TRoot, object>>[] projections)
{ return Select(projections); }
Modified: trunk/nhibernate/src/NHibernate/Criterion/Restrictions.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Criterion/Restrictions.cs 2011-05-29 02:36:57 UTC (rev 5878)
+++ trunk/nhibernate/src/NHibernate/Criterion/Restrictions.cs 2011-05-29 18:06:21 UTC (rev 5879)
@@ -790,8 +790,8 @@
/// <returns>returns LambdaRestrictionBuilder</returns>
public static LambdaRestrictionBuilder On<T>(Expression<Func<T, object>> expression)
{
- string property = ExpressionProcessor.FindMemberExpression(expression.Body);
- return new LambdaRestrictionBuilder(property);
+ IProjection projection = ExpressionProcessor.FindMemberProjection(expression.Body);
+ return new LambdaRestrictionBuilder(projection);
}
/// <summary>
@@ -801,8 +801,8 @@
/// <returns>returns LambdaRestrictionBuilder</returns>
public static LambdaRestrictionBuilder On(Expression<Func<object>> expression)
{
- string property = ExpressionProcessor.FindMemberExpression(expression.Body);
- return new LambdaRestrictionBuilder(property);
+ IProjection projection = ExpressionProcessor.FindMemberProjection(expression.Body);
+ return new LambdaRestrictionBuilder(projection);
}
}
Modified: trunk/nhibernate/src/NHibernate/Criterion/RestrictionsExtensions.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Criterion/RestrictionsExtensions.cs 2011-05-29 02:36:57 UTC (rev 5878)
+++ trunk/nhibernate/src/NHibernate/Criterion/RestrictionsExtensions.cs 2011-05-29 18:06:21 UTC (rev 5879)
@@ -89,17 +89,17 @@
public static ICriterion ProcessIsLike(MethodCallExpression methodCallExpression)
{
- string property = ExpressionProcessor.FindMemberExpression(methodCallExpression.Arguments[0]);
+ IProjection projection = ExpressionProcessor.FindMemberProjection(methodCallExpression.Arguments[0]);
object value = ExpressionProcessor.FindValue(methodCallExpression.Arguments[1]);
- return Restrictions.Like(property, value);
+ return Restrictions.Like(projection, value);
}
public static ICriterion ProcessIsLikeMatchMode(MethodCallExpression methodCallExpression)
{
- string property = ExpressionProcessor.FindMemberExpression(methodCallExpression.Arguments[0]);
+ IProjection projection = ExpressionProcessor.FindMemberProjection(methodCallExpression.Arguments[0]);
string value = (string)ExpressionProcessor.FindValue(methodCallExpression.Arguments[1]);
MatchMode matchMode = (MatchMode)ExpressionProcessor.FindValue(methodCallExpression.Arguments[2]);
- return Restrictions.Like(property, value, matchMode);
+ return Restrictions.Like(projection, value, matchMode);
}
public static ICriterion ProcessIsLikeMatchModeEscapeChar(MethodCallExpression methodCallExpression)
@@ -113,40 +113,40 @@
public static ICriterion ProcessIsInsensitiveLike(MethodCallExpression methodCallExpression)
{
- string property = ExpressionProcessor.FindMemberExpression(methodCallExpression.Arguments[0]);
+ IProjection projection = ExpressionProcessor.FindMemberProjection(methodCallExpression.Arguments[0]);
object value = ExpressionProcessor.FindValue(methodCallExpression.Arguments[1]);
- return Restrictions.InsensitiveLike(property, value);
+ return Restrictions.InsensitiveLike(projection, value);
}
public static ICriterion ProcessIsInsensitiveLikeMatchMode(MethodCallExpression methodCallExpression)
{
- string property = ExpressionProcessor.FindMemberExpression(methodCallExpression.Arguments[0]);
+ IProjection projection = ExpressionProcessor.FindMemberProjection(methodCallExpression.Arguments[0]);
string value = (string)ExpressionProcessor.FindValue(methodCallExpression.Arguments[1]);
MatchMode matchMode = (MatchMode)ExpressionProcessor.FindValue(methodCallExpression.Arguments[2]);
- return Restrictions.InsensitiveLike(property, value, matchMode);
+ return Restrictions.InsensitiveLike(projection, value, matchMode);
}
public static ICriterion ProcessIsInArray(MethodCallExpression methodCallExpression)
{
- string property = ExpressionProcessor.FindMemberExpression(methodCallExpression.Arguments[0]);
+ IProjection projection = ExpressionProcessor.FindMemberProjection(methodCallExpression.Arguments[0]);
object[] values = (object[])ExpressionProcessor.FindValue(methodCallExpression.Arguments[1]);
- return Restrictions.In(property, values);
+ return Restrictions.In(projection, values);
}
public static ICriterion ProcessIsInCollection(MethodCallExpression methodCallExpression)
{
- string property = ExpressionProcessor.FindMemberExpression(methodCallExpression.Arguments[0]);
+ IProjection projection = ExpressionProcessor.FindMemberProjection(methodCallExpression.Arguments[0]);
ICollection values = (ICollection)ExpressionProcessor.FindValue(methodCallExpression.Arguments[1]);
- return Restrictions.In(property, values);
+ return Restrictions.In(projection, values);
}
public static ICriterion ProcessIsBetween(MethodCallExpression methodCallExpression)
{
MethodCallExpression betweenFunction = (MethodCallExpression)methodCallExpression.Object;
- string property = ExpressionProcessor.FindMemberExpression(betweenFunction.Arguments[0]);
+ IProjection projection = ExpressionProcessor.FindMemberProjection(betweenFunction.Arguments[0]);
object lo = ExpressionProcessor.FindValue(betweenFunction.Arguments[1]);
object hi = ExpressionProcessor.FindValue(methodCallExpression.Arguments[0]);
- return Restrictions.Between(property, lo, hi);
+ return Restrictions.Between(projection, lo, hi);
}
}
}
Modified: trunk/nhibernate/src/NHibernate/Impl/ExpressionProcessor.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Impl/ExpressionProcessor.cs 2011-05-29 02:36:57 UTC (rev 5878)
+++ trunk/nhibernate/src/NHibernate/Impl/ExpressionProcessor.cs 2011-05-29 18:06:21 UTC (rev 5879)
@@ -741,6 +741,18 @@
_customProjectionProcessors.Add(signature, functionProcessor);
}
+ /// <summary>
+ /// Retreive the property name from a supplied PropertyProjection
+ /// Note: throws is the supplied IProjection is not a PropertyProjection
+ /// </summary>
+ public static string FindProperty(IProjection projection)
+ {
+ if (!(projection is PropertyProjection))
+ throw new Exception("Cannot determine property for " + projection.ToString());
+
+ return ((PropertyProjection)projection).PropertyName;
+ }
+
}
}
Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs 2011-05-29 02:36:57 UTC (rev 5878)
+++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs 2011-05-29 18:06:21 UTC (rev 5879)
@@ -593,6 +593,19 @@
using (ISession s = OpenSession())
{
+ var persons =
+ s.QueryOver<Person>()
+ .Where(p => p.BirthDate.YearPart().IsIn(new [] { 2008, 2009 }))
+ .OrderBy(p => p.Name).Asc
+ .List();
+
+ persons.Count.Should().Be(2);
+ persons[0].Name.Should().Be("p1");
+ persons[1].Name.Should().Be("p2");
+ }
+
+ using (ISession s = OpenSession())
+ {
var yearOfBirth =
s.QueryOver<Person>()
.Where(p => p.Name == "p2")
@@ -605,6 +618,17 @@
using (ISession s = OpenSession())
{
+ var avgYear =
+ s.QueryOver<Person>()
+ .SelectList(list => list.SelectAvg(p => p.BirthDate.YearPart()))
+ .SingleOrDefault<object>();
+
+ avgYear.GetType().Should().Be(typeof(double));
+ string.Format("{0:0}", avgYear).Should().Be("2008");
+ }
+
+ using (ISession s = OpenSession())
+ {
var sqrtOfAge =
s.QueryOver<Person>()
.Where(p => p.Name == "p1")
Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/ProjectionsFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/ProjectionsFixture.cs 2011-05-29 02:36:57 UTC (rev 5878)
+++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/ProjectionsFixture.cs 2011-05-29 18:06:21 UTC (rev 5879)
@@ -39,24 +39,24 @@
ICriteria expected =
CreateTestCriteria(typeof(Person), "personAlias")
.SetProjection(Projections.ProjectionList()
- .Add(Projections.Alias(Projections.Avg("Age"), "personAgeProjectionAlias"))
- .Add(Projections.Avg("Age"), "personAgeProjectionAlias")
- .Add(Projections.Avg("personAlias.Age"), "Age")
- .Add(Projections.Count("Age"))
- .Add(Projections.Count("personAlias.Age"))
+ .Add(Projections.Alias(Projections.Avg(Projections.Property("Age")), "personAgeProjectionAlias"))
+ .Add(Projections.Avg(Projections.Property("Age")), "personAgeProjectionAlias")
+ .Add(Projections.Avg(Projections.Property("personAlias.Age")), "Age")
+ .Add(Projections.Count(Projections.Property("Age")))
+ .Add(Projections.Count(Projections.Property("personAlias.Age")))
.Add(Projections.CountDistinct("Age"))
.Add(Projections.CountDistinct("personAlias.Age"))
.Add(Projections.GroupProperty("Age"))
.Add(Projections.GroupProperty("personAlias.Age"))
- .Add(Projections.Max("Age"))
- .Add(Projections.Max("personAlias.Age"))
- .Add(Projections.Min("Age"))
- .Add(Projections.Min("personAlias.Age"))
+ .Add(Projections.Max(Projections.Property("Age")))
+ .Add(Projections.Max(Projections.Property("personAlias.Age")))
+ .Add(Projections.Min(Projections.Property("Age")))
+ .Add(Projections.Min(Projections.Property("personAlias.Age")))
.Add(Projections.Property("Age"))
.Add(Projections.Property("personAlias.Age"))
.Add(Projections.SubQuery(DetachedCriteriaAge))
- .Add(Projections.Sum("Age"))
- .Add(Projections.Sum("personAlias.Age")));
+ .Add(Projections.Sum(Projections.Property("Age")))
+ .Add(Projections.Sum(Projections.Property("personAlias.Age"))));
Person personAlias = null;
Person personAgeProjectionAlias = null;
@@ -91,24 +91,24 @@
ICriteria expected =
CreateTestCriteria(typeof(Person), "personAlias")
.SetProjection(Projections.ProjectionList()
- .Add(Projections.Alias(Projections.Avg("Age"), "personAgeProjectionAlias"))
+ .Add(Projections.Alias(Projections.Avg(Projections.Property("Age")), "personAgeProjectionAlias"))
.Add(Projections.Avg("Age"))
- .Add(Projections.Avg("personAlias.Age"), "Age")
- .Add(Projections.Count("Age"))
- .Add(Projections.Count("personAlias.Age"))
+ .Add(Projections.Avg(Projections.Property("personAlias.Age")), "Age")
+ .Add(Projections.Count(Projections.Property("Age")))
+ .Add(Projections.Count(Projections.Property("personAlias.Age")))
.Add(Projections.CountDistinct("Age"))
.Add(Projections.CountDistinct("personAlias.Age"))
.Add(Projections.GroupProperty("Age"))
.Add(Projections.GroupProperty("personAlias.Age"))
- .Add(Projections.Max("Age"))
- .Add(Projections.Max("personAlias.Age"))
- .Add(Projections.Min("Age"))
- .Add(Projections.Min("personAlias.Age"))
+ .Add(Projections.Max(Projections.Property("Age")))
+ .Add(Projections.Max(Projections.Property("personAlias.Age")))
+ .Add(Projections.Min(Projections.Property("Age")))
+ .Add(Projections.Min(Projections.Property("personAlias.Age")))
.Add(Projections.Property("Age"))
.Add(Projections.Property("personAlias.Age"))
.Add(Projections.SubQuery(DetachedCriteriaAge))
- .Add(Projections.Sum("Age"))
- .Add(Projections.Sum("personAlias.Age")));
+ .Add(Projections.Sum(Projections.Property("Age")))
+ .Add(Projections.Sum(Projections.Property("personAlias.Age"))));
Person personAlias = null;
Person personAgeProjectionAlias = null;
Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs 2011-05-29 02:36:57 UTC (rev 5878)
+++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs 2011-05-29 18:06:21 UTC (rev 5879)
@@ -151,7 +151,7 @@
CreateTestCriteria(typeof(Person), "personAlias")
.Add(Restrictions.Or(
Restrictions.Not(Restrictions.Eq(Projections.Property("Name"), "test name")),
- Restrictions.Not(Restrictions.Like("personAlias.Name", "%test%"))));
+ Restrictions.Not(Restrictions.Like(Projections.Property("personAlias.Name"), "%test%"))));
Person personAlias = null;
IQueryOver<Person> actual =
Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/RestrictionsFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/RestrictionsFixture.cs 2011-05-29 02:36:57 UTC (rev 5878)
+++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/RestrictionsFixture.cs 2011-05-29 18:06:21 UTC (rev 5879)
@@ -38,22 +38,22 @@
{
ICriteria expected =
CreateTestCriteria(typeof(Person), "personAlias")
- .Add(Restrictions.Between("Age", 18, 65))
- .Add(Restrictions.Between("personAlias.Age", 18, 65))
- .Add(Restrictions.Not(Restrictions.Between("personAlias.Age", 10, 20)))
- .Add(!Restrictions.In("Name", new string[] { "name4" }))
- .Add(Restrictions.In("Name", new string[] { "name1", "name2", "name3" }))
- .Add(Restrictions.In("Name", new ArrayList() { "name1", "name2", "name3" }))
- .Add(Restrictions.InG<int>("Age", new int[] { 1, 2, 3 }))
- .Add(Restrictions.InsensitiveLike("Name", "test"))
- .Add(Restrictions.InsensitiveLike("Name", "tEsT", MatchMode.Anywhere))
+ .Add(Restrictions.Between(Projections.Property("Age"), 18, 65))
+ .Add(Restrictions.Between(Projections.Property("personAlias.Age"), 18, 65))
+ .Add(Restrictions.Not(Restrictions.Between(Projections.Property("personAlias.Age"), 10, 20)))
+ .Add(!Restrictions.In(Projections.Property("Name"), new string[] { "name4" }))
+ .Add(Restrictions.In(Projections.Property("Name"), new string[] { "name1", "name2", "name3" }))
+ .Add(Restrictions.In(Projections.Property("Name"), new ArrayList() { "name1", "name2", "name3" }))
+ .Add(Restrictions.InG<int>(Projections.Property("Age"), new int[] { 1, 2, 3 }))
+ .Add(Restrictions.InsensitiveLike(Projections.Property("Name"), "test"))
+ .Add(Restrictions.InsensitiveLike(Projections.Property("Name"), "tEsT", MatchMode.Anywhere))
.Add(Restrictions.IsEmpty("Children"))
.Add(Restrictions.Not(Restrictions.IsEmpty("Children")))
.Add(Restrictions.IsNotEmpty("Children"))
- .Add(Restrictions.IsNotNull("Name"))
- .Add(Restrictions.IsNull("Name"))
- .Add(Restrictions.Like("Name", "%test%"))
- .Add(Restrictions.Like("Name", "test", MatchMode.Anywhere))
+ .Add(Restrictions.IsNotNull(Projections.Property("Name")))
+ .Add(Restrictions.IsNull(Projections.Property("Name")))
+ .Add(Restrictions.Like(Projections.Property("Name"), "%test%"))
+ .Add(Restrictions.Like(Projections.Property("Name"), "test", MatchMode.Anywhere))
.Add(Restrictions.Like("Name", "test", MatchMode.Anywhere, '?'))
.Add(Restrictions.NaturalId()
.Set("Name", "my name")
@@ -116,22 +116,22 @@
{
ICriteria expected =
CreateTestCriteria(typeof(Person), "personAlias")
- .Add(Restrictions.Between("Age", 18, 65))
- .Add(Restrictions.Between("personAlias.Age", 18, 65))
- .Add(Restrictions.Not(Restrictions.Between("Age", 18, 65)))
- .Add(Restrictions.In("Name", new string[] { "name1", "name2", "name3" }))
- .Add(Restrictions.In("personAlias.Name", new ArrayList() { "name1", "name2", "name3" }))
- .Add(Restrictions.InG<int>("Age", new int[] { 1, 2, 3 }))
- .Add(Restrictions.InsensitiveLike("Name", "test"))
- .Add(Restrictions.InsensitiveLike("Name", "tEsT", MatchMode.Anywhere))
+ .Add(Restrictions.Between(Projections.Property("Age"), 18, 65))
+ .Add(Restrictions.Between(Projections.Property("personAlias.Age"), 18, 65))
+ .Add(Restrictions.Not(Restrictions.Between(Projections.Property("Age"), 18, 65)))
+ .Add(Restrictions.In(Projections.Property("Name"), new string[] { "name1", "name2", "name3" }))
+ .Add(Restrictions.In(Projections.Property("personAlias.Name"), new ArrayList() { "name1", "name2", "name3" }))
+ .Add(Restrictions.InG<int>(Projections.Property("Age"), new int[] { 1, 2, 3 }))
+ .Add(Restrictions.InsensitiveLike(Projections.Property("Name"), "test"))
+ .Add(Restrictions.InsensitiveLike(Projections.Property("Name"), "tEsT", MatchMode.Anywhere))
.Add(Restrictions.IsEmpty("Children"))
.Add(Restrictions.IsNotEmpty("Children"))
- .Add(Restrictions.IsNotNull("Name"))
- .Add(Restrictions.IsNull("Name"))
- .Add(Restrictions.Like("Name", "%test%"))
- .Add(Restrictions.Like("Name", "test", MatchMode.Anywhere))
+ .Add(Restrictions.IsNotNull(Projections.Property("Name")))
+ .Add(Restrictions.IsNull(Projections.Property("Name")))
+ .Add(Restrictions.Like(Projections.Property("Name"), "%test%"))
+ .Add(Restrictions.Like(Projections.Property("Name"), "test", MatchMode.Anywhere))
.Add(Restrictions.Like("Name", "test", MatchMode.Anywhere, '?'))
- .Add(Restrictions.Not(Restrictions.Like("Name", "%test%")));
+ .Add(Restrictions.Not(Restrictions.Like(Projections.Property("Name"), "%test%")));
Person personAlias = null;
var actual =
@@ -161,10 +161,10 @@
{
DetachedCriteria expected =
DetachedCriteria.For<Person>("personAlias")
- .Add(Restrictions.Between("Age", 18, 65))
- .Add(Restrictions.Between("personAlias.Age", 18, 65))
- .Add(Restrictions.In("Name", new string[] { "name1", "name2", "name3" }))
- .Add(Restrictions.In("personAlias.Name", new ArrayList() { "name1", "name2", "name3" }));
+ .Add(Restrictions.Between(Projections.Property("Age"), 18, 65))
+ .Add(Restrictions.Between(Projections.Property("personAlias.Age"), 18, 65))
+ .Add(Restrictions.In(Projections.Property("Name"), new string[] { "name1", "name2", "name3" }))
+ .Add(Restrictions.In(Projections.Property("personAlias.Name"), new ArrayList() { "name1", "name2", "name3" }));
Person personAlias = null;
QueryOver<Person> actual =
@@ -232,14 +232,14 @@
{
ICriteria expected =
CreateTestCriteria(typeof(Person))
- .Add(Restrictions.Like("Name", "%test%"))
- .Add(Restrictions.Like("Name", "test", MatchMode.End))
+ .Add(Restrictions.Like(Projections.Property("Name"), "%test%"))
+ .Add(Restrictions.Like(Projections.Property("Name"), "test", MatchMode.End))
.Add(Restrictions.Like("Name", "test", MatchMode.Start, '?'))
- .Add(Restrictions.InsensitiveLike("Name", "%test%"))
- .Add(Restrictions.InsensitiveLike("Name", "test", MatchMode.Anywhere))
- .Add(Restrictions.In("Name", new string[] { "name1", "name2" }))
- .Add(Restrictions.In("Name", new ArrayList() { "name3", "name4" }))
- .Add(Restrictions.Between("Age", 10, 20));
+ .Add(Restrictions.InsensitiveLike(Projections.Property("Name"), "%test%"))
+ .Add(Restrictions.InsensitiveLike(Projections.Property("Name"), "test", MatchMode.Anywhere))
+ .Add(Restrictions.In(Projections.Property("Name"), new string[] { "name1", "name2" }))
+ .Add(Restrictions.In(Projections.Property("Name"), new ArrayList() { "name3", "name4" }))
+ .Add(Restrictions.Between(Projections.Property("Age"), 10, 20));
IQueryOver<Person> actual =
CreateTestQueryOver<Person>()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|