sqlite-executor 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/LICENSE +46 -0
  2. package/README.md +312 -0
  3. package/dist/cjs/constants.d.cts +2 -0
  4. package/dist/cjs/core/classifier.d.cts +13 -0
  5. package/dist/cjs/core/executor.d.cts +94 -0
  6. package/dist/cjs/core/lruCache.d.cts +16 -0
  7. package/dist/cjs/core/metrics.d.cts +84 -0
  8. package/dist/cjs/core/parser.d.cts +55 -0
  9. package/dist/cjs/core/pipelineEngine.d.cts +91 -0
  10. package/dist/cjs/core/process.d.cts +38 -0
  11. package/dist/cjs/core/protocol.d.cts +23 -0
  12. package/dist/cjs/core/queue.d.cts +40 -0
  13. package/dist/cjs/core/readerPool.d.cts +40 -0
  14. package/dist/cjs/core/settleUtils.d.cts +36 -0
  15. package/dist/cjs/core/taskWorker.d.cts +50 -0
  16. package/dist/cjs/core/transactionScope.d.cts +83 -0
  17. package/dist/cjs/index.cjs +3939 -0
  18. package/dist/cjs/index.cjs.map +1 -0
  19. package/dist/cjs/index.d.cts +28 -0
  20. package/dist/cjs/stream/stream.d.cts +43 -0
  21. package/dist/cjs/transaction/transaction.d.cts +32 -0
  22. package/dist/cjs/utils/escape.d.cts +7 -0
  23. package/dist/cjs/utils/interpolate.d.cts +8 -0
  24. package/dist/cjs/utils/normalize.d.cts +7 -0
  25. package/dist/cjs/utils/timeout.d.cts +11 -0
  26. package/dist/cjs/utils/token.d.cts +7 -0
  27. package/dist/cjs/which.d.cts +8 -0
  28. package/dist/esm/constants.d.mts +2 -0
  29. package/dist/esm/core/classifier.d.mts +13 -0
  30. package/dist/esm/core/executor.d.mts +94 -0
  31. package/dist/esm/core/lruCache.d.mts +16 -0
  32. package/dist/esm/core/metrics.d.mts +84 -0
  33. package/dist/esm/core/parser.d.mts +55 -0
  34. package/dist/esm/core/pipelineEngine.d.mts +91 -0
  35. package/dist/esm/core/process.d.mts +38 -0
  36. package/dist/esm/core/protocol.d.mts +23 -0
  37. package/dist/esm/core/queue.d.mts +40 -0
  38. package/dist/esm/core/readerPool.d.mts +40 -0
  39. package/dist/esm/core/settleUtils.d.mts +36 -0
  40. package/dist/esm/core/taskWorker.d.mts +50 -0
  41. package/dist/esm/core/transactionScope.d.mts +83 -0
  42. package/dist/esm/index.d.mts +28 -0
  43. package/dist/esm/index.mjs +3865 -0
  44. package/dist/esm/index.mjs.map +1 -0
  45. package/dist/esm/stream/stream.d.mts +43 -0
  46. package/dist/esm/transaction/transaction.d.mts +32 -0
  47. package/dist/esm/utils/escape.d.mts +7 -0
  48. package/dist/esm/utils/interpolate.d.mts +8 -0
  49. package/dist/esm/utils/normalize.d.mts +7 -0
  50. package/dist/esm/utils/timeout.d.mts +11 -0
  51. package/dist/esm/utils/token.d.mts +7 -0
  52. package/dist/esm/which.d.mts +8 -0
  53. package/package.json +68 -0
