From: <pa...@us...> - 2011-02-05 22:43:54
|
Revision: 5374 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5374&view=rev Author: patearl Date: 2011-02-05 22:43:48 +0000 (Sat, 05 Feb 2011) Log Message: ----------- Linq: Support Cacheable before other operators. (NH-2502, thanks to Dean Ward for the fix.) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Linq/ReWriters/ResultOperatorRewriter.cs trunk/nhibernate/src/NHibernate.Test/Linq/QueryCacheableTests.cs Modified: trunk/nhibernate/src/NHibernate/Linq/ReWriters/ResultOperatorRewriter.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Linq/ReWriters/ResultOperatorRewriter.cs 2011-01-30 14:36:08 UTC (rev 5373) +++ trunk/nhibernate/src/NHibernate/Linq/ReWriters/ResultOperatorRewriter.cs 2011-02-05 22:43:48 UTC (rev 5374) @@ -63,6 +63,7 @@ { typeof(FetchRequestBase), typeof(OfTypeResultOperator), + typeof(CacheableResultOperator), }; private readonly List<ResultOperatorBase> resultOperators = new List<ResultOperatorBase>(); Modified: trunk/nhibernate/src/NHibernate.Test/Linq/QueryCacheableTests.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Linq/QueryCacheableTests.cs 2011-01-30 14:36:08 UTC (rev 5373) +++ trunk/nhibernate/src/NHibernate.Test/Linq/QueryCacheableTests.cs 2011-02-05 22:43:48 UTC (rev 5374) @@ -85,5 +85,34 @@ Assert.That(Sfi.Statistics.QueryCachePutCount, Is.EqualTo(2)); Assert.That(Sfi.Statistics.QueryCacheHitCount, Is.EqualTo(1)); } + + [Test] + public void CacheableBeforeOtherClauses() + { + Sfi.Statistics.Clear(); + Sfi.QueryCache.Clear(); + + db.Customers.Cacheable().Where(c => c.ContactName != c.CompanyName).Take(1).ToList(); + db.Customers.Where(c => c.ContactName != c.CompanyName).Take(1).ToList(); + + Assert.That(Sfi.Statistics.QueryExecutionCount, Is.EqualTo(2)); + Assert.That(Sfi.Statistics.QueryCachePutCount, Is.EqualTo(1)); + Assert.That(Sfi.Statistics.QueryCacheHitCount, Is.EqualTo(0)); + } + + [Test] + public void CacheableRegionBeforeOtherClauses() + { + Sfi.Statistics.Clear(); + Sfi.QueryCache.Clear(); + + db.Customers.Cacheable().CacheRegion("test").Where(c => c.ContactName != c.CompanyName).Take(1).ToList(); + db.Customers.Cacheable().CacheRegion("test").Where(c => c.ContactName != c.CompanyName).Take(1).ToList(); + db.Customers.Cacheable().CacheRegion("other").Where(c => c.ContactName != c.CompanyName).Take(1).ToList(); + + Assert.That(Sfi.Statistics.QueryExecutionCount, Is.EqualTo(2)); + Assert.That(Sfi.Statistics.QueryCachePutCount, Is.EqualTo(2)); + Assert.That(Sfi.Statistics.QueryCacheHitCount, Is.EqualTo(1)); + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |