import type { NormalizedDeleteRangeOptions } from './delete-range'; import { type ScanOptions } from './interface'; export declare const SQLITE_CREATE_KEY_VALUE_TABLE = "CREATE TABLE IF NOT EXISTS kv (\n key TEXT PRIMARY KEY,\n value BLOB NOT NULL\n) WITHOUT ROWID"; export declare const SQLITE_SELECT_VALUE_BY_KEY = "SELECT value FROM kv WHERE key = ?"; export declare const SQLITE_UPSERT_VALUE_BY_KEY = "INSERT INTO kv (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value"; export declare const SQLITE_DELETE_VALUE_BY_KEY = "DELETE FROM kv WHERE key = ?"; export declare const SQLITE_SELECT_KEY_PRESENCE = "SELECT 1 AS present FROM kv WHERE key = ? LIMIT 1"; export declare const SQLITE_COUNT_KEYS_BY_PREFIX = "SELECT COUNT(*) AS count FROM kv WHERE key >= ? AND key < ?"; export declare const SQLITE_DELETE_KEYS_BY_PREFIX = "DELETE FROM kv WHERE key >= ? AND key < ?"; export type SqliteKeyRangeQueryParameter = string | number; export type SqliteKeyRangeQuery = { parameters: SqliteKeyRangeQueryParameter[]; sqlSuffix: string; }; /** A fully-built SQL statement and its bound parameters (SELECT or DELETE). */ export type SqliteBuiltQuery = { parameters: SqliteKeyRangeQueryParameter[]; sql: string; }; export declare function buildSqlitePrefixRangeParameters(prefix: string): [string, string]; export declare function buildSqliteKeyRangeQuery(prefix: string, options?: ScanOptions): SqliteKeyRangeQuery; /** * Build a bounded-range `DELETE` for a `kv`-shaped table from already-validated * delete options. * * Without `limit`, emits a plain `DELETE FROM WHERE ` — no * ordering, since order is meaningless when deleting the whole matched range. * With `limit`, emits a portable subquery form so the lowest (ascending) keys * are deleted first: `DELETE FROM
WHERE key IN (SELECT key FROM *
WHERE ORDER BY key ASC LIMIT ?)`. The subquery avoids * relying on `DELETE ... ORDER BY ... LIMIT`, which requires the * `SQLITE_ENABLE_UPDATE_DELETE_LIMIT` compile flag and is not available on * libSQL/Turso. * * Requires {@link NormalizedDeleteRangeOptions}: the type guarantees at least * one bound is present, so this builder can never produce a whole-prefix wipe. * * `table` defaults to the unqualified `kv` so every existing caller (which all * use the fixed `kv` table) emits byte-identical SQL. Adapters with a * caller-configured table name (validated as a strict SQL identifier before it * reaches this builder) pass their own table reference. */ export declare function buildSqliteKeyRangeDelete(prefix: string, options: NormalizedDeleteRangeOptions, table?: string): SqliteBuiltQuery; export declare function buildSqliteKeyValueRangeSelect(prefix: string, options?: ScanOptions): SqliteBuiltQuery; export declare function buildSqliteKeyRangeSelect(prefix: string, options?: ScanOptions): SqliteBuiltQuery;