Skip to content

Commit b9d0a71

Browse files
Generate async files
1 parent 9140339 commit b9d0a71

File tree

7 files changed

+77
-9
lines changed

7 files changed

+77
-9
lines changed

src/NHibernate.Test/Async/CacheTest/BatchableCacheFixture.cs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1565,8 +1565,31 @@ public async Task QueryFetchEntityBatchCacheTestAsync(bool clearEntityCacheAfter
15651565
Assert.That(Sfi.Statistics.QueryCacheHitCount, Is.EqualTo(future ? 2 : 1), "Unexpected cache hit count");
15661566
}
15671567

1568+
[Test]
1569+
public async Task CollectionLazyInitializationFromCacheIsBatchedAsync()
1570+
{
1571+
using (var s = OpenSession())
1572+
{
1573+
var readOnly = await (s.GetAsync<ReadOnly>(await (s.Query<ReadOnly>().Select(x => x.Id).FirstAsync())));
1574+
Assert.That(readOnly.Items.Count, Is.EqualTo(6));
1575+
}
1576+
1577+
var itemPersister = Sfi.GetEntityPersister(typeof(ReadOnlyItem).FullName);
1578+
var itemCache = (BatchableCache) itemPersister.Cache.Cache;
1579+
itemCache.ClearStatistics();
1580+
1581+
using (var s = OpenSession())
1582+
{
1583+
var readOnly = await (s.GetAsync<ReadOnly>(await (s.Query<ReadOnly>().Select(x => x.Id).FirstAsync())));
1584+
Assert.That(readOnly.Items.Count, Is.EqualTo(6));
1585+
}
1586+
1587+
// 6 items with batch-size = 4 so 2 GetMany calls are expected 1st call: 4 items + 2nd call: 2 items
1588+
Assert.That(itemCache.GetMultipleCalls.Count, Is.EqualTo(2));
1589+
}
1590+
15681591
private async Task AssertMultipleCacheCallsAsync<TEntity>(IEnumerable<int> loadIds, IReadOnlyList<int> getIds, int idIndex,
1569-
int[][] fetchedIdIndexes, int[] putIdIndexes, Func<int, bool> cacheBeforeLoadFn = null, CancellationToken cancellationToken = default(CancellationToken))
1592+
int[][] fetchedIdIndexes, int[] putIdIndexes, Func<int, bool> cacheBeforeLoadFn = null, CancellationToken cancellationToken = default(CancellationToken))
15701593
where TEntity : CacheEntity
15711594
{
15721595
var persister = Sfi.GetEntityPersister(typeof(TEntity).FullName);

src/NHibernate/Async/Collection/Generic/PersistentGenericBag.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,16 @@ public override async Task InitializeFromCacheAsync(ICollectionPersister persist
109109
var array = (object[]) disassembled;
110110
var size = array.Length;
111111
BeforeInitialize(persister, size);
112+
113+
var elementType = persister.ElementType;
114+
for (int i = 0; i < size; i++)
115+
{
116+
await (elementType.BeforeAssembleAsync(array[i], Session, cancellationToken)).ConfigureAwait(false);
117+
}
118+
112119
for (var i = 0; i < size; i++)
113120
{
114-
var element = await (persister.ElementType.AssembleAsync(array[i], Session, owner, cancellationToken)).ConfigureAwait(false);
121+
var element = await (elementType.AssembleAsync(array[i], Session, owner, cancellationToken)).ConfigureAwait(false);
115122
if (element != null)
116123
{
117124
_gbag.Add((T) element);

src/NHibernate/Async/Collection/Generic/PersistentGenericIdentifierBag.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,19 @@ public override async Task InitializeFromCacheAsync(ICollectionPersister persist
4444
object[] array = (object[])disassembled;
4545
int size = array.Length;
4646
BeforeInitialize(persister, size);
47+
48+
var identifierType = persister.IdentifierType;
49+
var elementType = persister.ElementType;
50+
for (int i = 0; i < size; i++)
51+
{
52+
await (identifierType.BeforeAssembleAsync(array[i], Session, cancellationToken)).ConfigureAwait(false);
53+
await (elementType.BeforeAssembleAsync(array[i + 1], Session, cancellationToken)).ConfigureAwait(false);
54+
}
55+
4756
for (int i = 0; i < size; i += 2)
4857
{
49-
_identifiers[i / 2] = await (persister.IdentifierType.AssembleAsync(array[i], Session, owner, cancellationToken)).ConfigureAwait(false);
50-
_values.Add((T) await (persister.ElementType.AssembleAsync(array[i + 1], Session, owner, cancellationToken)).ConfigureAwait(false));
58+
_identifiers[i / 2] = await (identifierType.AssembleAsync(array[i], Session, owner, cancellationToken)).ConfigureAwait(false);
59+
_values.Add((T) await (elementType.AssembleAsync(array[i + 1], Session, owner, cancellationToken)).ConfigureAwait(false));
5160
}
5261
}
5362

src/NHibernate/Async/Collection/Generic/PersistentGenericList.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,16 @@ public override async Task InitializeFromCacheAsync(ICollectionPersister persist
9898
object[] array = (object[])disassembled;
9999
int size = array.Length;
100100
BeforeInitialize(persister, size);
101+
102+
var elementType = persister.ElementType;
101103
for (int i = 0; i < size; i++)
102104
{
103-
var element = await (persister.ElementType.AssembleAsync(array[i], Session, owner, cancellationToken)).ConfigureAwait(false);
105+
await (elementType.BeforeAssembleAsync(array[i], Session, cancellationToken)).ConfigureAwait(false);
106+
}
107+
108+
for (int i = 0; i < size; i++)
109+
{
110+
var element = await (elementType.AssembleAsync(array[i], Session, owner, cancellationToken)).ConfigureAwait(false);
104111
WrappedList.Add((T) (element ?? DefaultForType));
105112
}
106113
}

src/NHibernate/Async/Collection/Generic/PersistentGenericMap.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,19 @@ public override async Task InitializeFromCacheAsync(ICollectionPersister persist
9494
object[] array = (object[])disassembled;
9595
int size = array.Length;
9696
BeforeInitialize(persister, size);
97+
98+
var indexType = persister.IndexType;
99+
var elementType = persister.ElementType;
100+
for (int i = 0; i < size; i++)
101+
{
102+
await (indexType.BeforeAssembleAsync(array[i], Session, cancellationToken)).ConfigureAwait(false);
103+
await (elementType.BeforeAssembleAsync(array[i + 1], Session, cancellationToken)).ConfigureAwait(false);
104+
}
105+
97106
for (int i = 0; i < size; i += 2)
98107
{
99-
WrappedMap[(TKey)await (persister.IndexType.AssembleAsync(array[i], Session, owner, cancellationToken)).ConfigureAwait(false)] =
100-
(TValue)await (persister.ElementType.AssembleAsync(array[i + 1], Session, owner, cancellationToken)).ConfigureAwait(false);
108+
WrappedMap[(TKey)await (indexType.AssembleAsync(array[i], Session, owner, cancellationToken)).ConfigureAwait(false)] =
109+
(TValue)await (elementType.AssembleAsync(array[i + 1], Session, owner, cancellationToken)).ConfigureAwait(false);
101110
}
102111
}
103112

src/NHibernate/Async/Collection/Generic/PersistentGenericSet.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,16 @@ public override async Task InitializeFromCacheAsync(ICollectionPersister persist
8484
var array = (object[])disassembled;
8585
int size = array.Length;
8686
BeforeInitialize(persister, size);
87+
88+
var elementType = persister.ElementType;
89+
for (int i = 0; i < size; i++)
90+
{
91+
await (elementType.BeforeAssembleAsync(array[i], Session, cancellationToken)).ConfigureAwait(false);
92+
}
93+
8794
for (int i = 0; i < size; i++)
8895
{
89-
var element = await (persister.ElementType.AssembleAsync(array[i], Session, owner, cancellationToken)).ConfigureAwait(false);
96+
var element = await (elementType.AssembleAsync(array[i], Session, owner, cancellationToken)).ConfigureAwait(false);
9097
if (element != null)
9198
{
9299
WrappedSet.Add((T) element);

src/NHibernate/Async/Collection/PersistentArrayHolder.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,15 @@ public override async Task InitializeFromCacheAsync(ICollectionPersister persist
9494

9595
array = System.Array.CreateInstance(persister.ElementClass, cached.Length);
9696

97+
var elementType = persister.ElementType;
9798
for (int i = 0; i < cached.Length; i++)
9899
{
99-
array.SetValue(await (persister.ElementType.AssembleAsync(cached[i], Session, owner, cancellationToken)).ConfigureAwait(false), i);
100+
await (elementType.BeforeAssembleAsync(cached[i], Session, cancellationToken)).ConfigureAwait(false);
101+
}
102+
103+
for (int i = 0; i < cached.Length; i++)
104+
{
105+
array.SetValue(await (elementType.AssembleAsync(cached[i], Session, owner, cancellationToken)).ConfigureAwait(false), i);
100106
}
101107
}
102108

0 commit comments

Comments
 (0)