|
From: <ric...@us...> - 2009-11-04 10:55:22
|
Revision: 4818
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4818&view=rev
Author: ricbrown
Date: 2009-11-04 10:55:10 +0000 (Wed, 04 Nov 2009)
Log Message:
-----------
Added QueryOver<T> constructor using alias.
Protected internally used constructors.
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs
trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/LambdaFixtureBase.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-11-03 16:11:25 UTC (rev 4817)
+++ trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs 2009-11-04 10:55:10 UTC (rev 4818)
@@ -25,13 +25,20 @@
_criteria = _impl;
}
- public QueryOver(CriteriaImpl impl)
+ public QueryOver(Expression<Func<T>> alias)
{
+ string aliasPath = ExpressionProcessor.FindMemberExpression(alias.Body);
+ _impl = new CriteriaImpl(typeof(T), aliasPath, null);
+ _criteria = _impl;
+ }
+
+ protected internal QueryOver(CriteriaImpl impl)
+ {
_impl = impl;
_criteria = impl;
}
- public QueryOver(CriteriaImpl rootImpl, ICriteria criteria)
+ protected internal QueryOver(CriteriaImpl rootImpl, ICriteria criteria)
{
_impl = rootImpl;
_criteria = criteria;
Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/LambdaFixtureBase.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/LambdaFixtureBase.cs 2009-11-03 16:11:25 UTC (rev 4817)
+++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/LambdaFixtureBase.cs 2009-11-04 10:55:10 UTC (rev 4818)
@@ -32,13 +32,17 @@
protected IQueryOver<T> CreateTestQueryOver<T>()
{
- return new QueryOver<T>(new CriteriaImpl(typeof(T), null));
+ return (IQueryOver<T>)
+ typeof(QueryOver<T>).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new System.Type[] { typeof(CriteriaImpl) }, null)
+ .Invoke(new object[] { new CriteriaImpl(typeof(T), null) });
}
protected IQueryOver<T> CreateTestQueryOver<T>(Expression<Func<object>> alias)
{
string aliasContainer = ExpressionProcessor.FindMemberExpression(alias.Body);
- return new QueryOver<T>(new CriteriaImpl(typeof(T), aliasContainer, null));
+ return (IQueryOver<T>)
+ typeof(QueryOver<T>).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new System.Type[] { typeof(CriteriaImpl) }, null)
+ .Invoke(new object[] { new CriteriaImpl(typeof(T), aliasContainer, null) });
}
protected void AssertCriteriaAreEqual(ICriteria expected, ICriteria actual)
@@ -56,6 +60,20 @@
AssertObjectsAreEqual(expected, ((QueryOver<T>)actual).UnderlyingCriteria);
}
+ protected void AssertCriteriaAreEqual<T>(DetachedCriteria expected, QueryOver<T> actual)
+ {
+ ICriteria criteria = actual.UnderlyingCriteria;
+ CriteriaImpl criteriaImpl = (CriteriaImpl)
+ typeof(QueryOver<T>).GetField("_impl", BindingFlags.NonPublic | BindingFlags.Instance)
+ .GetValue(actual);
+
+ DetachedCriteria actualDetached = (DetachedCriteria)
+ typeof(DetachedCriteria).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new System.Type[] { typeof(CriteriaImpl), typeof(ICriteria) }, null)
+ .Invoke(new object[] { criteriaImpl, criteria });
+
+ AssertObjectsAreEqual(expected, actualDetached);
+ }
+
private void AssertDictionariesAreEqual(IDictionary expected, IDictionary actual)
{
Assert.AreEqual(expected.Keys.Count, actual.Keys.Count, _fieldPath.Peek() + ".Count");
Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs 2009-11-03 16:11:25 UTC (rev 4817)
+++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs 2009-11-04 10:55:10 UTC (rev 4818)
@@ -447,6 +447,21 @@
AssertCriteriaAreEqual(expected, actual);
}
+ [Test]
+ public void DetachedQueryOver()
+ {
+ DetachedCriteria expected =
+ DetachedCriteria.For<Person>("personAlias")
+ .Add(Restrictions.Eq("personAlias.Name", "test name"));
+
+ Person personAlias = null;
+ QueryOver<Person> actual =
+ new QueryOver<Person>(() => personAlias)
+ .Where(() => personAlias.Name == "test name");
+
+ AssertCriteriaAreEqual(expected, actual);
+ }
+
}
}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|