|
From: <ric...@us...> - 2010-07-22 20:59:48
|
Revision: 5050
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5050&view=rev
Author: ricbrown
Date: 2010-07-22 20:59:41 +0000 (Thu, 22 Jul 2010)
Log Message:
-----------
Added missing .Not to stand alone lambda restriction.
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Criterion/Lambda/LambdaRestrictionBuilder.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 2010-07-22 16:54:35 UTC (rev 5049)
+++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/LambdaRestrictionBuilder.cs 2010-07-22 20:59:41 UTC (rev 5050)
@@ -16,21 +16,35 @@
{
private string propertyName;
private object lo;
+ private bool isNot;
- public LambdaBetweenBuilder(string propertyName, object lo)
+ public LambdaBetweenBuilder(string propertyName, object lo, bool isNot)
{
this.propertyName = propertyName;
this.lo = lo;
+ this.isNot = isNot;
}
public AbstractCriterion And(object hi)
{
+ if (isNot)
+ return Restrictions.Not(Restrictions.Between(propertyName, lo, hi));
+
return Restrictions.Between(propertyName, lo, hi);
}
}
private string propertyName;
+ private bool isNot;
+ private ICriterion Process(ICriterion criterion)
+ {
+ if (isNot)
+ return Restrictions.Not(criterion);
+
+ return criterion;
+ }
+
/// <summary>
/// Constructed with property name
/// </summary>
@@ -44,103 +58,112 @@
/// </summary>
public LambdaBetweenBuilder IsBetween(object lo)
{
- return new LambdaBetweenBuilder(propertyName, lo);
+ return new LambdaBetweenBuilder(propertyName, lo, isNot);
}
+ public LambdaRestrictionBuilder Not
+ {
+ get
+ {
+ isNot = !isNot;
+ return this;
+ }
+ }
+
/// <summary>
/// Apply an "in" constraint to the named property
/// </summary>
- public AbstractCriterion IsIn(ICollection values)
+ public ICriterion IsIn(ICollection values)
{
- return Restrictions.In(propertyName, values);
+ return Process(Restrictions.In(propertyName, values));
}
/// <summary>
/// Apply an "in" constraint to the named property
/// </summary>
- public AbstractCriterion IsIn(object[] values)
+ public ICriterion IsIn(object[] values)
{
- return Restrictions.In(propertyName, values);
+ return Process(Restrictions.In(propertyName, values));
}
/// <summary>
/// Apply an "in" constraint to the named property
/// </summary>
- public AbstractCriterion IsInG<T>(ICollection<T> values)
+ public ICriterion IsInG<T>(ICollection<T> values)
{
- return Restrictions.InG(propertyName, values);
+ return Process(Restrictions.InG(propertyName, values));
}
/// <summary>
/// A case-insensitive "like", similar to Postgres "ilike" operator
/// </summary>
- public AbstractCriterion IsInsensitiveLike(object value)
+ public ICriterion IsInsensitiveLike(object value)
{
- return Restrictions.InsensitiveLike(propertyName, value);
+ return Process(Restrictions.InsensitiveLike(propertyName, value));
}
/// <summary>
/// A case-insensitive "like", similar to Postgres "ilike" operator
/// </summary>
- public AbstractCriterion IsInsensitiveLike(string value, MatchMode matchMode)
+ public ICriterion IsInsensitiveLike(string value, MatchMode matchMode)
{
- return Restrictions.InsensitiveLike(propertyName, value, matchMode);
+ return Process(Restrictions.InsensitiveLike(propertyName, value, matchMode));
}
/// <summary>
/// Apply an "is empty" constraint to the named property
/// </summary>
- public AbstractEmptinessExpression IsEmpty
+ public ICriterion IsEmpty
{
- get { return Restrictions.IsEmpty(propertyName); }
+ get { return Process(Restrictions.IsEmpty(propertyName)); }
}
/// <summary>
/// Apply a "not is empty" constraint to the named property
/// </summary>
- public AbstractEmptinessExpression IsNotEmpty
+ public ICriterion IsNotEmpty
{
- get { return Restrictions.IsNotEmpty(propertyName); }
+ get { return Process(Restrictions.IsNotEmpty(propertyName)); }
}
/// <summary>
/// Apply an "is null" constraint to the named property
/// </summary>
- public AbstractCriterion IsNull
+ public ICriterion IsNull
{
- get { return Restrictions.IsNull(propertyName); }
+ get { return Process(Restrictions.IsNull(propertyName)); }
}
/// <summary>
/// Apply an "not is null" constraint to the named property
/// </summary>
- public AbstractCriterion IsNotNull
+ public ICriterion IsNotNull
{
- get { return Restrictions.IsNotNull(propertyName); }
+ get { return Process(Restrictions.IsNotNull(propertyName)); }
}
/// <summary>
/// Apply a "like" constraint to the named property
/// </summary>
- public SimpleExpression IsLike(object value)
+ public ICriterion IsLike(object value)
{
- return Restrictions.Like(propertyName, value);
+ return Process(Restrictions.Like(propertyName, value));
}
/// <summary>
/// Apply a "like" constraint to the named property
/// </summary>
- public SimpleExpression IsLike(string value, MatchMode matchMode)
+ public ICriterion IsLike(string value, MatchMode matchMode)
{
- return Restrictions.Like(propertyName, value, matchMode);
+ return Process(Restrictions.Like(propertyName, value, matchMode));
}
/// <summary>
/// Apply a "like" constraint to the named property
/// </summary>
- public AbstractCriterion IsLike(string value, MatchMode matchMode, char? escapeChar)
+ public ICriterion IsLike(string value, MatchMode matchMode, char? escapeChar)
{
- return Restrictions.Like(propertyName, value, matchMode, escapeChar);
+ return Process(Restrictions.Like(propertyName, value, matchMode, escapeChar));
}
}
Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/RestrictionsFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/RestrictionsFixture.cs 2010-07-22 16:54:35 UTC (rev 5049)
+++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/RestrictionsFixture.cs 2010-07-22 20:59:41 UTC (rev 5050)
@@ -40,12 +40,14 @@
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[] { "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.IsEmpty("Children"))
+ .Add(Restrictions.Not(Restrictions.IsEmpty("Children")))
.Add(Restrictions.IsNotEmpty("Children"))
.Add(Restrictions.IsNotNull("Name"))
.Add(Restrictions.IsNull("Name"))
@@ -61,12 +63,14 @@
CreateTestQueryOver<Person>(() => personAlias)
.Where(Restrictions.On<Person>(p => p.Age).IsBetween(18).And(65))
.And(Restrictions.On(() => personAlias.Age).IsBetween(18).And(65))
+ .And(Restrictions.On(() => personAlias.Age).Not.IsBetween(10).And(20))
.And(Restrictions.On<Person>(p => p.Name).IsIn(new string[] { "name1", "name2", "name3" }))
.And(Restrictions.On<Person>(p => p.Name).IsIn(new ArrayList() { "name1", "name2", "name3" }))
.And(Restrictions.On<Person>(p => p.Age).IsInG<int>(new int[] { 1, 2, 3 }))
.And(Restrictions.On<Person>(p => p.Name).IsInsensitiveLike("test"))
.And(Restrictions.On<Person>(p => p.Name).IsInsensitiveLike("tEsT", MatchMode.Anywhere))
.And(Restrictions.On<Person>(p => p.Children).IsEmpty)
+ .And(Restrictions.On<Person>(p => p.Children).Not.IsEmpty)
.And(Restrictions.On<Person>(p => p.Children).IsNotEmpty)
.And(Restrictions.On<Person>(p => p.Name).IsNotNull)
.And(Restrictions.On<Person>(p => p.Name).IsNull)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|