@@ -0,0 +1,16 @@
1
+ /** 基于 Map 插入顺序的 LRU 缓存。 */
2
+ export declare class LRUCache<T> {
3
+ constructor(options?: { maxSize?: number; maxKeyLength?: number });
4
+
5
+ /** 获取缓存值,命中时提升到末尾。未命中或 key 不合法时返回 undefined。 */
6
+ get(key: string): T | undefined;
7
+
8
+ /** 设置缓存值。达到容量上限时淘汰最旧条目。超长 key 不缓存。 */
9
+ set(key: string, value: T): void;
10
+
11
+ /** 当前缓存条目数。 */
12
+ get size(): number;
13
+
14
+ /** 清空缓存。 */
15
+ clear(): void;
16
+ }
@@ -0,0 +1,84 @@
1
+ /** Metrics.snapshot() 返回的快照结构 */
2
+ export interface MetricsSnapshot {
3
+ /** 总任务数 */
4
+ tasksTotal: number;
5
+ /** 成功任务数 */
6
+ tasksSuccess: number;
7
+ /** 失败任务数 */
8
+ tasksFailed: number;
9
+ /** 超时任务数 */
10
+ tasksTimeout: number;
11
+ /** 子进程重启次数 */
12
+ processRestarts: number;
13
+ /** execute 操作执行次数 */
14
+ executeCount: number;
15
+ /** query 操作执行次数 */
16
+ queryCount: number;
17
+ /** stream 操作执行次数 */
18
+ streamCount: number;
19
+ /** 平均查询耗时(毫秒) */
20
+ avgQueryTime: number;
21
+ /** 每秒查询数 */
22
+ qps: number;
23
+ /** 运行时长(秒) */
24
+ uptime: number;
25
+ }
26
+
27
+ /**
28
+ * 运行时指标收集器。
29
+ *
30
+ * 追踪 SQL 执行任务的吞吐、耗时、错误、超时和进程重启。
31
+ * 可通过 `snapshot()` 获取当前快照用于监控和告警。
32
+ */
33
+ export declare class Metrics {
34
+ /** 总任务数 */
35
+ get tasksTotal(): number;
36
+ /** 成功任务数 */
37
+ get tasksSuccess(): number;
38
+ /** 失败任务数 */
39
+ get tasksFailed(): number;
40
+ /** 超时任务数 */
41
+ get tasksTimeout(): number;
42
+ /** 子进程重启次数 */
43
+ get processRestarts(): number;
44
+ /** execute 操作执行次数 */
45
+ get executeCount(): number;
46
+ /** query 操作执行次数 */
47
+ get queryCount(): number;
48
+ /** stream 操作执行次数 */
49
+ get streamCount(): number;
50
+ /** 所有成功任务的总耗时(毫秒) */
51
+ get totalDuration(): number;
52
+ /** Metrics 实例的创建时间戳 */
53
+ get startTime(): number;
54
+
55
+ /**
56
+ * 增加任务总数计数。
57
+ *
58
+ * @param kind - 任务类型:execute(写操作)、query(查询)、stream(流式查询)
59
+ */
60
+ incrementTasksTotal(kind: "execute" | "query" | "stream"): void;
61
+
62
+ /**
63
+ * 增加成功任务计数,并累加耗时。
64
+ *
65
+ * @param duration - 任务执行耗时(毫秒)
66
+ */
67
+ incrementTasksSuccess(duration: number): void;
68
+
69
+ /** 增加失败任务计数。 */
70
+ incrementTasksFailed(): void;
71
+
72
+ /** 增加超时任务计数。 */
73
+ incrementTasksTimeout(): void;
74
+
75
+ /** 增加子进程重启次数计数。 */
76
+ incrementProcessRestarts(): void;
77
+
78
+ /**
79
+ * 获取当前运行时指标快照。
80
+ *
81
+ * @returns 当前所有指标的汇总快照
82
+ */
83
+ snapshot(): MetricsSnapshot;
84
+ }
@@ -0,0 +1,55 @@
1
+ /** JSON 值流式解析器的状态 */
2
+ export interface JsonValueParser {
3
+ feed(chunk: string): void;
4
+ reset(): void;
5
+ buffer: string;
6
+ start: number;
7
+ readPos: number;
8
+ nesting: number;
9
+ inString: boolean;
10
+ escaped: boolean;
11
+ }
12
+
13
+ /** 行流解析器的状态 */
14
+ export interface RowStreamParser {
15
+ feed(chunk: string): string;
16
+ reset(): void;
17
+ buffer: string;
18
+ started: boolean;
19
+ finished: boolean;
20
+ inString: boolean;
21
+ escaped: boolean;
22
+ elementStart: number;
23
+ elementEnd: number;
24
+ nesting: number;
25
+ readPos: number;
26
+ }
27
+
28
+ /**
29
+ * 将任意值转为 Error 对象。
30
+ * 如果值已经是 Error 则直接返回,否则包装为 Error。
31
+ *
32
+ * @param value - 可能为 Error、string 或其他类型的值
33
+ * @returns Error 实例
34
+ */
35
+ export function toError(value: unknown): Error;
36
+
37
+ /**
38
+ * 创建一个 JSON 值流式解析器。
39
+ * 从 JSON 数组的块式输入中逐个提取完整值,通过回调通知。
40
+ * 适用于 parse 完整的 JSON 结果。
41
+ *
42
+ * @param onValue - 每次解析出一个完整值时的回调
43
+ * @returns 解析器实例
44
+ */
45
+ export function createJsonValueParser(onValue: (raw: string) => void): JsonValueParser;
46
+
47
+ /**
48
+ * 创建一个行流解析器。
49
+ * 从 JSON 数组的块式输入中逐行提取原始字符串,通过回调通知。
50
+ * 适用于流式逐行处理结果而不缓存全部数据。
51
+ *
52
+ * @param onRow - 每解析出一行时的回调
53
+ * @returns 解析器实例
54
+ */
55
+ export function createRowStreamParser(onRow: (rawRow: string) => void): RowStreamParser;
@@ -0,0 +1,91 @@
1
+ import { ProcessManager } from "./process.mts";
2
+ import { Metrics } from "./metrics.mts";
3
+ import { Queue } from "./queue.mts";
4
+
5
+ /** PipelineEngine 的构造选项 */
6
+ export interface PipelineEngineOptions {
7
+ /** 运行时指标收集器 */
8
+ metrics: Metrics;
9
+ /** 单条语句超时时间(毫秒) */
10
+ statementTimeout: number;
11
+ /** 日志记录器(仅使用 error 级别) */
12
+ logger?: { error?: (...args: any[]) => void };
13
+ /** 管线化批量大小,控制一次 stdin.write 合并几条语句,默认 10 */
14
+ batchSize?: number;
15
+ /** 任务超时时的回调 */
16
+ onTaskTimeout?: (task: any) => void;
17
+ }
18
+
19
+ /**
20
+ * 管线化引擎。
21
+ *
22
+ * 核心调度组件,管理子进程的输入输出:
23
+ * - 将任务的 SQL payload 批量写入子进程 stdin(管线化)
24
+ * - 从 stdout 读取结果并路由到对应任务的 resolve/reject
25
+ * - 处理超时、错误、进程输出分割与解析
26
+ *
27
+ * 内部维护 mainQueue(待发送队列)和 inflight 计数器。
28
+ */
29
+ export declare class PipelineEngine {
30
+ constructor(processManager: ProcessManager, options: PipelineEngineOptions);
31
+
32
+ /** 主任务队列(待发送到子进程的任务列表) */
33
+ get mainQueue(): Queue;
34
+
35
+ /** 当前排队等待和正在执行的总语句数 */
36
+ get pendingStatements(): number;
37
+
38
+ /**
39
+ * 向引擎的缓冲区追加原始数据。
40
+ * 数据通常来自子进程的 stdout/stderr。
41
+ *
42
+ * @param raw - 原始数据块
43
+ */
44
+ feed(raw: string): void;
45
+
46
+ /**
47
+ * 泵送逻辑:将 mainQueue 中的任务批量写入子进程 stdin。
48
+ * 受 inflight 上限和 batchSize 控制,不会无限发送。
49
+ */
50
+ pump(): void;
51
+
52
+ /** 激活引擎,开始处理队列中的任务。 */
53
+ activate(): void;
54
+
55
+ /** 停用引擎,暂停处理新任务。 */
56
+ deactivate(): void;
57
+
58
+ /**
59
+ * 将任务加入主队列并触发泵送。
60
+ *
61
+ * @param task - 任务配置对象(包含 kind、sql、timeout、resolve、reject 等)
62
+ */
63
+ enqueue(task: any): void;
64
+
65
+ /**
66
+ * 处理子进程 stdout 数据块。
67
+ * 分割数据、解析 JSON 行、匹配 sentinel token 完成任务。
68
+ *
69
+ * @param chunk - stdout 数据块
70
+ */
71
+ handleStdoutChunk(chunk: string): void;
72
+
73
+ /**
74
+ * 处理子进程 stderr 数据块。
75
+ * 通常用于日志和调试信息。
76
+ *
77
+ * @param chunk - stderr 数据块
78
+ */
79
+ handleStderrChunk(chunk: string): void;
80
+
81
+ /**
82
+ * 拒绝所有尚未完成的任务。
83
+ * 通常在进程崩溃或主动关闭时调用。
84
+ *
85
+ * @param error - 拒绝原因
86
+ */
87
+ rejectAll(error: Error): void;
88
+
89
+ /** 销毁引擎,释放所有资源。 */
90
+ kill(): void;
91
+ }
@@ -0,0 +1,38 @@
1
+ import { ChildProcess } from "node:child_process";
2
+
3
+ /**
4
+ * sqlite3 子进程管理器。
5
+ * 封装 spawn、stdin 写入和进程销毁,提供统一的进程生命周期管理。
6
+ */
7
+ export declare class ProcessManager {
8
+ /**
9
+ * @param options.binary sqlite3 可执行文件路径
10
+ * @param options.database 数据库文件路径,不传则不打开数据库
11
+ * @param options.initMode 初始化模式
12
+ * - `"wal"` (默认):启动时通过 `-cmd` 设置 WAL 模式 + busy_timeout
13
+ * - `"none"`:不添加任何初始化参数(适用于 reader,直接继承数据库已有 WAL 模式)
14
+ */
15
+ constructor(options?: { binary?: string; database?: string; initMode?: "wal" | "none" });
16
+
17
+ /** 当前使用的 sqlite3 可执行文件路径 */
18
+ get binary(): string;
19
+
20
+ /** 底层子进程实例,未启动时为 null */
21
+ get process(): ChildProcess | null;
22
+
23
+ /**
24
+ * 启动子进程(json 模式),返回 ChildProcess 实例。
25
+ * @throws {Error} 如果 binary 路径为空或文件不存在
26
+ */
27
+ start(): ChildProcess;
28
+
29
+ /** 向子进程的 stdin 写入数据 */
30
+ write(data: string): void;
31
+
32
+ /**
33
+ * 终止子进程。
34
+ * 先尝试 SIGTERM,3 秒后未退出则 SIGKILL。
35
+ * 返回被终止的 ChildProcess 或 null。
36
+ */
37
+ kill(): ChildProcess | null;
38
+ }
@@ -0,0 +1,23 @@
1
+ /** 标记列名,用于在查询结果中插入结束标记行 */
2
+ export const TOKEN_COLUMN: "__sqlite_executor_token__";
3
+
4
+ /**
5
+ * 构造发送给子进程的 payload 字符串。
6
+ * 将 SQL 语句和 token 包装为 sqlite3 能够执行的格式,
7
+ * 使结果末尾包含一个标记行用于判断查询是否结束。
8
+ *
9
+ * @param sql - 原始 SQL 语句
10
+ * @param token - 唯一标记值
11
+ * @returns 组装后的 payload 字符串
12
+ */
13
+ export function buildPayload(sql: string, token: string): string;
14
+
15
+ /**
16
+ * 判断一个值是否为结束标记行。
17
+ * 用于在解析查询结果时识别语句执行完毕的信号。
18
+ *
19
+ * @param value - 待判断的值(通常为对象行)
20
+ * @param token - 期望的标记值
21
+ * @returns 如果是标记行则返回 true
22
+ */
23
+ export function isSentinelRow(value: unknown, token: string): boolean;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * 双端队列,基于双向链表实现。
3
+ * 支持 O(1) 的首尾入队/出队操作,以及查找、删除、迭代等功能。
4
+ */
5
+ export declare class Queue<T = any> {
6
+ /** 将值加入队尾 */
7
+ enqueue(value: T): void;
8
+
9
+ /** 移除并返回队首元素;队列为空时返回 null */
10
+ dequeue(): T | null;
11
+
12
+ /** 返回队首元素但不移除;队列为空时返回 null */
13
+ peek(): T | null;
14
+
15
+ /** 移除队列中第一个匹配的值,返回是否成功移除 */
16
+ remove(value: T): boolean;
17
+
18
+ /** 查找第一个满足条件的元素,未找到时返回 null */
19
+ find(predicate: (value: T) => boolean): T | null;
20
+
21
+ /** 清空队列 */
22
+ clear(): void;
23
+
24
+ /** 将队列转为数组(从队首到队尾) */
25
+ toArray(): T[];
26
+
27
+ /** 遍历队列元素 */
28
+ values(): Generator<T, void, unknown>;
29
+
30
+ /** 将另一个队列的所有元素追加到当前队尾 */
31
+ prependAll(other: Queue<T>): void;
32
+
33
+ /** 队列是否为空 */
34
+ isEmpty(): boolean;
35
+
36
+ /** 队列中的元素数量 */
37
+ get size(): number;
38
+
39
+ [Symbol.iterator](): Generator<T, void, unknown>;
40
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * 只读 Worker 连接池。
3
+ *
4
+ * 管理多个 TaskWorker 实例,所有 worker 共享同一数据库文件。
5
+ * 通过轮询(round-robin)分配读任务,实现读操作的水平扩展。
6
+ *
7
+ * 注意:ReaderPool 中的 worker 不初始化 WAL 模式(`initMode: "none"`),
8
+ * 直接继承数据库文件头中的 journal 模式,避免与 writer 竞争 WAL 初始化锁。
9
+ */
10
+ export class ReaderPool {
11
+ /**
12
+ * @param options.binary sqlite3 可执行文件路径
13
+ * @param options.database 数据库文件路径
14
+ * @param options.poolSize Worker 数量
15
+ * @param options.statementTimeout 单条语句超时(毫秒)
16
+ * @param options.logger 日志记录器
17
+ */
18
+ constructor(options: {
19
+ binary: string;
20
+ database: string;
21
+ poolSize: number;
22
+ statementTimeout: number;
23
+ logger?: import("./executor.js").Logger;
24
+ });
25
+
26
+ /** 池中 Worker 数量 */
27
+ get size(): number;
28
+
29
+ /** 所有 Worker 排队中的语句总数 */
30
+ get pendingStatements(): number;
31
+
32
+ /**
33
+ * 分发一个读任务到下一个空闲 Worker(轮询)。
34
+ * @param task - 任务配置对象
35
+ */
36
+ enqueue(task: object): void;
37
+
38
+ /** 终止所有 Worker */
39
+ kill(): void;
40
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * 将解析结果收集到任务的 rows 数组中。
3
+ * 用于非流式查询,将子进程返回的 JSON 行追加到 task.rows。
4
+ *
5
+ * @param task - 任务对象,需包含 rows 数组
6
+ * @param parsed - 解析出的单行数据
7
+ */
8
+ export function collectQueryRows(task: { rows: any[] }, parsed: any): void;
9
+
10
+ /**
11
+ * 将解析结果通过任务的 onRow 回调逐行推送给消费者。
12
+ * 用于流式查询,不缓存全部结果。
13
+ * 如果 task.consumerError 已设置,则跳过后续推送。
14
+ *
15
+ * @param task - 任务对象,需包含 onRow 回调和可选的 consumerError
16
+ * @param parsed - 解析出的单行数据
17
+ */
18
+ export function processStreamRows(task: { onRow: Function; consumerError?: Error | null }, parsed: any): void;
19
+
20
+ /**
21
+ * 完成一个任务:调用 resolve 或 reject,并更新指标。
22
+ * 任务可以是 query、execute 或 stream 类型。
23
+ *
24
+ * @param task - 待完成的任务对象
25
+ * @param error - 错误对象(为 null 表示成功)
26
+ * @param value - 成功时的结果值
27
+ * @param metrics - 可选的指标收集器,用于统计任务耗时和结果
28
+ * @param options - 可选的附加选项,如 resetRowParser 是否重置行解析器
29
+ */
30
+ export function settleTask(
31
+ task: any,
32
+ error: Error | null,
33
+ value: any,
34
+ metrics?: import("./metrics.js").Metrics | null,
35
+ options?: { resetRowParser?: boolean },
36
+ ): void;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * 单个 sqlite3 进程 Worker,支持管线化(pipelining)。
3
+ *
4
+ * 内部维护 pending 和 inflight 两个队列:
5
+ * - pending:等待写入 stdin 的任务
6
+ * - inflight:已写入 stdin、等待 stdout 返回的任务
7
+ *
8
+ * 当 pending 中有任务且 inflight 未满时,自动将多个任务的 SQL payload
9
+ * 合并为一次 stdin.write() 发送(管线化),由 sqlite3 顺序执行后,
10
+ * 在 stdout 解析时按 FIFO 顺序匹配 sentinel token 逐一完成。
11
+ */
12
+ export class TaskWorker {
13
+ /**
14
+ * @param options.binary sqlite3 可执行文件路径
15
+ * @param options.database 数据库文件路径
16
+ * @param options.statementTimeout 单条语句超时(毫秒)
17
+ * @param options.logger 日志记录器
18
+ * @param options.name Worker 名称,用于日志和调试
19
+ * @param options.initMode 子进程初始化模式(参考 ProcessManager)
20
+ * @param options.batchSize 管线化批量大小,默认 10
21
+ */
22
+ constructor(options: {
23
+ binary: string;
24
+ database: string;
25
+ statementTimeout: number;
26
+ logger?: import("./executor.js").Logger;
27
+ name?: string;
28
+ initMode?: "wal" | "none";
29
+ batchSize?: number;
30
+ });
31
+
32
+ /** Worker 名称 */
33
+ get name(): string;
34
+
35
+ /** 当前是否空闲(无 pending 也无 inflight 任务) */
36
+ get idle(): boolean;
37
+
38
+ /** 当前排队(pending + inflight)的语句数量 */
39
+ get pendingStatements(): number;
40
+
41
+ /**
42
+ * 加入一个任务到待发送队列。
43
+ * 内部会触发泵送逻辑,可能立即与队列中其他任务合批发送。
44
+ * @param config - 任务配置对象,包含 kind、sql、timeout、token、resolve、reject、onRow 等
45
+ */
46
+ enqueue(config: object): void;
47
+
48
+ /** 立即终止子进程,丢弃所有待处理和已发送的任务 */
49
+ kill(): void;
50
+ }
@@ -0,0 +1,83 @@
1
+ import { Queue } from "./queue.mts";
2
+
3
+ /**
4
+ * 事务作用域的进入结果。
5
+ * - scopeId:唯一作用域标识符
6
+ * - release:释放作用域锁定的回调
7
+ */
8
+ export interface TransactionScopeResult {
9
+ /** 事务作用域的唯一标识符号 */
10
+ scopeId: symbol;
11
+ /** 释放事务作用域锁,允许后续任务继续执行 */
12
+ release: () => void;
13
+ }
14
+
15
+ /**
16
+ * 事务作用域管理器。
17
+ *
18
+ * 确保事务内的所有 SQL 操作绑定到同一个子进程(通过 scopeId),
19
+ * 避免在读写分离模式下事务内的读操作被分发到其他进程。
20
+ *
21
+ * 实现原理:
22
+ * - 事务开始前调用 `enter()` 获取 scopeId,后续所有语句携带该 scopeId
23
+ * - 事务外的语句不携带 scopeId(scopeId 为 null),可由任务调度器自由分发
24
+ * - 事务内的语句暂存(defer)到独立的队列,事务结束后恢复(restoreDeferred)
25
+ */
26
+ export class TransactionScope {
27
+ /** 当前作用域标识,无活跃事务时为 null */
28
+ get scopeId(): symbol | null;
29
+
30
+ /** 是否有活跃的事务正在执行 */
31
+ get active(): boolean;
32
+
33
+ /** 事务队列中等待执行的语句数量 */
34
+ get pendingStatements(): number;
35
+
36
+ /**
37
+ * 判断给定的 scopeId 是否与当前事务作用域匹配。
38
+ * scopeId 为 null 表示不在事务中,返回 true。
39
+ *
40
+ * @param scopeId - 待判断的作用域标识
41
+ * @returns 如果匹配或传入 null 则返回 true
42
+ */
43
+ isDeferred(scopeId: symbol | null): boolean;
44
+
45
+ /**
46
+ * 将任务暂存到事务延迟队列。
47
+ * 事务提交前不会实际执行这些任务。
48
+ *
49
+ * @param task - 待暂存的任务对象
50
+ */
51
+ defer(task: any): void;
52
+
53
+ /**
54
+ * 进入事务作用域。
55
+ * 锁定一个 scopeId,后续所有语句将被关联到该作用域。
56
+ * 同时暂停主队列的正常分发,将新语句转入 defer 队列。
57
+ *
58
+ * @returns 包含 scopeId 和 release 回调的结果对象
59
+ */
60
+ enter(): Promise<TransactionScopeResult>;
61
+
62
+ /**
63
+ * 退出事务作用域。
64
+ * 将 defer 队列中的任务恢复到目标队列,然后清空作用域。
65
+ */
66
+ exit(): void;
67
+
68
+ /**
69
+ * 恢复之前暂存(defer)的所有任务到目标队列。
70
+ * 通常在事务提交后调用。
71
+ *
72
+ * @param targetQueue - 接收暂存任务的目标队列
73
+ */
74
+ restoreDeferred(targetQueue: Queue): void;
75
+
76
+ /**
77
+ * 拒绝事务作用域内所有暂存的任务。
78
+ * 通常在事务回滚或发生错误时调用。
79
+ *
80
+ * @param error - 拒绝原因
81
+ */
82
+ rejectAll(error: Error): void;
83
+ }
@@ -0,0 +1,28 @@
1
+ /// <reference lib="esnext" />
2
+
3
+ /**
4
+ * 主控制器,管理 sqlite3 子进程,提供 execute/query/stream/transaction 等 API。
5
+ * 当 `database` 为文件路径且 `poolSize > 0` 时,自动启用读写分离:
6
+ * - 读操作(SELECT/WITH/VALUES/EXPLAIN)路由到 ReaderPool 中的空闲 worker
7
+ * - 写操作(其余语句)始终由主 writer 进程执行
8
+ */
9
+ export { SQLiteExecutor } from "./core/executor.mts";
10
+ export type { Logger, SQLiteExecutorOptions, StatementOptions, TransactionOptions, TransactionHandle } from "./core/executor.mts";
11
+
12
+ /**
13
+ * 运行时指标收集器。
14
+ * 追踪 SQL 执行任务的吞吐、耗时、错误、超时和进程重启。
15
+ */
16
+ export { Metrics } from "./core/metrics.mts";
17
+ export type { MetricsSnapshot } from "./core/metrics.mts";
18
+
19
+ /**
20
+ * 有效的事务隔离级别列表。
21
+ */
22
+ export { VALID_TRANSACTION_MODES } from "./transaction/transaction.mts";
23
+
24
+ /**
25
+ * 默认语句超时时间(30 秒)。
26
+ * `createTimeoutError` 用于构造带 SQL 上下文的超时错误。
27
+ */
28
+ export { DEFAULT_STATEMENT_TIMEOUT, createTimeoutError } from "./utils/timeout.mts";