From: <fab...@us...> - 2010-12-12 13:18:32
|
Revision: 5309 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5309&view=rev Author: fabiomaulo Date: 2010-12-12 13:18:26 +0000 (Sun, 12 Dec 2010) Log Message: ----------- Fix NH-2211 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs trunk/nhibernate/src/NHibernate/Impl/SessionImpl.cs trunk/nhibernate/src/NHibernate/Impl/StatelessSessionImpl.cs trunk/nhibernate/src/NHibernate/Linq/LinqExtensionMethods.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/Linq/StatelessSessionQueringTest.cs Modified: trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs 2010-12-12 12:47:00 UTC (rev 5308) +++ trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs 2010-12-12 13:18:26 UTC (rev 5309) @@ -82,8 +82,18 @@ public abstract void CloseSessionFromDistributedTransaction(); public abstract IList List(string query, QueryParameters parameters); public abstract void List(string query, QueryParameters parameters, IList results); - public abstract IList List(IQueryExpression queryExpression, QueryParameters parameters); - public abstract void List(IQueryExpression queryExpression, QueryParameters queryParameters, IList results); + + public virtual IList List(IQueryExpression queryExpression, QueryParameters parameters) + { + IList results = (IList)typeof(List<>).MakeGenericType(queryExpression.Type) + .GetConstructor(System.Type.EmptyTypes) + .Invoke(null); + + List(queryExpression, parameters, results); + return results; + } + + public abstract void List(IQueryExpression queryExpression, QueryParameters queryParameters, IList results); public abstract IList<T> List<T>(string query, QueryParameters queryParameters); public abstract IList<T> List<T>(CriteriaImpl criteria); public abstract void List(CriteriaImpl criteria, IList results); Modified: trunk/nhibernate/src/NHibernate/Impl/SessionImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/SessionImpl.cs 2010-12-12 12:47:00 UTC (rev 5308) +++ trunk/nhibernate/src/NHibernate/Impl/SessionImpl.cs 2010-12-12 13:18:26 UTC (rev 5309) @@ -625,17 +625,6 @@ } } - public override IList List(IQueryExpression queryExpression, QueryParameters parameters) - { - IList results = (IList) typeof(List<>).MakeGenericType(queryExpression.Type) - .GetConstructor(System.Type.EmptyTypes) - .Invoke(null); - - List(queryExpression, parameters, results); - - return results; - } - public override void List(IQueryExpression queryExpression, QueryParameters queryParameters, IList results) { using (new SessionIdLoggingContext(SessionId)) Modified: trunk/nhibernate/src/NHibernate/Impl/StatelessSessionImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/StatelessSessionImpl.cs 2010-12-12 12:47:00 UTC (rev 5308) +++ trunk/nhibernate/src/NHibernate/Impl/StatelessSessionImpl.cs 2010-12-12 13:18:26 UTC (rev 5309) @@ -140,14 +140,35 @@ } } - public override IList List(IQueryExpression queryExpression, QueryParameters parameters) + public override void List(IQueryExpression queryExpression, QueryParameters queryParameters, IList results) { - throw new System.NotImplementedException(); - } + using (new SessionIdLoggingContext(SessionId)) + { + CheckAndUpdateSessionStatus(); + queryParameters.ValidateParameters(); + var plan = GetHQLQueryPlan(queryExpression, false); - public override void List(IQueryExpression queryExpression, QueryParameters queryParameters, IList results) - { - throw new System.NotImplementedException(); + bool success = false; + try + { + plan.PerformList(queryParameters, this, results); + success = true; + } + catch (HibernateException) + { + // Do not call Convert on HibernateExceptions + throw; + } + catch (Exception e) + { + throw Convert(e, "Could not execute query"); + } + finally + { + AfterOperation(success); + } + temporaryPersistenceContext.Clear(); + } } public override IList<T> List<T>(string query, QueryParameters queryParameters) Modified: trunk/nhibernate/src/NHibernate/Linq/LinqExtensionMethods.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Linq/LinqExtensionMethods.cs 2010-12-12 12:47:00 UTC (rev 5308) +++ trunk/nhibernate/src/NHibernate/Linq/LinqExtensionMethods.cs 2010-12-12 13:18:26 UTC (rev 5309) @@ -14,6 +14,11 @@ return new NhQueryable<T>(session as ISessionImplementor); } + public static IQueryable<T> Query<T>(this IStatelessSession session) + { + return new NhQueryable<T>(session as ISessionImplementor); + } + public static IQueryable<T> Cacheable<T>(this IQueryable<T> query) { var method = ReflectionHelper.GetMethodDefinition(() => Cacheable<object>(null)).MakeGenericMethod(typeof(T)); Added: trunk/nhibernate/src/NHibernate.Test/Linq/StatelessSessionQueringTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Linq/StatelessSessionQueringTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Linq/StatelessSessionQueringTest.cs 2010-12-12 13:18:26 UTC (rev 5309) @@ -0,0 +1,33 @@ +using System.Linq; +using System.Text; +using NHibernate.DomainModel.Northwind.Entities; +using NUnit.Framework; +using NHibernate.Linq; +using SharpTestsEx; + +namespace NHibernate.Test.Linq +{ + public class StatelessSessionQueringTest : LinqTestCase + { + [Test] + public void WhenQueryThroughStatelessSessionThenDoesNotThrows() + { + using (var statelessSession = Sfi.OpenStatelessSession()) + { + var query = statelessSession.Query<Customer>(); + query.Executing(q => q.ToList()).NotThrows(); + } + } + + [Test] + public void AggregateWithStartsWith() + { + using (IStatelessSession statelessSession = Sfi.OpenStatelessSession()) + { + StringBuilder query = (from c in statelessSession.Query<Customer>() where c.CustomerId.StartsWith("A") select c.CustomerId) + .Aggregate(new StringBuilder(), (sb, id) => sb.Append(id).Append(",")); + query.ToString().Should().Be("ALFKI,ANATR,ANTON,AROUT,"); + } + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-12-12 12:47:00 UTC (rev 5308) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-12-12 13:18:26 UTC (rev 5309) @@ -438,6 +438,7 @@ <Compile Include="Linq\QueryCacheableTests.cs" /> <Compile Include="Linq\QueryReuseTests.cs" /> <Compile Include="Linq\ReadonlyTestCase.cs" /> + <Compile Include="Linq\StatelessSessionQueringTest.cs" /> <Compile Include="Logging\Log4NetLoggerTest.cs" /> <Compile Include="Logging\LoggerProviderTest.cs" /> <Compile Include="NHSpecificTest\EntityNameAndCompositeId\Fixture.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |