Skip to content

Commit e21cf5a

Browse files
whuthazzik
authored andcommitted
Added query cache statistics when using MultiCriteria, and putting to cache only when put is enabled
1 parent 5e3f957 commit e21cf5a

File tree

2 files changed

+54
-3
lines changed

2 files changed

+54
-3
lines changed

src/NHibernate.Test/QueryTest/MultiCriteriaFixture.cs

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
using System;
22
using System.Collections;
33
using System.Collections.Generic;
4+
using NHibernate.Cfg;
45
using NHibernate.Criterion;
56
using NHibernate.Test.SecondLevelCacheTests;
67
using NUnit.Framework;
8+
using Environment = NHibernate.Cfg.Environment;
79

810
namespace NHibernate.Test.QueryTest
911
{
@@ -25,6 +27,20 @@ protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory)
2527
return factory.ConnectionProvider.Driver.SupportsMultipleQueries;
2628
}
2729

30+
protected override void Configure(Configuration configuration)
31+
{
32+
base.Configure(configuration);
33+
34+
configuration.SetProperty(Environment.GenerateStatistics, "true");
35+
}
36+
37+
protected override void OnSetUp()
38+
{
39+
base.OnSetUp();
40+
41+
this.sessions.Statistics.Clear();
42+
}
43+
2844
protected override void OnTearDown()
2945
{
3046
using (var session = OpenSession())
@@ -151,6 +167,22 @@ public void CanGetMultiQueryFromSecondLevelCache()
151167
}
152168
}
153169

170+
[Test]
171+
public void CanUpdateStatisticsWhenGetMultiQueryFromSecondLevelCache()
172+
{
173+
CreateItems();
174+
175+
DoMutiQueryAndAssert();
176+
Assert.AreEqual(0, sessions.Statistics.QueryCacheHitCount);
177+
Assert.AreEqual(1, sessions.Statistics.QueryCacheMissCount);
178+
Assert.AreEqual(1, sessions.Statistics.QueryCachePutCount);
179+
180+
DoMutiQueryAndAssert();
181+
Assert.AreEqual(1, sessions.Statistics.QueryCacheHitCount);
182+
Assert.AreEqual(1, sessions.Statistics.QueryCacheMissCount);
183+
Assert.AreEqual(1, sessions.Statistics.QueryCachePutCount);
184+
}
185+
154186
[Test]
155187
public void TwoMultiQueriesWithDifferentPagingGetDifferentResultsWhenUsingCachedQueries()
156188
{
@@ -248,7 +280,7 @@ public void CanAddCriteriaWithKeyAndRetrieveResultsWithKey()
248280
using (var session = OpenSession())
249281
{
250282
var multiCriteria = session.CreateMultiCriteria();
251-
283+
252284
var firstCriteria = session.CreateCriteria(typeof(Item))
253285
.Add(Restrictions.Lt("id", 50));
254286

@@ -275,7 +307,7 @@ public void CanAddDetachedCriteriaWithKeyAndRetrieveResultsWithKey()
275307

276308
var firstCriteria = DetachedCriteria.For(typeof(Item))
277309
.Add(Restrictions.Lt("id", 50));
278-
310+
279311
var secondCriteria = DetachedCriteria.For(typeof(Item));
280312

281313
multiCriteria.Add("firstCriteria", firstCriteria);

src/NHibernate/Impl/MultiCriteriaImpl.cs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,31 @@ private IList ListUsingQueryCache()
120120
queryCache,
121121
key);
122122

123+
if (factory.Statistics.IsStatisticsEnabled)
124+
{
125+
if (result == null)
126+
{
127+
factory.StatisticsImplementor.QueryCacheMiss(key.ToString(), queryCache.RegionName);
128+
}
129+
else
130+
{
131+
factory.StatisticsImplementor.QueryCacheHit(key.ToString(), queryCache.RegionName);
132+
}
133+
}
134+
123135
if (result == null)
124136
{
125137
log.Debug("Cache miss for multi criteria query");
126138
IList list = DoList();
127-
queryCache.Put(key, new ICacheAssembler[] { assembler }, new object[] { list }, combinedParameters.NaturalKeyLookup, session);
128139
result = list;
140+
if ((session.CacheMode & CacheMode.Put) == CacheMode.Put)
141+
{
142+
bool put = queryCache.Put(key, new ICacheAssembler[] { assembler }, new object[] { list }, combinedParameters.NaturalKeyLookup, session);
143+
if (put && factory.Statistics.IsStatisticsEnabled)
144+
{
145+
factory.StatisticsImplementor.QueryCachePut(key.ToString(), queryCache.RegionName);
146+
}
147+
}
129148
}
130149

131150
return GetResultList(result);

0 commit comments

Comments
 (0)