Skip to content

Commit 6a78091

Browse files
committed
Enhancing ORM QueryBuilder with async
1 parent 11d5c2b commit 6a78091

File tree

5 files changed

+45
-66
lines changed

5 files changed

+45
-66
lines changed

Foundation.NetStandard-2.0/Collections/SegmentedCollection.cs

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
using System;
22
using System.Collections;
33
using System.Collections.Generic;
4-
using Foundation.Diagnostics.Contracts;
4+
using Foundation.Assertions;
55

66
namespace Foundation.Collections
77
{
8-
/// <summary>
9-
///
10-
/// </summary>
11-
/// <typeparam name="T"></typeparam>
128
public class SegmentedCollection<T> : ICollection<T>
139
{
1410
#region Private Fields
@@ -19,14 +15,9 @@ public class SegmentedCollection<T> : ICollection<T>
1915

2016
#endregion
2117

22-
/// <summary>
23-
///
24-
/// </summary>
25-
/// <param name="segmentLength"></param>
2618
public SegmentedCollection(int segmentLength)
2719
{
28-
FoundationContract.Requires<ArgumentOutOfRangeException>(segmentLength > 0);
29-
20+
Assert.IsInRange(segmentLength > 0);
3021
_segmentLength = segmentLength;
3122
}
3223

Foundation.NetStandard-2.0/Collections/SegmentedListBuilder.cs

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -54,29 +54,19 @@ public void Add(T item)
5454
_nextSegmentItemIndex++;
5555
}
5656

57-
/// <summary>
58-
///
59-
/// </summary>
6057
public int Count
6158
{
6259
get
6360
{
6461
var count = 0;
6562
var segmentCount = _segments.Count;
6663
if (segmentCount > 0)
67-
{
68-
count += (segmentCount - 1)* _segmentItemCapacity;
69-
}
64+
count += (segmentCount - 1) * _segmentItemCapacity;
7065
count += _nextSegmentItemIndex;
71-
7266
return count;
7367
}
7468
}
7569

76-
/// <summary>
77-
///
78-
/// </summary>
79-
/// <returns></returns>
8070
public IReadOnlyList<T> ToReadOnlyList()
8171
{
8272
var count = Count;
@@ -94,18 +84,18 @@ public ReadOnlySegmentedList(IList<T[]> segments, int count)
9484
_count = count;
9585
}
9686

97-
#region IReadOnlyList<T> Members
87+
#region IReadOnlyList<T> Members
9888

9989
T IReadOnlyList<T>.this[int index]
10090
{
10191
get
10292
{
10393
var segmentLength = _segments[0].Length;
10494

105-
var segmentIndex = index/segmentLength;
95+
var segmentIndex = index / segmentLength;
10696
var segment = _segments[segmentIndex];
10797

108-
var segmentItemIndex = index%segmentLength;
98+
var segmentItemIndex = index % segmentLength;
10999
var value = segment[segmentItemIndex];
110100
return value;
111101
}
@@ -134,10 +124,10 @@ IEnumerator<T> IEnumerable<T>.GetEnumerator()
134124

135125
IEnumerator IEnumerable.GetEnumerator()
136126
{
137-
return ((IEnumerable<T>)this).GetEnumerator();
127+
return ((IEnumerable<T>) this).GetEnumerator();
138128
}
139129

140-
#endregion
130+
#endregion
141131
}
142132
}
143133
}

