Browse Source

Update the MongoDB to use the new built-in ToAsyncEnumerable() extensions

pull/2514/head
Kévin Chalet 2 weeks ago
parent
commit
3cca8925fd
  1. 56
      src/OpenIddict.MongoDb/OpenIddictMongoDbHelpers.cs
  2. 8
      src/OpenIddict.MongoDb/Stores/OpenIddictMongoDbApplicationStore.cs
  3. 10
      src/OpenIddict.MongoDb/Stores/OpenIddictMongoDbAuthorizationStore.cs
  4. 6
      src/OpenIddict.MongoDb/Stores/OpenIddictMongoDbResourceStore.cs
  5. 8
      src/OpenIddict.MongoDb/Stores/OpenIddictMongoDbScopeStore.cs
  6. 12
      src/OpenIddict.MongoDb/Stores/OpenIddictMongoDbTokenStore.cs

56
src/OpenIddict.MongoDb/OpenIddictMongoDbHelpers.cs

@ -1,56 +0,0 @@
/*
* Licensed under the Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
* See https://github.com/openiddict/openiddict-core for more information concerning
* the license and the contributors participating to this project.
*/
using System.Runtime.CompilerServices;
namespace MongoDB.Driver;
/// <summary>
/// Exposes extensions simplifying the integration between OpenIddict and MongoDB.
/// </summary>
internal static class OpenIddictMongoDbHelpers
{
/// <summary>
/// Executes the query and returns the results as a streamed async enumeration.
/// </summary>
/// <typeparam name="T">The type of the returned entities.</typeparam>
/// <param name="source">The query source.</param>
/// <param name="cancellationToken">The <see cref="CancellationToken"/> that can be used to abort the operation.</param>
/// <returns>The streamed async enumeration containing the results.</returns>
internal static IAsyncEnumerable<T> ToAsyncEnumerable<T>(this IAsyncCursorSource<T> source, CancellationToken cancellationToken)
{
ArgumentNullException.ThrowIfNull(source);
return ExecuteAsync(source, cancellationToken);
static async IAsyncEnumerable<T> ExecuteAsync(IAsyncCursorSource<T> source, [EnumeratorCancellation] CancellationToken cancellationToken)
{
using var cursor = await source.ToCursorAsync(cancellationToken);
while (await cursor.MoveNextAsync(cancellationToken))
{
foreach (var element in cursor.Current)
{
yield return element;
}
}
}
}
/// <summary>
/// Executes the query and returns the results as a streamed async enumeration.
/// </summary>
/// <typeparam name="T">The type of the returned entities.</typeparam>
/// <param name="source">The query source.</param>
/// <param name="cancellationToken">The <see cref="CancellationToken"/> that can be used to abort the operation.</param>
/// <returns>The streamed async enumeration containing the results.</returns>
internal static IAsyncEnumerable<T> ToAsyncEnumerable<T>(this IQueryable<T> source, CancellationToken cancellationToken)
{
ArgumentNullException.ThrowIfNull(source);
return ((IAsyncCursorSource<T>) source).ToAsyncEnumerable(cancellationToken);
}
}

8
src/OpenIddict.MongoDb/Stores/OpenIddictMongoDbApplicationStore.cs

@ -151,7 +151,7 @@ public class OpenIddictMongoDbApplicationStore<
var collection = database.GetCollection<TApplication>(Options.CurrentValue.ApplicationsCollectionName);
await foreach (var application in collection.Find(application =>
application.PostLogoutRedirectUris!.Contains(uri)).ToAsyncEnumerable(cancellationToken))
application.PostLogoutRedirectUris!.Contains(uri)).ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return application;
}
@ -172,7 +172,7 @@ public class OpenIddictMongoDbApplicationStore<
var collection = database.GetCollection<TApplication>(Options.CurrentValue.ApplicationsCollectionName);
await foreach (var application in collection.Find(application =>
application.RedirectUris!.Contains(uri)).ToAsyncEnumerable(cancellationToken))
application.RedirectUris!.Contains(uri)).ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return application;
}
@ -364,7 +364,7 @@ public class OpenIddictMongoDbApplicationStore<
query = query.Take(count.Value);
}
await foreach (var application in ((IAsyncCursorSource<TApplication>) query).ToAsyncEnumerable(cancellationToken))
await foreach (var application in ((IAsyncCursorSource<TApplication>) query).ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return application;
}
@ -384,7 +384,7 @@ public class OpenIddictMongoDbApplicationStore<
var database = await Context.GetDatabaseAsync(cancellationToken);
var collection = database.GetCollection<TApplication>(Options.CurrentValue.ApplicationsCollectionName);
await foreach (var element in query(collection.AsQueryable(), state).ToAsyncEnumerable(cancellationToken))
await foreach (var element in query(collection.AsQueryable(), state).ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return element;
}

