From 5433b61d3e2a1a23672eaa8fffb9de755c677731 Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Wed, 12 Aug 2026 04:06:50 +0000 Subject: [PATCH] fix(grid): preserve page size at query result limit Closes #5965 --- .../lib/dataGrid/__tests__/queryResultRowLimit.spec.ts | 9 ++++++++- apps/desktop/src/lib/dataGrid/queryResultRowLimit.ts | 3 ++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/apps/desktop/src/lib/dataGrid/__tests__/queryResultRowLimit.spec.ts b/apps/desktop/src/lib/dataGrid/__tests__/queryResultRowLimit.spec.ts index be5025a927..bfb495ced4 100644 --- a/apps/desktop/src/lib/dataGrid/__tests__/queryResultRowLimit.spec.ts +++ b/apps/desktop/src/lib/dataGrid/__tests__/queryResultRowLimit.spec.ts @@ -17,10 +17,17 @@ describe("query result row limits", () => { it("limits the final page and caps totals", () => { expect(limitQueryPagination({ limit: 100, offset: 950 }, 1_000)).toEqual({ limit: 50, offset: 950 }); - expect(limitQueryPagination({ limit: 100, offset: 2_000 }, 1_000)).toEqual({ limit: 1, offset: 999 }); + expect(limitQueryPagination({ limit: 100, offset: 2_000 }, 1_000)).toEqual({ limit: 100, offset: 900 }); expect(queryResultLimitReached(950, 50, 1_000)).toBe(true); expect(queryResultLimitReached(900, 50, 1_000)).toBe(false); expect(capQueryResultTotal(1_500, 1_000)).toBe(1_000); expect(capQueryResultTotal(1_500, undefined)).toBe(1_500); }); + + it("keeps the configured page size when a last-page jump exceeds the row cap", () => { + expect(limitQueryPagination({ limit: 100, offset: 2_952_900 }, 100_000)).toEqual({ limit: 100, offset: 99_900 }); + expect(limitQueryPagination({ limit: 100, offset: 2_952_900 }, undefined)).toEqual({ limit: 100, offset: 2_952_900 }); + expect(limitQueryPagination({ limit: 100, offset: 2_000 }, 1_050)).toEqual({ limit: 50, offset: 1_000 }); + expect(limitQueryPagination({ limit: 100, offset: 2_000 }, 50)).toEqual({ limit: 50, offset: 0 }); + }); }); diff --git a/apps/desktop/src/lib/dataGrid/queryResultRowLimit.ts b/apps/desktop/src/lib/dataGrid/queryResultRowLimit.ts index edafd3cfd0..432b334dd5 100644 --- a/apps/desktop/src/lib/dataGrid/queryResultRowLimit.ts +++ b/apps/desktop/src/lib/dataGrid/queryResultRowLimit.ts @@ -22,7 +22,8 @@ export function agentProtocolQueryResultMaxRows(maxRows: number | undefined): nu export function limitQueryPagination(pagination: T, maxRows: number | undefined): T { if (maxRows === undefined) return pagination; - const offset = Math.min(Math.max(0, pagination.offset), maxRows - 1); + const requestedOffset = Math.max(0, pagination.offset); + const offset = requestedOffset < maxRows ? requestedOffset : Math.floor((maxRows - 1) / pagination.limit) * pagination.limit; const remaining = maxRows - offset; return { ...pagination, limit: Math.min(pagination.limit, remaining), offset }; }