diff --git a/dev/src/reference/query-util.ts b/dev/src/reference/query-util.ts index c05e84b39..a5aa0c24f 100644 --- a/dev/src/reference/query-util.ts +++ b/dev/src/reference/query-util.ts @@ -344,7 +344,7 @@ export class QueryUtil< // call to `requestStream()` will backoff should the restart // fail before delivering any results. let newQuery: Query; - if (!this._queryOptions.limit) { + if (this._queryOptions.limit === undefined) { newQuery = query; } else { const newLimit = diff --git a/dev/src/reference/query.ts b/dev/src/reference/query.ts index d3c383417..217095ad7 100644 --- a/dev/src/reference/query.ts +++ b/dev/src/reference/query.ts @@ -1439,7 +1439,7 @@ export class Query< structuredQuery.startAt = this.toCursor(this._queryOptions.startAt); structuredQuery.endAt = this.toCursor(this._queryOptions.endAt); - if (this._queryOptions.limit) { + if (this._queryOptions.limit !== undefined) { structuredQuery.limit = {value: this._queryOptions.limit}; } diff --git a/dev/test/query.ts b/dev/test/query.ts index b3ee1595b..b11913ace 100644 --- a/dev/test/query.ts +++ b/dev/test/query.ts @@ -1915,6 +1915,20 @@ describe('limit() interface', () => { query = query.limit(1).limit(2).limit(3); await query.get(); }); + + it('handles limit(0) correctly', async () => { + const overrides: ApiOverride = { + runQuery: request => { + queryEquals(request, limit(0)); + return emptyQueryStream(); + }, + }; + + firestore = await createInstance(overrides); + let query: Query = firestore.collection('collectionId'); + query = query.limit(0); + await query.get(); + }); }); describe('limitToLast() interface', () => {