fix page position collation

This commit is contained in:
Philipinho
2026-05-27 13:27:31 +01:00
parent 41aaeddac4
commit cb3b409a5a
2 changed files with 6 additions and 2 deletions
@@ -310,6 +310,7 @@ export class PageService {
expression: 'position', expression: 'position',
direction: 'asc', direction: 'asc',
orderModifier: (ob) => ob.collate('C').asc(), orderModifier: (ob) => ob.collate('C').asc(),
cursorExpression: sql`position collate "C"`,
}, },
{ expression: 'id', direction: 'asc' }, { expression: 'id', direction: 'asc' },
], ],
@@ -14,12 +14,14 @@ type SortField<DB, TB extends keyof DB, O> =
| (StringReference<DB, TB> & `${string}.${keyof O & string}`); | (StringReference<DB, TB> & `${string}.${keyof O & string}`);
direction: OrderByDirection; direction: OrderByDirection;
orderModifier?: OrderByModifiers; orderModifier?: OrderByModifiers;
cursorExpression?: ReferenceExpression<DB, TB>;
key?: keyof O & string; key?: keyof O & string;
} }
| { | {
expression: ReferenceExpression<DB, TB>; expression: ReferenceExpression<DB, TB>;
direction: OrderByDirection; direction: OrderByDirection;
orderModifier?: OrderByModifiers; orderModifier?: OrderByModifiers;
cursorExpression?: ReferenceExpression<DB, TB>;
key: keyof O & string; key: keyof O & string;
}; };
@@ -202,11 +204,12 @@ export async function executeWithCursorPagination<
const comparison = field.direction === defaultDirection ? '>' : '<'; const comparison = field.direction === defaultDirection ? '>' : '<';
const value = cursor[field.key as keyof typeof cursor]; 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) { if (expression) {
conditions.push(and([eb(field.expression, '=', value), expression])); conditions.push(and([eb(compareExpr, '=', value), expression]));
} }
expression = or(conditions); expression = or(conditions);