10
src/OpenIddict.MongoDb/Stores/OpenIddictMongoDbAuthorizationStore.cs

@ -146,7 +146,7 @@ public class OpenIddictMongoDbAuthorizationStore<
query = query.Where(authorization => Enumerable.All(values, scope => authorization.Scopes!.Contains(scope)));
}
await foreach (var authorization in query.ToAsyncEnumerable(cancellationToken))
await foreach (var authorization in query.ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return authorization;
}
@ -166,7 +166,7 @@ public class OpenIddictMongoDbAuthorizationStore<
var collection = database.GetCollection<TAuthorization>(Options.CurrentValue.AuthorizationsCollectionName);
await foreach (var authorization in collection.Find(authorization =>
authorization.ApplicationId == ObjectId.Parse(identifier)).ToAsyncEnumerable(cancellationToken))
authorization.ApplicationId == ObjectId.Parse(identifier)).ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return authorization;
}
@ -199,7 +199,7 @@ public class OpenIddictMongoDbAuthorizationStore<
var collection = database.GetCollection<TAuthorization>(Options.CurrentValue.AuthorizationsCollectionName);
await foreach (var authorization in collection.Find(authorization =>
authorization.Subject == subject).ToAsyncEnumerable(cancellationToken))
authorization.Subject == subject).ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return authorization;
}
@ -330,7 +330,7 @@ public class OpenIddictMongoDbAuthorizationStore<
query = query.Take(count.Value);
}
await foreach (var authorization in ((IAsyncCursorSource<TAuthorization>) query).ToAsyncEnumerable(cancellationToken))
await foreach (var authorization in ((IAsyncCursorSource<TAuthorization>) query).ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return authorization;
}
@ -350,7 +350,7 @@ public class OpenIddictMongoDbAuthorizationStore<
var database = await Context.GetDatabaseAsync(cancellationToken);
var collection = database.GetCollection<TAuthorization>(Options.CurrentValue.AuthorizationsCollectionName);
await foreach (var element in query(collection.AsQueryable(), state).ToAsyncEnumerable(cancellationToken))
await foreach (var element in query(collection.AsQueryable(), state).ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return element;
}

6
src/OpenIddict.MongoDb/Stores/OpenIddictMongoDbResourceStore.cs

@ -142,7 +142,7 @@ public class OpenIddictMongoDbResourceStore<
var database = await Context.GetDatabaseAsync(cancellationToken);
var collection = database.GetCollection<TResource>(Options.CurrentValue.ResourcesCollectionName);
await foreach (var resource in collection.Find(resource => names.Contains(resource.Name!)).ToAsyncEnumerable(cancellationToken))
await foreach (var resource in collection.Find(resource => names.Contains(resource.Name!)).ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return resource;
}
@ -269,7 +269,7 @@ public class OpenIddictMongoDbResourceStore<
query = query.Take(count.Value);
}
await foreach (var resource in ((IAsyncCursorSource<TResource>) query).ToAsyncEnumerable(cancellationToken))
await foreach (var resource in ((IAsyncCursorSource<TResource>) query).ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return resource;
}
@ -289,7 +289,7 @@ public class OpenIddictMongoDbResourceStore<
var database = await Context.GetDatabaseAsync(cancellationToken);
var collection = database.GetCollection<TResource>(Options.CurrentValue.ResourcesCollectionName);
await foreach (var element in query(collection.AsQueryable(), state).ToAsyncEnumerable(cancellationToken))
await foreach (var element in query(collection.AsQueryable(), state).ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return element;
}

8
src/OpenIddict.MongoDb/Stores/OpenIddictMongoDbScopeStore.cs

