/** * CRUD for redis_keys table. */ import type Database from './driver.ts'; /** A redis_keys row. expiresAt is a BigInt when it exceeds the safe integer range. */ export interface KeyMeta { key: Buffer; type: number; expiresAt: number | bigint | null; setCount: number | null; hashCount: number | null; zsetCount: number | null; version: number; updatedAt: number; } export interface KeySetOptions { updatedAt?: number; expiresAt?: number | bigint | null; existingMeta?: KeyMeta | null; setCount?: number | null; hashCount?: number | null; zsetCount?: number | null; } export interface CountUpdateOptions { touchUpdatedAt?: boolean; updatedAt?: number; } export interface KeyCounter { /** Rows in redis_keys, including expired keys not yet removed. */ get(): number; /** Record rows inserted (+) or deleted (-) by a statement that just ran on this connection. */ add(delta: number | bigint): void; } /** * In-memory row count of redis_keys for a connection, counted once when first requested. * Every statement on this connection that inserts or deletes redis_keys rows reports * its change count; rolled-back deltas are undone. Commits by other connections change * PRAGMA data_version, which triggers one recount. */ export declare function getKeyCounter(db: Database): KeyCounter; export declare function createKeysStorage(db: Database): { KEY_TYPES: { STRING: number; HASH: number; SET: number; LIST: number; ZSET: number; }; get(key: Buffer): KeyMeta | null; set(key: Buffer, type: number, options?: KeySetOptions): void; setExpires(key: Buffer, expiresAt: number | bigint | null, updatedAt?: number): void; bumpVersion(key: Buffer): void; setSetCount(key: Buffer, setCount: number, options?: CountUpdateOptions): void; incrSetCount(key: Buffer, delta: number, options?: CountUpdateOptions): void; setHashCount(key: Buffer, hashCount: number, options?: CountUpdateOptions): void; incrHashCount(key: Buffer, delta: number, options?: CountUpdateOptions): void; setZsetCount(key: Buffer, zsetCount: number, options?: CountUpdateOptions): void; incrZsetCount(key: Buffer, delta: number, options?: CountUpdateOptions): void; delete(key: Buffer): import("node:sqlite").StatementResultingChanges; deleteAll(): number | bigint; deleteExpired(now: number): import("node:sqlite").StatementResultingChanges; /** Rows in redis_keys, including expired keys not yet removed. */ count(): number; /** Keys that are logically live at now: excludes expired keys and hashes whose fields all expired. */ countLive(now: number): number; scan(limit: number, offset: number): Buffer[]; }; export type KeysStorage = ReturnType;