Skip to content

Commit 39b54c7

Browse files
committed
Allow new future batcher for stateless session (for all AbstractSessionImpl based classes)
1 parent 68976d9 commit 39b54c7

File tree

5 files changed

+64
-14
lines changed

5 files changed

+64
-14
lines changed

src/NHibernate.Test/Async/Futures/LinqFutureFixture.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,36 @@ public async Task CanUseFutureQueryAsync()
176176
}
177177
}
178178

179+
[Test]
180+
public async Task CanUseFutureQueryAndQueryOverForSatelessSessionAsync()
181+
{
182+
IgnoreThisTestIfMultipleQueriesArentSupportedByDriver();
183+
184+
using (var s = Sfi.OpenStatelessSession())
185+
{
186+
var persons10 = s.Query<Person>()
187+
.Take(10)
188+
.ToFuture();
189+
var persons5 = s.QueryOver<Person>()
190+
.Take(5)
191+
.Future();
192+
193+
using (var logSpy = new SqlLogSpy())
194+
{
195+
foreach (var person in await (persons5.GetEnumerableAsync()))
196+
{
197+
}
198+
199+
foreach (var person in await (persons10.GetEnumerableAsync()))
200+
{
201+
}
202+
203+
var events = logSpy.Appender.GetEvents();
204+
Assert.AreEqual(1, events.Length);
205+
}
206+
}
207+
}
208+
179209
[Test]
180210
public async Task CanUseFutureQueryWithAnonymousTypeAsync()
181211
{

src/NHibernate.Test/Futures/LinqFutureFixture.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,36 @@ public void CanUseFutureQuery()
165165
}
166166
}
167167

168+
[Test]
169+
public void CanUseFutureQueryAndQueryOverForSatelessSession()
170+
{
171+
IgnoreThisTestIfMultipleQueriesArentSupportedByDriver();
172+
173+
using (var s = Sfi.OpenStatelessSession())
174+
{
175+
var persons10 = s.Query<Person>()
176+
.Take(10)
177+
.ToFuture();
178+
var persons5 = s.QueryOver<Person>()
179+
.Take(5)
180+
.Future();
181+
182+
using (var logSpy = new SqlLogSpy())
183+
{
184+
foreach (var person in persons5.GetEnumerable())
185+
{
186+
}
187+
188+
foreach (var person in persons10.GetEnumerable())
189+
{
190+
}
191+
192+
var events = logSpy.Appender.GetEvents();
193+
Assert.AreEqual(1, events.Length);
194+
}
195+
}
196+
}
197+
168198
[Test]
169199
public void CanUseFutureQueryWithAnonymousType()
170200
{

src/NHibernate/Impl/AbstractSessionImpl.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ public abstract partial class AbstractSessionImpl : ISessionImplementor
3030
private ISessionFactoryImplementor _factory;
3131
private FlushMode _flushMode;
3232

33+
[NonSerialized]
34+
private IMultiAnyQueryBatch _futureMultiBatch;
35+
3336
private bool closed;
3437

3538
/// <summary>Get the current NHibernate transaction.</summary>
@@ -280,10 +283,9 @@ public virtual IQuery GetNamedSQLQuery(string name)
280283
public abstract FutureCriteriaBatch FutureCriteriaBatch { get; protected internal set; }
281284
public abstract FutureQueryBatch FutureQueryBatch { get; protected internal set; }
282285

283-
//TODO 6.0: Make abstract
284286
public virtual IMultiAnyQueryBatch FutureMultiBatch
285287
{
286-
get => throw new NotImplementedException();
288+
get => _futureMultiBatch ?? (_futureMultiBatch = new MultiAnyQueryBatch(this));
287289
}
288290

289291
public virtual IInterceptor Interceptor { get; protected set; }

src/NHibernate/Impl/SessionImpl.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,6 @@ public sealed partial class SessionImpl : AbstractSessionImpl, IEventSource, ISe
5353
private FutureCriteriaBatch futureCriteriaBatch;
5454
[NonSerialized]
5555
private FutureQueryBatch futureQueryBatch;
56-
[NonSerialized]
57-
private IMultiAnyQueryBatch _futureMultiBatch;
5856

5957
[NonSerialized]
6058
private readonly EventListeners listeners;
@@ -239,11 +237,6 @@ protected internal set
239237
}
240238
}
241239

242-
public override IMultiAnyQueryBatch FutureMultiBatch
243-
{
244-
get => _futureMultiBatch ?? (_futureMultiBatch = new MultiAnyQueryBatch(this));
245-
}
246-
247240
public ConnectionReleaseMode ConnectionReleaseMode
248241
{
249242
get { return connectionReleaseMode; }

src/NHibernate/Impl/StatelessSessionImpl.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -867,11 +867,6 @@ public override FutureQueryBatch FutureQueryBatch
867867
protected internal set { throw new NotSupportedException("future queries are not supported for stateless session"); }
868868
}
869869

870-
public override IMultiAnyQueryBatch FutureMultiBatch
871-
{
872-
get { throw new NotSupportedException("future queries are not supported for stateless session"); }
873-
}
874-
875870
public override IEntityPersister GetEntityPersister(string entityName, object obj)
876871
{
877872
using (BeginProcess())

0 commit comments

Comments
 (0)