Skip to content

Commit 6ba0c56

Browse files
committed
Proper iteration in HQLQueryPlan.PerformIterate
1 parent f70e3cf commit 6ba0c56

File tree

7 files changed

+23
-278
lines changed

7 files changed

+23
-278
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
{
@@ -1228,8 +1229,7 @@ public async Task BatchLoadAsync()
12281229
await (s.DeleteAsync(baz2));
12291230
await (s.DeleteAsync(baz3));
12301231

1231-
IEnumerable en = new JoinedEnumerable(
1232-
new IEnumerable[] {baz.FooSet, baz2.FooSet});
1232+
IEnumerable en = Enumerable.Concat(baz.FooSet, baz2.FooSet);
12331233

12341234
foreach (object obj in en)
12351235
{
@@ -3459,7 +3459,7 @@ public async Task PersistentLifecycleAsync()
34593459

34603460

34613461
[Test]
3462-
public async Task EnumerableAsync()
3462+
public async Task EnumerableTestAsync()
34633463
{
34643464
// this test used to be called Iterators()
34653465

@@ -5338,10 +5338,9 @@ public async Task TransientOrphanDeleteAsync()
53385338
baz.FooBag = foos;
53395339
await (s.SaveAsync(baz));
53405340

5341-
IEnumerator enumer = new JoinedEnumerable(new IEnumerable[] {foos, bars}).GetEnumerator();
5342-
while (enumer.MoveNext())
5341+
foreach(Foo foo in Enumerable.Concat<object>(foos, bars))
53435342
{
5344-
FooComponent cmp = ((Foo) enumer.Current).Component;
5343+
FooComponent cmp = foo.Component;
53455344
await (s.DeleteAsync(cmp.Glarch));
53465345
cmp.Glarch = null;
53475346
}

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
{
@@ -1216,8 +1217,7 @@ public void BatchLoad()
12161217
s.Delete(baz2);
12171218
s.Delete(baz3);
12181219

1219-
IEnumerable en = new JoinedEnumerable(
1220-
new IEnumerable[] {baz.FooSet, baz2.FooSet});
1220+
IEnumerable en = Enumerable.Concat(baz.FooSet, baz2.FooSet);
12211221

12221222
foreach (object obj in en)
12231223
{
@@ -3447,7 +3447,7 @@ public void PersistentLifecycle()
34473447

34483448

34493449
[Test]
3450-
public void Enumerable()
3450+
public void EnumerableTest()
34513451
{
34523452
// this test used to be called Iterators()
34533453

@@ -5326,10 +5326,9 @@ public void TransientOrphanDelete()
53265326
baz.FooBag = foos;
53275327
s.Save(baz);
53285328

5329-
IEnumerator enumer = new JoinedEnumerable(new IEnumerable[] {foos, bars}).GetEnumerator();
5330-
while (enumer.MoveNext())
5329+
foreach(Foo foo in Enumerable.Concat<object>(foos, bars))
53315330
{
5332-
FooComponent cmp = ((Foo) enumer.Current).Component;
5331+
FooComponent cmp = foo.Component;
53335332
s.Delete(cmp.Glarch);
53345333
cmp.Glarch = null;
53355334
}

src/NHibernate.Test/UtilityTest/JoinedEnumerableFixture.cs

Lines changed: 0 additions & 214 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
}
@@ -1108,7 +1108,7 @@ public override async Task<IEnumerable> EnumerableFilterAsync(object collection,
11081108
using (BeginProcess())
11091109
{
11101110
var plan = await (GetFilterQueryPlanAsync(collection, filter, queryParameters, true, cancellationToken)).ConfigureAwait(false);
1111-
return await (plan.PerformIterateAsync(queryParameters, this, cancellationToken)).ConfigureAwait(false);
1111+
return plan.PerformIterate(queryParameters, this);
11121112
}
11131113
}
11141114

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

0 commit comments

Comments
 (0)