Skip to content

Commit 28e169d

Browse files
authored
Fixed incorrect TotalCount for MongoDB (#7669)
1 parent ea858cf commit 28e169d

13 files changed

+48
-4
lines changed

src/HotChocolate/Core/src/Types.CursorPagination/CursorPagingHandler.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,13 @@ protected async ValueTask<Connection<TEntity>> SliceAsync(
179179
return new Connection<TEntity>(ConnectionPageInfo.Empty, totalCount ?? -1);
180180
}
181181

182-
var data = await executor.QueryAsync(slicedQuery, offset, countRequired, cancellationToken).ConfigureAwait(false);
182+
var data = await executor.QueryAsync(
183+
slicedQuery,
184+
originalQuery,
185+
offset,
186+
countRequired,
187+
cancellationToken).ConfigureAwait(false);
188+
183189
var moreItemsReturnedThanRequested = data.Edges.Length > length;
184190
var isSequenceFromStart = offset == 0;
185191
var edges = data.Edges;

src/HotChocolate/Core/src/Types.CursorPagination/ICursorPaginationQueryExecutor.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ ValueTask<int> CountAsync(
3838
/// <param name="slicedQuery">
3939
/// The sliced query that should be executed.
4040
/// </param>
41+
/// <param name="originalQuery">
42+
/// The original query.
43+
/// </param>
4144
/// <param name="offset">
4245
/// Teh offset for the index edge.
4346
/// </param>
@@ -52,6 +55,7 @@ ValueTask<int> CountAsync(
5255
/// </returns>
5356
ValueTask<CursorPaginationData<TEntity>> QueryAsync(
5457
TQuery slicedQuery,
58+
TQuery originalQuery,
5559
int offset,
5660
bool includeTotalCount,
5761
CancellationToken cancellationToken);

src/HotChocolate/Core/src/Types.CursorPagination/QueryableCursorPagingHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public ValueTask<int> CountAsync(
5656

5757
public async ValueTask<CursorPaginationData<TEntity>> QueryAsync(
5858
IQueryable<TEntity> slicedQuery,
59+
IQueryable<TEntity> originalQuery,
5960
int offset,
6061
bool includeTotalCount,
6162
CancellationToken cancellationToken)
@@ -65,7 +66,6 @@ public async ValueTask<CursorPaginationData<TEntity>> QueryAsync(
6566

6667
if (includeTotalCount)
6768
{
68-
var originalQuery = executable.Source;
6969
var combinedQuery = slicedQuery.Select(t => new { TotalCount = originalQuery.Count(), Item = t });
7070
totalCount = 0;
7171

src/HotChocolate/MongoDb/src/Data/Paging/MongoDbCursorPagingHandler.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,15 @@ public async ValueTask<int> CountAsync(
5757

5858
public async ValueTask<CursorPaginationData<TEntity>> QueryAsync(
5959
IMongoPagingContainer<TEntity> slicedQuery,
60+
IMongoPagingContainer<TEntity> originalQuery,
6061
int offset,
6162
bool includeTotalCount,
6263
CancellationToken cancellationToken)
6364
{
6465
if (includeTotalCount)
6566
{
6667
var itemsTask = slicedQuery.QueryAsync(offset, cancellationToken);
67-
var countTask = slicedQuery.CountAsync(cancellationToken);
68+
var countTask = originalQuery.CountAsync(cancellationToken);
6869

6970
await Task.WhenAll(itemsTask, countTask).ConfigureAwait(false);
7071

src/HotChocolate/MongoDb/test/Data.MongoDb.Paging.Tests/MongoDbCursorPagingAggregateFluentTests.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,9 @@ public async Task TotalCount_AndFirst()
200200
var result = await executor.ExecuteAsync(
201201
@"{
202202
foos(first:1) {
203+
nodes {
204+
bar
205+
}
203206
totalCount
204207
}
205208
}");

src/HotChocolate/MongoDb/test/Data.MongoDb.Paging.Tests/MongoDbCursorPagingFindFluentTests.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,9 @@ public async Task TotalCount_AndFirst()
234234
var result = await executor.ExecuteAsync(
235235
@"{
236236
foos(first:1) {
237+
nodes {
238+
bar
239+
}
237240
totalCount
238241
}
239242
}");

src/HotChocolate/MongoDb/test/Data.MongoDb.Paging.Tests/__snapshots__/MongoDbCursorPagingAggregateFluentTests.TotalCount_AndFirst.snap

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
{
22
"data": {
33
"foos": {
4+
"nodes": [
5+
{
6+
"bar": "a"
7+
}
8+
],
49
"totalCount": 5
510
}
611
}

src/HotChocolate/MongoDb/test/Data.MongoDb.Paging.Tests/__snapshots__/MongoDbCursorPagingFindFluentTests.TotalCount_AndFirst.snap

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
{
22
"data": {
33
"foos": {
4+
"nodes": [
5+
{
6+
"bar": "a"
7+
}
8+
],
49
"totalCount": 5
510
}
611
}

src/HotChocolate/Raven/src/Data/Pagination/RavenCursorPagingHandler.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,15 @@ public async ValueTask<int> CountAsync(
6161

6262
public async ValueTask<CursorPaginationData<TEntity>> QueryAsync(
6363
RavenPagingContainer<TEntity> slicedQuery,
64+
RavenPagingContainer<TEntity> originalQuery,
6465
int offset,
6566
bool includeTotalCount,
6667
CancellationToken cancellationToken)
6768
{
6869
if (includeTotalCount)
6970
{
7071
var itemsTask = slicedQuery.QueryAsync(offset, cancellationToken);
71-
var countTask = slicedQuery.CountAsync(cancellationToken);
72+
var countTask = originalQuery.CountAsync(cancellationToken);
7273

7374
await Task.WhenAll(itemsTask, countTask).ConfigureAwait(false);
7475

src/HotChocolate/Raven/test/Data.Raven.Paging.Tests/RavenAsyncDocumentQueryTests.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,9 @@ public async Task Cursor_TotalCount_AndFirst()
190190
var result = await executor.ExecuteAsync(
191191
@"{
192192
foos(first:1) {
193+
nodes {
194+
bar
195+
}
193196
totalCount
194197
}
195198
}");

0 commit comments

Comments
 (0)