From cb3b409a5a4ee0e49d99bb9d52a5da53c35c7f80 Mon Sep 17 00:00:00 2001 From: Philipinho <16838612+Philipinho@users.noreply.github.com> Date: Wed, 27 May 2026 13:27:31 +0100 Subject: [PATCH] fix page position collation --- apps/server/src/core/page/services/page.service.ts | 1 + apps/server/src/database/pagination/cursor-pagination.ts | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/server/src/core/page/services/page.service.ts b/apps/server/src/core/page/services/page.service.ts index 7b285c7fb..0e0b24f07 100644 --- a/apps/server/src/core/page/services/page.service.ts +++ b/apps/server/src/core/page/services/page.service.ts @@ -310,6 +310,7 @@ export class PageService { expression: 'position', direction: 'asc', orderModifier: (ob) => ob.collate('C').asc(), + cursorExpression: sql`position collate "C"`, }, { expression: 'id', direction: 'asc' }, ], diff --git a/apps/server/src/database/pagination/cursor-pagination.ts b/apps/server/src/database/pagination/cursor-pagination.ts index 4254702ec..cca94cf9c 100644 --- a/apps/server/src/database/pagination/cursor-pagination.ts +++ b/apps/server/src/database/pagination/cursor-pagination.ts @@ -14,12 +14,14 @@ type SortField = | (StringReference & `${string}.${keyof O & string}`); direction: OrderByDirection; orderModifier?: OrderByModifiers; + cursorExpression?: ReferenceExpression; key?: keyof O & string; } | { expression: ReferenceExpression; direction: OrderByDirection; orderModifier?: OrderByModifiers; + cursorExpression?: ReferenceExpression; key: keyof O & string; }; @@ -202,11 +204,12 @@ export async function executeWithCursorPagination< const comparison = field.direction === defaultDirection ? '>' : '<'; const value = cursor[field.key as keyof typeof cursor]; + const compareExpr = field.cursorExpression ?? field.expression; - const conditions = [eb(field.expression, comparison, value)]; + const conditions = [eb(compareExpr, comparison, value)]; if (expression) { - conditions.push(and([eb(field.expression, '=', value), expression])); + conditions.push(and([eb(compareExpr, '=', value), expression])); } expression = or(conditions);