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