|
From: <fab...@us...> - 2011-05-20 15:00:17
|
Revision: 5843
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5843&view=rev
Author: fabiomaulo
Date: 2011-05-20 15:00:09 +0000 (Fri, 20 May 2011)
Log Message:
-----------
Fix NH-2701
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Linq/ResultTransformer.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/LinqFutureFixture.cs
Modified: trunk/nhibernate/src/NHibernate/Linq/ResultTransformer.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Linq/ResultTransformer.cs 2011-05-20 14:31:58 UTC (rev 5842)
+++ trunk/nhibernate/src/NHibernate/Linq/ResultTransformer.cs 2011-05-20 15:00:09 UTC (rev 5843)
@@ -1,5 +1,6 @@
using System;
using System.Collections;
+using System.Collections.Generic;
using System.Linq;
using NHibernate.Transform;
@@ -31,30 +32,25 @@
return collection;
}
- object transformResult = collection;
-
+ IEnumerable<object> toTransform;
if (collection.Count > 0 && collection[0] is object[])
{
- if (((object[]) collection[0]).Length != 1)
+ if (((object[])collection[0]).Length != 1)
{
// We only expect single items
throw new NotSupportedException();
}
- transformResult = _listTransformation.DynamicInvoke(collection.Cast<object[]>().Select(o => o[0]));
+ toTransform = collection.Cast<object[]>().Select(o => o[0]);
}
else
{
- transformResult = _listTransformation.DynamicInvoke(collection);
+ toTransform = collection.Cast<object>().ToList();
}
+ object transformResult = _listTransformation.DynamicInvoke(toTransform);
- if (transformResult is IList)
- {
- return (IList) transformResult;
- }
-
- var list = new ArrayList {transformResult};
- return list;
+ var resultList = transformResult as IList;
+ return resultList ?? new List<object> { transformResult };
}
#endregion
Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/LinqFutureFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/LinqFutureFixture.cs 2011-05-20 14:31:58 UTC (rev 5842)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/LinqFutureFixture.cs 2011-05-20 15:00:09 UTC (rev 5843)
@@ -42,7 +42,56 @@
tx.Commit();
}
}
- [Test]
+
+ [Test]
+ public void CanUseSkipAndFetchManyWithToFuture()
+ {
+ using (var s = sessions.OpenSession())
+ using (var tx = s.BeginTransaction())
+ {
+ var p1 = new Person {Name = "Parent"};
+ var p2 = new Person {Parent = p1, Name = "Child"};
+ p1.Children.Add(p2);
+ s.Save(p1);
+ s.Save(p2);
+ tx.Commit();
+
+ s.Clear(); // we don't want caching
+ }
+
+ using (var s = sessions.OpenSession())
+ {
+ IgnoreThisTestIfMultipleQueriesArentSupportedByDriver();
+
+ var persons10 = s.Query<Person>()
+ .FetchMany(p => p.Children)
+ .Skip(5)
+ .Take(10)
+ .ToFuture();
+
+ var persons5 = s.Query<Person>()
+ .ToFuture();
+
+ using (var logSpy = new SqlLogSpy())
+ {
+ foreach (var person in persons5) {}
+
+ foreach (var person in persons10) {}
+
+ var events = logSpy.Appender.GetEvents();
+ Assert.AreEqual(1, events.Length);
+ }
+ }
+
+ using (ISession s = OpenSession())
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ s.Delete("from Person");
+ tx.Commit();
+ }
+ }
+
+ [Test]
public void CanUseFutureQuery()
{
using (var s = sessions.OpenSession())
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|