@ -142,7 +142,7 @@ public class OpenIddictMongoDbScopeStore<
var database = await Context.GetDatabaseAsync(cancellationToken);
var collection = database.GetCollection<TScope>(Options.CurrentValue.ScopesCollectionName);
await foreach (var scope in collection.Find(scope => names.Contains(scope.Name!)).ToAsyncEnumerable(cancellationToken))
await foreach (var scope in collection.Find(scope => names.Contains(scope.Name!)).ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return scope;
}
@ -161,7 +161,7 @@ public class OpenIddictMongoDbScopeStore<
var database = await Context.GetDatabaseAsync(cancellationToken);
var collection = database.GetCollection<TScope>(Options.CurrentValue.ScopesCollectionName);
await foreach (var scope in collection.Find(scope => scope.Resources!.Contains(resource)).ToAsyncEnumerable(cancellationToken))
await foreach (var scope in collection.Find(scope => scope.Resources!.Contains(resource)).ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return scope;
}
@ -296,7 +296,7 @@ public class OpenIddictMongoDbScopeStore<
query = query.Take(count.Value);
}
await foreach (var scope in ((IAsyncCursorSource<TScope>) query).ToAsyncEnumerable(cancellationToken))
await foreach (var scope in ((IAsyncCursorSource<TScope>) query).ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return scope;
}
@ -316,7 +316,7 @@ public class OpenIddictMongoDbScopeStore<
var database = await Context.GetDatabaseAsync(cancellationToken);
var collection = database.GetCollection<TScope>(Options.CurrentValue.ScopesCollectionName);
await foreach (var element in query(collection.AsQueryable(), state).ToAsyncEnumerable(cancellationToken))
await foreach (var element in query(collection.AsQueryable(), state).ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return element;
}

12
src/OpenIddict.MongoDb/Stores/OpenIddictMongoDbTokenStore.cs

@ -134,7 +134,7 @@ public class OpenIddictMongoDbTokenStore<
query = query.Where(token => token.Type == type);
}
await foreach (var token in query.ToAsyncEnumerable(cancellationToken))
await foreach (var token in query.ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return token;
}
@ -153,7 +153,7 @@ public class OpenIddictMongoDbTokenStore<
var collection = database.GetCollection<TToken>(Options.CurrentValue.TokensCollectionName);
await foreach (var token in collection.Find(token =>
token.ApplicationId == ObjectId.Parse(identifier)).ToAsyncEnumerable(cancellationToken))
token.ApplicationId == ObjectId.Parse(identifier)).ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return token;
}
@ -173,7 +173,7 @@ public class OpenIddictMongoDbTokenStore<
var collection = database.GetCollection<TToken>(Options.CurrentValue.TokensCollectionName);
await foreach (var token in collection.Find(token =>
token.AuthorizationId == ObjectId.Parse(identifier)).ToAsyncEnumerable(cancellationToken))
token.AuthorizationId == ObjectId.Parse(identifier)).ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return token;
}
@ -214,7 +214,7 @@ public class OpenIddictMongoDbTokenStore<
var database = await Context.GetDatabaseAsync(cancellationToken);
var collection = database.GetCollection<TToken>(Options.CurrentValue.TokensCollectionName);
await foreach (var token in collection.Find(token => token.Subject == subject).ToAsyncEnumerable(cancellationToken))
await foreach (var token in collection.Find(token => token.Subject == subject).ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return token;
}
@ -377,7 +377,7 @@ public class OpenIddictMongoDbTokenStore<
query = query.Take(count.Value);
}
await foreach (var token in ((IAsyncCursorSource<TToken>) query).ToAsyncEnumerable(cancellationToken))
await foreach (var token in ((IAsyncCursorSource<TToken>) query).ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return token;
}
@ -397,7 +397,7 @@ public class OpenIddictMongoDbTokenStore<
var database = await Context.GetDatabaseAsync(cancellationToken);
var collection = database.GetCollection<TToken>(Options.CurrentValue.TokensCollectionName);
await foreach (var element in query(collection.AsQueryable(), state).ToAsyncEnumerable(cancellationToken))
await foreach (var element in query(collection.AsQueryable(), state).ToAsyncEnumerable().WithCancellation(cancellationToken))
{
yield return element;
}

Loading…
Cancel
Save