From: <fab...@us...> - 2011-05-18 17:51:16
|
Revision: 5838 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5838&view=rev Author: fabiomaulo Date: 2011-05-18 17:51:09 +0000 (Wed, 18 May 2011) Log Message: ----------- Fixed issue reported in dev-list regarding r5793 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaLoader.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2673/CachingWithTrasformerTests.cs Modified: trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaLoader.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaLoader.cs 2011-05-17 23:07:11 UTC (rev 5837) +++ trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaLoader.cs 2011-05-18 17:51:09 UTC (rev 5838) @@ -75,7 +75,7 @@ return List(session, translator.GetQueryParameters(), querySpaces, resultTypes); } - protected override object GetResultColumnOrRow(object[] row, IResultTransformer resultTransformer, IDataReader rs, + protected override object GetResultColumnOrRow(object[] row, IResultTransformer customResultTransformer, IDataReader rs, ISessionImplementor session) { object[] result; @@ -107,9 +107,10 @@ result = row; } - if (resultTransformer == null && result.Length == 1) + if (customResultTransformer == null) { - return result[0]; + // apply the defaut transformer of criteria aka RootEntityResultTransformer + return result[result.Length - 1]; } return result; } @@ -164,20 +165,20 @@ return lockModesArray; } - public override IList GetResultList(IList results, IResultTransformer resultTransformer) + public override IList GetResultList(IList results, IResultTransformer customResultTransformer) { - var transformer = resultTransformer ?? CriteriaSpecification.RootEntity; + if (customResultTransformer == null) + { + // apply the defaut transformer of criteria aka RootEntityResultTransformer + return results; + } for (int i = 0; i < results.Count; i++) { - var row = results[i] as object[]; - if(row == null) - { - row = new object[] { results[i] }; - } - object result = transformer.TransformTuple(row, translator.HasProjection ? translator.ProjectedAliases : userAliases); + var row = results[i] as object[] ?? new object[] { results[i] }; + object result = customResultTransformer.TransformTuple(row, translator.HasProjection ? translator.ProjectedAliases : userAliases); results[i] = result; } - return transformer.TransformList(results); + return customResultTransformer.TransformList(results); } } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2673/CachingWithTrasformerTests.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2673/CachingWithTrasformerTests.cs 2011-05-17 23:07:11 UTC (rev 5837) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2673/CachingWithTrasformerTests.cs 2011-05-18 17:51:09 UTC (rev 5838) @@ -1,5 +1,6 @@ using System; using System.Collections; +using System.Linq; using NHibernate.Cache; using NHibernate.Cfg; using NHibernate.Cfg.MappingSchema; @@ -153,5 +154,57 @@ } } } + + [Test] + public void WhenEagerLoadingWithCriteriaThenNotThrows() + { + // reported in dev-list instead on JIRA + using (new Scenario(Sfi)) + { + using (var session = OpenSession()) + using (var tx = session.BeginTransaction()) + { + var query = session.CreateCriteria<Blog>() + .SetFetchMode("Posts", FetchMode.Eager) + .SetCacheable(true); + query.Executing(q => q.List<Blog>()).NotThrows(); + tx.Commit(); + } + } + } + + [Test] + public void WhenEagerLoadingWithMultiCriteriaThenNotThrows() + { + using (new Scenario(Sfi)) + { + using (var session = OpenSession()) + using (var tx = session.BeginTransaction()) + { + var query = session.CreateCriteria<Blog>() + .SetFetchMode("Posts", FetchMode.Eager) + .SetCacheable(true); + query.Executing(q => q.Future<Blog>().ToList()).NotThrows(); + tx.Commit(); + } + } + } + + [Test] + public void WhenEagerLoadingWithHqlThenNotThrows() + { + using (new Scenario(Sfi)) + { + using (var session = OpenSession()) + using (var tx = session.BeginTransaction()) + { + var query = session.CreateQuery("select b from Blog b join fetch b.Posts where b.Author = : author") + .SetString("author", "Gabriel") + .SetCacheable(true); + query.Executing(q => q.List<Blog>()).NotThrows(); + tx.Commit(); + } + } + } } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |