Skip to content

Commit 4ba12fa

Browse files
committed
Simplified iteration and TaskSeq module function names
1 parent 724fd1f commit 4ba12fa

File tree

6 files changed

+69
-120
lines changed

6 files changed

+69
-120
lines changed

Cosmos/Cosmos.fs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ module Operations =
112112
/// <param name="cancellationToken">Cancellation token</param>
113113
member container.CountAsync (requestOptions : QueryRequestOptions, [<Optional>] cancellationToken : CancellationToken) =
114114
container.GetItemQueryIterator<int> (countQuery, requestOptions = getRequestOptionsWithMaxItemCount1 requestOptions)
115-
|> TaskSeq.ofFeedIteratorWithCancellation cancellationToken
115+
|> CancellableTaskSeq.ofFeedIterator cancellationToken
116116
|> TaskSeq.tryHead
117117
|> Task.map (Option.defaultValue 0)
118118

@@ -150,7 +150,7 @@ module Operations =
150150
(requestOptions : QueryRequestOptions, [<Optional>] cancellationToken : CancellationToken)
151151
=
152152
container.GetItemQueryIterator<int64> (countQuery, requestOptions = getRequestOptionsWithMaxItemCount1 requestOptions)
153-
|> TaskSeq.ofFeedIteratorWithCancellation cancellationToken
153+
|> CancellableTaskSeq.ofFeedIterator cancellationToken
154154
|> TaskSeq.tryHead
155155
|> Task.map (Option.defaultValue 0)
156156

@@ -192,7 +192,7 @@ module Operations =
192192
query,
193193
requestOptions = getRequestOptionsWithMaxItemCount1 requestOptions
194194
)
195-
|> TaskSeq.ofFeedIteratorWithCancellation cancellationToken
195+
|> CancellableTaskSeq.ofFeedIterator cancellationToken
196196
|> TaskSeq.tryHead
197197
|> Task.map (Option.defaultValue 0)
198198
return count = 1
@@ -232,7 +232,7 @@ module Operations =
232232
query,
233233
requestOptions = getRequestOptionsWithMaxItemCount1 requiestOptions
234234
)
235-
|> TaskSeq.ofFeedIteratorWithCancellation cancellationToken
235+
|> CancellableTaskSeq.ofFeedIterator cancellationToken
236236
|> TaskSeq.tryHead
237237
|> Task.map (Option.defaultValue 0)
238238
return count = 1

Cosmos/FSharp.Azure.Cosmos.fsproj

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@
3737
</PropertyGroup>
3838

3939
<ItemGroup>
40-
<Compile Include="FeedIterator.fs" />
41-
<Compile Include="Queryable.fs" />
40+
<Compile Include="IterationExtensions.fs" />
4241
<Compile Include="TaskSeq.fs" />
4342
<Compile Include="CosmosResponse.fs" />
4443
<Compile Include="Cosmos.fs" />

Cosmos/FeedIterator.fs

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

Cosmos/IterationExtensions.fs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
namespace Microsoft.Azure.Cosmos
2+
3+
open System.Runtime.CompilerServices
4+
open System.Runtime.InteropServices
5+
open System.Threading
6+
open Microsoft.Azure.Cosmos
7+
open FSharp.Control
8+
9+
[<AutoOpen>]
10+
module FeedIteratorExtensions =
11+
12+
// See https://github.com/Azure/azure-cosmos-dotnet-v3/issues/903
13+
type FeedIterator<'T> with
14+
15+
/// Converts the iterator to an async sequence of items.
16+
member iterator.AsAsyncEnumerable<'T> ([<Optional; EnumeratorCancellation>] cancellationToken : CancellationToken) = taskSeq {
17+
while iterator.HasMoreResults do
18+
let! page = iterator.ReadNextAsync (cancellationToken)
19+
20+
for item in page do
21+
cancellationToken.ThrowIfCancellationRequested ()
22+
yield item
23+
}
24+
25+
open System.Linq
26+
open Microsoft.Azure.Cosmos
27+
open Microsoft.Azure.Cosmos.Linq
28+
29+
[<AutoOpen>]
30+
module QueryableExtensions =
31+
32+
type IQueryable<'T> with
33+
34+
member inline query.AsAsyncEnumerable<'T> ([<Optional; EnumeratorCancellation>] cancellationToken : CancellationToken) =
35+
query.ToFeedIterator().AsAsyncEnumerable<'T> (cancellationToken)

Cosmos/Queryable.fs

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

Cosmos/TaskSeq.fs

Lines changed: 29 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,40 @@
1-
module Microsoft.Azure.Cosmos.TaskSeq
1+
namespace Microsoft.Azure.Cosmos
22

33
open System.Linq
44
open System.Threading
55
open Microsoft.Azure.Cosmos
66
open Microsoft.Azure.Cosmos.Linq
77

