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