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