8-
/// <summary>
9-
/// Asynchronously iterates Cosmos DB <see cref="FeedIterator{T}" />.
10-
/// </summary>
11-
/// <param name="iterator">Cosmos DB feed iterator</param>
12-
let ofFeedIterator<'T> (iterator : FeedIterator<'T>) = iterator.AsAsyncEnumerable<'T> ()
8+
module TaskSeq =
139

14-
/// <summary>
15-
/// Asynchronously iterates Cosmos DB <see cref="FeedIterator{T}" />.
16-
/// </summary>
17-
/// <param name="cancellationToken">Cancellation token</param>
18-
/// <param name="iterator">Cosmos DB feed iterator</param>
19-
let ofFeedIteratorWithCancellation<'T> (cancellationToken : CancellationToken) (iterator : FeedIterator<'T>) =
20-
iterator.AsAsyncEnumerable<'T> (cancellationToken)
10+
/// <summary>
11+
/// Executes Cosmos DB query and asynchronously iterates Cosmos DB <see cref="FeedIterator{T}" />.
12+
/// </summary>
13+
/// <param name="iterator">Cosmos DB feed iterator</param>
14+
let ofFeedIterator<'T> (iterator : FeedIterator<'T>) = iterator.AsAsyncEnumerable<'T> ()
2115

22-
/// <summary>
23-
/// Asynchronously iterates Cosmos DB <see cref="FeedIterator{T}" /> producing items with their ETag values.
24-
/// </summary>
25-
/// <param name="iterator">Cosmos DB feed iterator</param>
26-
let ofFeedIteratorWithETags<'T> (iterator : FeedIterator<'T>) = iterator.AsTaggedAsyncEnumerable<'T> ()
16+
/// <summary>
17+
/// Creates Cosmos DB <see cref="FeedIterator{T}" /> from <see cref="IQueryable{T}" />
18+
/// and asynchronously iterates it.
19+
/// </summary>
20+
/// <param name="query">Cosmos DB queryable</param>
21+
let ofCosmosDbQueryable<'T> (query : IQueryable<'T>) = query.ToFeedIterator().AsAsyncEnumerable<'T> ()
2722

28-
/// <summary>
29-
/// Asynchronously iterates Cosmos DB <see cref="FeedIterator{T}" /> producing items with their ETag values.
30-
/// </summary>
31-
/// <param name="cancellationToken">Cancellation token</param>
32-
/// <param name="iterator">Cosmos DB feed iterator</param>
33-
let ofFeedIteratorWithETagsAndCancellation<'T> (cancellationToken : CancellationToken) (iterator : FeedIterator<'T>) =
34-
iterator.AsTaggedAsyncEnumerable<'T> (cancellationToken)
23+
module CancellableTaskSeq =
3524

36-
/// <summary>
37-
/// Created Cosmos DB <see cref="FeedIterator{T}" /> from <see cref="IQueryable{T}" /> and asynchronously iterates it.
38-
/// </summary>
39-
/// <param name="query">Cosmos DB querable</param>
40-
let ofCosmosDbQuerable<'T> (query : IQueryable<'T>) = query.ToFeedIterator().AsAsyncEnumerable<'T> ()
25+
/// <summary>
26+
/// Executes Cosmos DB query and asynchronously iterates Cosmos DB <see cref="FeedIterator{T}" />.
27+
/// </summary>
28+
/// <param name="cancellationToken">Cancellation token</param>
29+
/// <param name="iterator">Cosmos DB feed iterator</param>
30+
let ofFeedIterator<'T> (cancellationToken : CancellationToken) (iterator : FeedIterator<'T>) =
31+
iterator.AsAsyncEnumerable<'T> (cancellationToken)
4132

42-
/// <summary>
43-
/// Created Cosmos DB <see cref="FeedIterator{T}" /> from <see cref="IQueryable{T}" /> and asynchronously iterates it.
44-
/// </summary>
45-
/// <param name="query">Cosmos DB querable</param>
46-
/// <param name="cancellationToken">Cancellation token</param>
47-
let ofCosmosDbQuerableWithCancellation<'T> (cancellationToken : CancellationToken) (query : IQueryable<'T>) =
48-
query.ToFeedIterator().AsAsyncEnumerable<'T> (cancellationToken)
33+
/// <summary>
34+
/// Creates Cosmos DB <see cref="FeedIterator{T}" /> from <see cref="IQueryable{T}" />
35+
/// and asynchronously iterates it.
36+
/// </summary>
37+
/// <param name="cancellationToken">Cancellation token</param>
38+
/// <param name="query">Cosmos DB queryable</param>
39+
let ofCosmosDbQueryable<'T> (cancellationToken : CancellationToken) (query : IQueryable<'T>) =
40+
query.ToFeedIterator().AsAsyncEnumerable<'T> (cancellationToken)

0 commit comments

Comments
 (0)