Skip to content
Sarj Code Standards

no-offset-pagination

Prefer keyset pagination for embedded SQL queries using OFFSET.

Why

Offset pagination scans skipped rows and shifts page boundaries under concurrent writes.

Fix

Consider a keyset cursor that preserves the query's complete ordering, tie-breakers, and filters.

Examples

Before — flagged Inspect native-decoded query text
src/page.ts
db.query("SELECT id FROM runs ORDER BY id LIMIT 1 OFF\u0053ET 1");
After — preferred Ignore native-decoded comment data
src/page.ts
db.query("SELECT id FROM runs /* OFF\x53ET 1 */");
Before — flagged Do not page by offset
src/runs.ts
db.query(`SELECT id FROM runs ORDER BY id LIMIT ? OFFSET ?`);
After — preferred Page from a stable cursor
src/runs.ts
db.prepare(`SELECT id FROM runs WHERE id > ? ORDER BY id LIMIT ?`).all();