Skip to content

Commit baf46ed

Browse files
committed
Proper iteration in HQLQueryPlan.PerformIterate
1 parent cbcf12b commit baf46ed

File tree

7 files changed

+23
-277
lines changed

7 files changed

+23
-277
lines changed

src/NHibernate.Test/Async/Legacy/FooBarTest.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
using NHibernate.Type;
2929
using NHibernate.Util;
3030
using NUnit.Framework;
31+
using System.Linq;
3132

3233
namespace NHibernate.Test.Legacy
3334
{
@@ -1225,8 +1226,7 @@ public async Task BatchLoadAsync()
12251226
await (s.DeleteAsync(baz2));
12261227
await (s.DeleteAsync(baz3));
12271228

1228-
IEnumerable en = new JoinedEnumerable(
1229-
new IEnumerable[] {baz.FooSet, baz2.FooSet});
1229+
IEnumerable en = Enumerable.Concat(baz.FooSet, baz2.FooSet);
12301230

12311231
foreach (object obj in en)
12321232
{
@@ -3411,7 +3411,7 @@ public async Task PersistentLifecycleAsync()
34113411
}
34123412

34133413
[Test]
3414-
public async Task EnumerableAsync()
3414+
public async Task EnumerableTestAsync()
34153415
{
34163416
// this test used to be called Iterators()
34173417

@@ -5282,10 +5282,9 @@ public async Task TransientOrphanDeleteAsync()
52825282
baz.FooBag = foos;
52835283
await (s.SaveAsync(baz));
52845284

5285-
IEnumerator enumer = new JoinedEnumerable(new IEnumerable[] {foos, bars}).GetEnumerator();
5286-
while (enumer.MoveNext())
5285+
foreach(Foo foo in Enumerable.Concat<object>(foos, bars))
52875286
{
5288-
FooComponent cmp = ((Foo) enumer.Current).Component;
5287+
FooComponent cmp = foo.Component;
52895288
await (s.DeleteAsync(cmp.Glarch));
52905289
cmp.Glarch = null;
52915290
}

src/NHibernate.Test/Legacy/FooBarTest.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using NHibernate.Type;
1919
using NHibernate.Util;
2020
using NUnit.Framework;
21+
using System.Linq;
2122

2223
namespace NHibernate.Test.Legacy
2324
{
@@ -1213,8 +1214,7 @@ public void BatchLoad()
12131214
s.Delete(baz2);
12141215
s.Delete(baz3);
12151216

1216-
IEnumerable en = new JoinedEnumerable(
1217-
new IEnumerable[] {baz.FooSet, baz2.FooSet});
1217+
IEnumerable en = Enumerable.Concat(baz.FooSet, baz2.FooSet);
12181218

12191219
foreach (object obj in en)
12201220
{
@@ -3399,7 +3399,7 @@ public void PersistentLifecycle()
33993399
}
34003400

34013401
[Test]
3402-
public void Enumerable()
3402+
public void EnumerableTest()
34033403
{
34043404
// this test used to be called Iterators()
34053405

@@ -5270,10 +5270,9 @@ public void TransientOrphanDelete()
52705270
baz.FooBag = foos;
52715271
s.Save(baz);
52725272

5273-
IEnumerator enumer = new JoinedEnumerable(new IEnumerable[] {foos, bars}).GetEnumerator();
5274-
while (enumer.MoveNext())
5273+
foreach(Foo foo in Enumerable.Concat<object>(foos, bars))
52755274
{
5276-
FooComponent cmp = ((Foo) enumer.Current).Component;
5275+
FooComponent cmp = foo.Component;
52775276
s.Delete(cmp.Glarch);
52785277
cmp.Glarch = null;
52795278
}

src/NHibernate.Test/UtilityTest/JoinedEnumerableFixture.cs

Lines changed: 0 additions & 213 deletions
This file was deleted.

src/NHibernate/Async/Engine/Query/HQLQueryPlan.cs

Lines changed: 1 addition & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
using System;
1212
using System.Collections;
1313
using System.Collections.Generic;
14-
14+
using System.Linq;
1515
using NHibernate.Event;
1616
using NHibernate.Hql;
1717
using NHibernate.Linq;
@@ -26,8 +26,6 @@ public partial interface IQueryPlan
2626
{
2727
Task PerformListAsync(QueryParameters queryParameters, ISessionImplementor statelessSessionImpl, IList results, CancellationToken cancellationToken);
2828
Task<int> PerformExecuteUpdateAsync(QueryParameters queryParameters, ISessionImplementor statelessSessionImpl, CancellationToken cancellationToken);
29-
Task<IEnumerable<T>> PerformIterateAsync<T>(QueryParameters queryParameters, IEventSource session, CancellationToken cancellationToken);
30-
Task<IEnumerable> PerformIterateAsync(QueryParameters queryParameters, IEventSource session, CancellationToken cancellationToken);
3129
}
3230
public partial class HQLQueryPlan : IQueryPlan
3331
{
@@ -100,37 +98,6 @@ public async Task PerformListAsync(QueryParameters queryParameters, ISessionImpl
10098
}
10199
}
102100

103-
public async Task<IEnumerable> PerformIterateAsync(QueryParameters queryParameters, IEventSource session, CancellationToken cancellationToken)
104-
{
105-
cancellationToken.ThrowIfCancellationRequested();
106-
if (Log.IsDebugEnabled())
107-
{
108-
Log.Debug("enumerable: {0}", _sourceQuery);
109-
queryParameters.LogParameters(session.Factory);
110-
}
111-
if (Translators.Length == 0)
112-
{
113-
return CollectionHelper.EmptyEnumerable;
114-
}
115-
if (Translators.Length == 1)
116-
{
117-
return await (Translators[0].GetEnumerableAsync(queryParameters, session, cancellationToken)).ConfigureAwait(false);
118-
}
119-
var results = new IEnumerable[Translators.Length];
120-
for (int i = 0; i < Translators.Length; i++)
121-
{
122-
var result = await (Translators[i].GetEnumerableAsync(queryParameters, session, cancellationToken)).ConfigureAwait(false);
123-
results[i] = result;
124-
}
125-
return new JoinedEnumerable(results);
126-
}
127-
128-
public async Task<IEnumerable<T>> PerformIterateAsync<T>(QueryParameters queryParameters, IEventSource session, CancellationToken cancellationToken)
129-
{
130-
cancellationToken.ThrowIfCancellationRequested();
131-
return new SafetyEnumerable<T>(await (PerformIterateAsync(queryParameters, session, cancellationToken)).ConfigureAwait(false));
132-
}
133-
134101
public async Task<int> PerformExecuteUpdateAsync(QueryParameters queryParameters, ISessionImplementor session, CancellationToken cancellationToken)
135102
{
136103
cancellationToken.ThrowIfCancellationRequested();

src/NHibernate/Async/Impl/SessionImpl.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ public override async Task<IEnumerable<T>> EnumerableAsync<T>(IQueryExpression q
310310

311311
using (SuspendAutoFlush()) //stops flush being called multiple times if this method is recursively called
312312
{
313-
return await (plan.PerformIterateAsync<T>(queryParameters, this, cancellationToken)).ConfigureAwait(false);
313+
return plan.PerformIterate<T>(queryParameters, this);
314314
}
315315
}
316316
}
@@ -326,7 +326,7 @@ public override async Task<IEnumerable> EnumerableAsync(IQueryExpression queryEx
326326

327327
using (SuspendAutoFlush()) //stops flush being called multiple times if this method is recursively called
328328
{
329-
return await (plan.PerformIterateAsync(queryParameters, this, cancellationToken)).ConfigureAwait(false);
329+
return plan.PerformIterate(queryParameters, this);
330330
}
331331
}
332332
}
@@ -1107,7 +1107,7 @@ public override async Task<IEnumerable> EnumerableFilterAsync(object collection,
11071107
using (BeginProcess())
11081108
{
11091109
var plan = await (GetFilterQueryPlanAsync(collection, filter, queryParameters, true, cancellationToken)).ConfigureAwait(false);
1110-
return await (plan.PerformIterateAsync(queryParameters, this, cancellationToken)).ConfigureAwait(false);
1110+
return plan.PerformIterate(queryParameters, this);
11111111
}
11121112
}
11131113

@@ -1117,7 +1117,7 @@ public override async Task<IEnumerable<T>> EnumerableFilterAsync<T>(object colle
11171117
using (BeginProcess())
11181118
{
11191119
var plan = await (GetFilterQueryPlanAsync(collection, filter, queryParameters, true, cancellationToken)).ConfigureAwait(false);
1120-
return await (plan.PerformIterateAsync<T>(queryParameters, this, cancellationToken)).ConfigureAwait(false);
1120+
return plan.PerformIterate<T>(queryParameters, this);
11211121
}
11221122
}
11231123

0 commit comments

Comments
 (0)