Foundation.NetStandard-2.0/Data/DbDataReaderExtensions.cs

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ namespace Foundation.Data
1010
{
1111
public static class DbDataReaderExtensions
1212
{
13-
private static async Task ReadAsync(this DbDataReader dataReader, Action read, CancellationToken cancellationToken)
13+
public static async Task ReadResultAsync(this DbDataReader dataReader, Action readRecord, CancellationToken cancellationToken)
1414
{
1515
while (await dataReader.ReadAsync(cancellationToken))
16-
read();
16+
readRecord();
1717
}
1818

19-
public static async Task ReadAsync(this DbDataReader dataReader, IEnumerable<Func<Task>> reads, CancellationToken cancellationToken)
19+
public static async Task ReadResultAsync(this DbDataReader dataReader, IEnumerable<Func<Task>> reads, CancellationToken cancellationToken)
2020
{
2121
var first = true;
2222
foreach (var read in reads)
@@ -33,20 +33,28 @@ public static async Task ReadAsync(this DbDataReader dataReader, IEnumerable<Fun
3333
}
3434
}
3535

36-
public static async Task<List<T>> ReadAsync<T>(this DbDataReader dataReader, Func<IDataRecord, T> read, CancellationToken cancellationToken)
36+
public static async Task<List<T>> ReadResultAsync<T>(this DbDataReader dataReader, Func<IDataRecord, T> readRecord, CancellationToken cancellationToken)
3737
{
3838
var records = new List<T>();
3939

40-
await dataReader.ReadAsync(() =>
40+
await dataReader.ReadResultAsync(() =>
4141
{
42-
var record = read(dataReader);
42+
var record = readRecord(dataReader);
4343
records.Add(record);
4444
}, cancellationToken);
4545

4646
return records;
4747
}
4848

49-
public static async Task<ExecuteReaderResponse<T1, T2>> ReadAsync<T1, T2>(
49+
public static async Task<List<T>> ReadNextResultAsync<T>(this DbDataReader dataReader, Func<IDataRecord, T> readRecord, CancellationToken cancellationToken)
50+
{
51+
var nextResult = await dataReader.NextResultAsync(cancellationToken);
52+
Assert.IsTrue(nextResult);
53+
var records = await dataReader.ReadResultAsync(readRecord, cancellationToken);
54+
return records;
55+
}
56+
57+
public static async Task<ExecuteReaderResponse<T1, T2>> ReadResultAsync<T1, T2>(
5058
this DbDataReader dataReader,
5159
Func<IDataRecord, T1> read1,
5260
Func<IDataRecord, T2> read2,
@@ -57,16 +65,16 @@ public static async Task<ExecuteReaderResponse<T1, T2>> ReadAsync<T1, T2>(
5765

5866
var readResults = new Func<Task>[]
5967
{
60-
async () => objects1 = await dataReader.ReadAsync(read1, cancellationToken),
61-
async () => objects2 = await dataReader.ReadAsync(read2, cancellationToken),
68+
async () => objects1 = await dataReader.ReadResultAsync(read1, cancellationToken),
69+
async () => objects2 = await dataReader.ReadResultAsync(read2, cancellationToken),
6270
};
6371

64-
await dataReader.ReadAsync(readResults, cancellationToken);
72+
await dataReader.ReadResultAsync(readResults, cancellationToken);
6573

6674
return ExecuteReaderResponse.Create(objects1, objects2);
6775
}
6876

69-
public static async Task<ExecuteReaderResponse<T1, T2, T3>> ReadAsync<T1, T2, T3>(
77+
public static async Task<ExecuteReaderResponse<T1, T2, T3>> ReadResultAsync<T1, T2, T3>(
7078
this DbDataReader dataReader,
7179
Func<IDataRecord, T1> read1,
7280
Func<IDataRecord, T2> read2,
@@ -79,12 +87,12 @@ public static async Task<ExecuteReaderResponse<T1, T2, T3>> ReadAsync<T1, T2, T3
7987

8088
var reads = new Func<Task>[]
8189
{
82-
async () => objects1 = (await dataReader.ReadAsync(read1, cancellationToken)),
83-
async () => objects2 = (await dataReader.ReadAsync(read2, cancellationToken)),
84-
async () => objects3 = (await dataReader.ReadAsync(read3, cancellationToken)),
90+
async () => objects1 = (await dataReader.ReadResultAsync(read1, cancellationToken)),
91+
async () => objects2 = (await dataReader.ReadResultAsync(read2, cancellationToken)),
92+
async () => objects3 = (await dataReader.ReadResultAsync(read3, cancellationToken)),
8593
};
8694

87-
await dataReader.ReadAsync(reads, cancellationToken);
95+
await dataReader.ReadResultAsync(reads, cancellationToken);
8896

8997
return ExecuteReaderResponse.Create(objects1, objects2, objects3);
9098
}

Foundation.NetStandard-2.0/Data/IDataReaderExtensions.cs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -92,14 +92,6 @@ public static ExecuteReaderResponse<T1, T2, T3> Read<T1, T2, T3>(this IDataReade
9292
return ExecuteReaderResponse.Create(result1, result2, result3);
9393
}
9494

95-
public static IEnumerable<IDataReader> AsEnumerable(this IDataReader dataReader)
96-
{
97-
Assert.IsNotNull(dataReader);
98-
99-
while (dataReader.Read())
100-
yield return dataReader;
101-
}
102-
10395
public static int Fill(this IDataReader dataReader, DataSet dataSet, CancellationToken cancellationToken)
10496
{
10597
Assert.IsNotNull(dataReader);

Foundation.NetStandard-2.0/Data/IDbCommandAsyncExecutorExtensions.cs

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,8 @@ private static Task ExecuteAsync(this IDbCommandAsyncExecutor executor, IEnumera
1414
return executor.ExecuteAsync(async connection =>
1515
{
1616
foreach (var request in requests)
17-
{
1817
using (var command = connection.CreateCommand(request.CreateCommandRequest))
1918
await request.Execute(command);
20-
}
2119
}, cancellationToken);
2220
}
2321

@@ -48,12 +46,23 @@ await executor.ExecuteAsync(
4846
return scalar;
4947
}
5048

49+
public static Task ExecuteReaderAsync(this IDbCommandAsyncExecutor executor, ExecuteReaderRequest request, Func<DbDataReader, Task> read)
50+
{
51+
return executor.ExecuteAsync(
52+
new ExecuteNonReaderRequest(request.CreateCommandRequest, request.CancellationToken),
53+
async command =>
54+
{
55+
using (var dataReader = await command.ExecuteReaderAsync(request.CommandBehavior, request.CancellationToken))
56+
await read(dataReader);
57+
});
58+
}
59+
5160
public static async Task<List<T>> ExecuteReaderAsync<T>(this IDbCommandAsyncExecutor executor, ExecuteReaderRequest request, Func<IDataRecord, T> read)
5261
{
5362
List<T> records = null;
5463
await executor.ExecuteReaderAsync(
5564
request,
56-
async dataReader => records = await dataReader.ReadAsync(read, request.CancellationToken));
65+
async dataReader => records = await dataReader.ReadResultAsync(read, request.CancellationToken));
5766
return records;
5867
}
5968

@@ -63,7 +72,7 @@ public static async Task<ExecuteReaderResponse<T1, T2>> ExecuteReaderAsync<T1, T
6372
ExecuteReaderResponse<T1, T2> response = null;
6473
await executor.ExecuteReaderAsync(
6574
request,
66-
async dataReader => response = await dataReader.ReadAsync(read1, read2, request.CancellationToken));
75+
async dataReader => response = await dataReader.ReadResultAsync(read1, read2, request.CancellationToken));
6776
return response;
6877
}
6978

@@ -73,19 +82,8 @@ public static async Task<ExecuteReaderResponse<T1, T2, T3>> ExecuteReaderAsync<T
7382
ExecuteReaderResponse<T1, T2, T3> response = null;
7483
await executor.ExecuteReaderAsync(
7584
request,
76-
async dataReader => response = await dataReader.ReadAsync(read1, read2, read3, request.CancellationToken));
85+
async dataReader => response = await dataReader.ReadResultAsync(read1, read2, read3, request.CancellationToken));
7786
return response;
7887
}
79-
80-
private static Task ExecuteReaderAsync(this IDbCommandAsyncExecutor executor, ExecuteReaderRequest request, Func<DbDataReader, Task> read)
81-
{
82-
return executor.ExecuteAsync(
83-
new ExecuteNonReaderRequest(request.CreateCommandRequest, request.CancellationToken),
84-
async command =>
85-
{
86-
using (var dataReader = await command.ExecuteReaderAsync(request.CommandBehavior, request.CancellationToken))
87-
await read(dataReader);
88-
});
89-
}
9088
}
9189
}

0 commit comments

Comments
 (0)