sqlite-executor 4.0.5 → 4.0.6
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.
- package/dist/cjs/core/lruCache.d.cts +8 -1
- package/dist/cjs/core/readerPool.d.cts +2 -2
- package/dist/cjs/index.cjs +620 -516
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/utils/interpolate.d.cts +11 -0
- package/dist/cjs/utils/normalize.d.cts +24 -0
- package/dist/cjs/utils/timeout.d.cts +2 -1
- package/dist/esm/core/lruCache.d.mts +8 -1
- package/dist/esm/core/readerPool.d.mts +2 -2
- package/dist/esm/index.mjs +620 -516
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/utils/interpolate.d.mts +11 -0
- package/dist/esm/utils/normalize.d.mts +24 -0
- package/dist/esm/utils/timeout.d.mts +2 -1
- package/package.json +1 -1
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cjs/index.cjs","sources":["webpack://sqlite-executor/./src/core/lruCache.js","webpack://sqlite-executor/./src/utils/constants.js","webpack://sqlite-executor/./src/utils/normalize.js","webpack://sqlite-executor/./src/utils/timeout.js","webpack://sqlite-executor/./src/core/parser.js","webpack://sqlite-executor/./src/constants.js","webpack://sqlite-executor/./src/stream/stream.js","webpack://sqlite-executor/./src/transaction/transaction.js","webpack://sqlite-executor/./src/which.js","webpack://sqlite-executor/./src/core/process.js","webpack://sqlite-executor/./src/utils/token.js","webpack://sqlite-executor/./src/utils/escape.js","webpack://sqlite-executor/./src/utils/interpolate.js","webpack://sqlite-executor/./src/core/classifier.js","webpack://sqlite-executor/./src/core/queue.js","webpack://sqlite-executor/./src/core/protocol.js","webpack://sqlite-executor/./src/core/settleUtils.js","webpack://sqlite-executor/./src/core/pipelineUtils.js","webpack://sqlite-executor/./src/core/taskWorker.js","webpack://sqlite-executor/./src/core/readerPool.js","webpack://sqlite-executor/./src/core/metrics.js","webpack://sqlite-executor/./src/core/transactionScope.js","webpack://sqlite-executor/./src/core/pipelineEngine.js","webpack://sqlite-executor/./src/core/executor.js"],"sourcesContent":["/**\n * 基于 Map 插入顺序的 LRU 缓存。\n *\n * 使用 `get()` 命中时自动将条目提升到末尾;\n * `set()` 在达到容量上限时淘汰最久未访问的条目(首个 key)。\n * 仅缓存字符串 key,长度超过 `maxKeyLength` 的 key 不会被缓存。\n *\n * @template T\n */\nexport class LRUCache {\n\t#maxSize;\n\t#maxKeyLength;\n\t/** @type {Map<string, T>} */\n\t#map = new Map();\n\n\t/**\n\t * @param {{ maxSize?: number, maxKeyLength?: number }} [options]\n\t */\n\tconstructor({ maxSize = 256, maxKeyLength = 4096 } = {}) {\n\t\tthis.#maxSize = Math.max(1, maxSize);\n\t\tthis.#maxKeyLength = maxKeyLength;\n\t}\n\n\t/**\n\t * 获取缓存值。命中时将条目提升到末尾;未命中或 key 不合法时返回 undefined。\n\t * @param {string} key\n\t * @returns {T | undefined}\n\t */\n\tget(key) {\n\t\tif (typeof key !== \"string\" || key.length > this.#maxKeyLength) return undefined;\n\t\tconst value = this.#map.get(key);\n\t\tif (value === undefined) return undefined;\n\t\tthis.#map.delete(key);\n\t\tthis.#map.set(key, value);\n\t\treturn value;\n\t}\n\n\t/**\n\t * 设置缓存值。达到容量上限时淘汰最旧条目。超长 key 不缓存。\n\t * @param {string} key\n\t * @param {T} value\n\t */\n\tset(key, value) {\n\t\tif (typeof key !== \"string\" || key.length > this.#maxKeyLength) return;\n\t\tif (this.#map.size >= this.#maxSize) {\n\t\t\tconst firstKey = this.#map.keys().next().value;\n\t\t\tthis.#map.delete(firstKey);\n\t\t}\n\t\tthis.#map.set(key, value);\n\t}\n\n\t/** 当前缓存条目数。 */\n\tget size() {\n\t\treturn this.#map.size;\n\t}\n\n\t/** 清空缓存。 */\n\tclear() {\n\t\tthis.#map.clear();\n\t}\n}\n","const CC_SINGLE_QUOTE = 39;\nconst CC_DOUBLE_QUOTE = 34;\nconst CC_DASH = 45;\nconst CC_SLASH = 47;\nconst CC_STAR = 42;\nconst CC_NEWLINE = 10;\nconst CC_QUESTION = 63;\nconst CC_SEMICOLON = 59;\nconst CC_SPACE = 32;\n\nconst STATE_NORMAL = 0;\nconst STATE_SINGLE_QUOTE = 1;\nconst STATE_DOUBLE_QUOTE = 2;\nconst STATE_LINE_COMMENT = 3;\nconst STATE_BLOCK_COMMENT = 4;\n\nexport {\n\tCC_SINGLE_QUOTE,\n\tCC_DOUBLE_QUOTE,\n\tCC_DASH,\n\tCC_SLASH,\n\tCC_STAR,\n\tCC_NEWLINE,\n\tCC_QUESTION,\n\tCC_SEMICOLON,\n\tCC_SPACE,\n\tSTATE_NORMAL,\n\tSTATE_SINGLE_QUOTE,\n\tSTATE_DOUBLE_QUOTE,\n\tSTATE_LINE_COMMENT,\n\tSTATE_BLOCK_COMMENT,\n};\n","import { LRUCache } from \"../core/lruCache.js\";\nimport {\n\tCC_SINGLE_QUOTE,\n\tCC_DOUBLE_QUOTE,\n\tCC_DASH,\n\tCC_SLASH,\n\tCC_STAR,\n\tCC_NEWLINE,\n\tCC_SEMICOLON,\n\tCC_SPACE,\n\tSTATE_NORMAL,\n\tSTATE_SINGLE_QUOTE,\n\tSTATE_DOUBLE_QUOTE,\n\tSTATE_LINE_COMMENT,\n\tSTATE_BLOCK_COMMENT,\n} from \"./constants.js\";\n\nlet _normBuf = new Uint16Array(1024);\nconst _normDecoder = new TextDecoder(\"utf-16le\");\n\nconst _normCache = new LRUCache({ maxSize: 256, maxKeyLength: 4096 });\n\nexport function normalizeSQL(sql) {\n\tconst cached = _normCache.get(sql);\n\tif (cached !== undefined) return cached;\n\n\tconst len = sql.length;\n\n\tconst needed = len + 1;\n\tif (_normBuf.length < needed) {\n\t\t// 初始 1024 对绝大多数 SQL 已足够;当遇到超长 SQL 时按需精确分配。\n\t\t// 不预留额外空间,因为重复的 SQL 会被 LRU 缓存命中(256 条),\n\t\t// 不会频繁触发扩容。\n\t\t_normBuf = new Uint16Array(needed);\n\t}\n\n\tconst outCodes = _normBuf;\n\tlet writePos = 0;\n\tlet pendingSpace = false;\n\tlet state = STATE_NORMAL;\n\n\tfor (let i = 0; i < len; i++) {\n\t\tconst code = sql.charCodeAt(i);\n\t\tconst nextCode = sql.charCodeAt(i + 1);\n\n\t\tif (state === STATE_BLOCK_COMMENT) {\n\t\t\tif (code === CC_STAR && nextCode === CC_SLASH) {\n\t\t\t\tstate = STATE_NORMAL;\n\t\t\t\ti++;\n\t\t\t\tif (writePos > 0) pendingSpace = true;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (state === STATE_LINE_COMMENT) {\n\t\t\tif (code === CC_NEWLINE) {\n\t\t\t\tstate = STATE_NORMAL;\n\t\t\t\tif (writePos > 0) pendingSpace = true;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (state === STATE_NORMAL) {\n\t\t\tif (code === CC_DASH && nextCode === CC_DASH) {\n\t\t\t\tstate = STATE_LINE_COMMENT;\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (code === CC_SLASH && nextCode === CC_STAR) {\n\t\t\t\tstate = STATE_BLOCK_COMMENT;\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tif (code === 32 || code === 9 || code === 10 || code === 11 || code === 12 || code === 13) {\n\t\t\tif (writePos > 0) pendingSpace = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (pendingSpace && writePos > 0) {\n\t\t\toutCodes[writePos++] = CC_SPACE;\n\t\t\tpendingSpace = false;\n\t\t}\n\t\toutCodes[writePos++] = code;\n\n\t\tif (state === STATE_NORMAL) {\n\t\t\tif (code === CC_SINGLE_QUOTE) state = STATE_SINGLE_QUOTE;\n\t\t\telse if (code === CC_DOUBLE_QUOTE) state = STATE_DOUBLE_QUOTE;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (state === STATE_SINGLE_QUOTE) {\n\t\t\tif (code === CC_SINGLE_QUOTE && nextCode === CC_SINGLE_QUOTE) {\n\t\t\t\toutCodes[writePos++] = nextCode;\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (code === CC_SINGLE_QUOTE) state = STATE_NORMAL;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (state === STATE_DOUBLE_QUOTE) {\n\t\t\tif (code === CC_DOUBLE_QUOTE && nextCode === CC_DOUBLE_QUOTE) {\n\t\t\t\toutCodes[writePos++] = nextCode;\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (code === CC_DOUBLE_QUOTE) state = STATE_NORMAL;\n\t\t}\n\t}\n\n\tlet result;\n\tif (writePos === 0) {\n\t\tresult = \";\";\n\t} else {\n\t\twhile (writePos > 0 && outCodes[writePos - 1] === CC_SEMICOLON) writePos--;\n\t\toutCodes[writePos++] = CC_SEMICOLON;\n\t\tresult = _normDecoder.decode(outCodes.subarray(0, writePos));\n\t}\n\n\t_normCache.set(sql, result);\n\n\treturn result;\n}\n","import { normalizeSQL } from \"./normalize.js\";\n\n/** 默认 SQL 超时时间(毫秒) */\nexport const DEFAULT_STATEMENT_TIMEOUT = 30_000;\n\n/**\n * 创建一个描述 SQL 超时的 Error 对象。\n * @param {number} timeout - 超时毫秒数\n * @param {string} sql - 超时的 SQL 语句\n * @returns {Error}\n */\nexport function createTimeoutError(timeout, sql) {\n\treturn new Error(`SQLite statement timed out after ${timeout}ms: ${normalizeSQL(sql)}`);\n}\n","/**\n * 将任意值统一转为 Error 对象。\n * 如果已是 Error 实例则原样返回,否则将其字符串化后包装为新 Error。\n * @param {unknown} value\n * @returns {Error}\n */\nexport function toError(value) {\n\treturn value instanceof Error ? value : new Error(String(value));\n}\n\nconst CHAR_QUOTE = 34; // \"\nconst CHAR_BACKSLASH = 92; // \\\nconst CHAR_OPEN_BRACKET = 91; // [\nconst CHAR_CLOSE_BRACKET = 93; // ]\nconst CHAR_OPEN_BRACE = 123; // {\nconst CHAR_CLOSE_BRACE = 125; // }\nconst CHAR_COMMA = 44; // ,\nconst CHAR_SPACE = 32; //\nconst CHAR_TAB = 9; // \\t\nconst CHAR_LF = 10; // \\n\nconst CHAR_CR = 13; // \\r\n\n/**\n * 判断字符码是否为空白字符(空格、制表符、换行、回车)。\n * @param {number} code\n * @returns {boolean}\n */\nfunction isWhitespaceCode(code) {\n\treturn code === CHAR_SPACE || code === CHAR_TAB || code === CHAR_LF || code === CHAR_CR;\n}\n\n/**\n * 创建一个 JSON 值解析器,逐字符扫描流式数据,检测完整的顶层 JSON 值\n *(对象或数组),解析出完整的 JSON 文本后通过回调通知。\n *\n * 核心逻辑是一个状态机,维护以下状态:\n * start — 当前正在累积的顶层 JSON 值在 buffer 中的起始位置,-1 表示未开始\n * nesting — 当前嵌套深度(遇到 [ 或 { 递增,遇到 ] 或 } 递减)\n * inString — 是否在字符串内部(字符串内的括号不计入嵌套深度)\n * escaped — 前一个字符是否为反斜杠(用于处理字符串内的转义 \\\" \\\\ 等)\n *\n * 支持流式分块输入,通过 readPos 记录上次扫描位置,避免多次分块间重复扫描已处理数据。\n *\n * 关键优化:空数组 [] 走 fast path,直接跳过 slice 和 onValue 回调。\n *\n * @param {(raw: string) => void} onValue - 每当解析出一个完整 JSON 值时被调用\n * @returns {{\n * feed(chunk: string): void,\n * reset(): void,\n * buffer: string,\n * start: number,\n * readPos: number,\n * nesting: number,\n * inString: boolean,\n * escaped: boolean,\n * }}\n */\nexport function createJsonValueParser(onValue) {\n\treturn {\n\t\t// 累积的未解析原始数据\n\t\tbuffer: \"\",\n\t\t// 当前顶层 JSON 值在 buffer 中的起始索引,-1 表示未开始扫描顶层值\n\t\tstart: -1,\n\t\t// 上次扫描到的位置,下次 feed 从这继续,避免重复扫描\n\t\treadPos: 0,\n\t\t// 嵌套深度:遇到 [ 或 { 递增,遇到 ] 或 } 递减;归零表示一个完整值结束\n\t\tnesting: 0,\n\t\t// 是否在一对双引号内部(字符串内的括号不参与 nesting 计数)\n\t\tinString: false,\n\t\t// 前一个字符是否为反斜杠(处理字符串中的转义序列 \\\" \\\\ \\/ \\b \\f \\n \\r \\t \\uXXXX)\n\t\tescaped: false,\n\t\t// 已累积消费的字节数,用于延迟 buffer 物理裁剪,减少 String 分配和 GC 压力\n\t\t_consumed: 0,\n\t\tfeed(chunk) {\n\t\t\t// 1. 将新数据追加到 buffer 尾部\n\t\t\tthis.buffer += chunk;\n\t\t\tlet consumeUntil = 0;\n\n\t\t\t// 2. 从上次处理到的位置继续扫描\n\t\t\tfor (let index = this.readPos; index < this.buffer.length; index++) {\n\t\t\t\tconst code = this.buffer.charCodeAt(index);\n\n\t\t\t\t// === 状态 A:未开始解析顶层值,跳过空白,寻找 [ 或 { ===\n\t\t\t\tif (this.start === -1) {\n\t\t\t\t\tif (isWhitespaceCode(code)) continue;\n\t\t\t\t\tif (code !== CHAR_OPEN_BRACKET && code !== CHAR_OPEN_BRACE) continue;\n\t\t\t\t\t// 找到顶层值的起始位置,初始化嵌套计数\n\t\t\t\t\tthis.start = index;\n\t\t\t\t\tthis.nesting = 1;\n\t\t\t\t\tthis.inString = false;\n\t\t\t\t\tthis.escaped = false;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// === 状态 B:在字符串内部,处理转义序列 ===\n\t\t\t\tif (this.inString) {\n\t\t\t\t\tif (this.escaped) {\n\t\t\t\t\t\t// 前一个字符是反斜杠,当前字符被转义,重置 escaped\n\t\t\t\t\t\tthis.escaped = false;\n\t\t\t\t\t} else if (code === CHAR_BACKSLASH) {\n\t\t\t\t\t\t// 遇到反斜杠,标记下一个字符为转义状态\n\t\t\t\t\t\tthis.escaped = true;\n\t\t\t\t\t} else if (code === CHAR_QUOTE) {\n\t\t\t\t\t\t// 遇到未转义的双引号,字符串结束\n\t\t\t\t\t\tthis.inString = false;\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// === 状态 C:不在字符串内,遇到双引号则进入字符串 ===\n\t\t\t\tif (code === CHAR_QUOTE) {\n\t\t\t\t\tthis.inString = true;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// === 状态 D:不在字符串内,处理嵌套结构 ===\n\t\t\t\tif (code === CHAR_OPEN_BRACKET || code === CHAR_OPEN_BRACE) {\n\t\t\t\t\t// 进入一层嵌套\n\t\t\t\t\tthis.nesting++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (code === CHAR_CLOSE_BRACKET || code === CHAR_CLOSE_BRACE) {\n\t\t\t\t\t// 退出一层嵌套\n\t\t\t\t\tthis.nesting--;\n\t\t\t\t\tif (this.nesting === 0) {\n\t\t\t\t\t\t// 嵌套归零 → 一个完整的顶层 JSON 值解析完成\n\t\t\t\t\t\t// Fast path: 空数组 [],index === start + 1,无需 slice 和回调\n\t\t\t\t\t\tif (index === this.start + 1) {\n\t\t\t\t\t\t\tthis.start = -1;\n\t\t\t\t\t\t\tconsumeUntil = index + 1;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// 正常路径:切片出完整 JSON 文本,通过回调通知\n\t\t\t\t\t\tconst raw = this.buffer.slice(this.start, index + 1);\n\t\t\t\t\t\tthis.start = -1;\n\t\t\t\t\t\tonValue(raw);\n\t\t\t\t\t\tconsumeUntil = index + 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// 3. 清理已消费部分:用 _consumed 记录已消费位置而非每次都物理裁剪 buffer。\n\t\t\t// 避免每个完整值都产生一次 String 分配(buffer.slice),\n\t\t\t// 仅在累积超过 64KB 时一次性物理裁剪,减少 GC 压力。\n\t\t\t// 注意:consumeUntil 是相对 buffer 起始的绝对位置,直接赋值即可。\n\t\t\tif (consumeUntil > 0) {\n\t\t\t\tthis._consumed = consumeUntil;\n\t\t\t\t// 当有未完成的部分值(start !== -1)时,readPos 跳到 buffer 末尾\n\t\t\t\t// 避免下次 feed 重扫已计入 nesting 的 [/{ 字符,\n\t\t\t\t// 同时保留 nested/inString/escaped 状态供继续解析。\n\t\t\t\tthis.readPos = this.start !== -1 ? this.buffer.length : this._consumed;\n\t\t\t\tif (this._consumed > 65536) {\n\t\t\t\t\tif (this.start !== -1) this.start -= this._consumed;\n\t\t\t\t\tthis.buffer = this.buffer.slice(this._consumed);\n\t\t\t\t\tthis.readPos = this.buffer.length;\n\t\t\t\t\tthis._consumed = 0;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// 没有完整值被消费,记录当前位置,下次 feed 从此继续\n\t\t\t\tthis.readPos = this.buffer.length;\n\t\t\t}\n\t\t},\n\t\treset() {\n\t\t\tthis.buffer = \"\";\n\t\t\tthis._consumed = 0;\n\t\t\tthis.start = -1;\n\t\t\tthis.readPos = 0;\n\t\t\tthis.nesting = 0;\n\t\t\tthis.inString = false;\n\t\t\tthis.escaped = false;\n\t\t},\n\t};\n}\n\n/**\n * 创建一个行流解析器,用于解析 sqlite3 `-json` 模式下输出的 JSON 数组。\n * 它不是一次性解析整个数组,而是在元素到达时逐行回调 `onRow`,\n * 支持分块输入、嵌套对象/数组、转义字符串。\n *\n * 核心状态机比 createJsonValueParser 更复杂,因为需要在数组上下文中\n * 逐个识别元素边界(逗号分隔,] 结束),而不是只匹配顶层括号匹配。\n *\n * 解析流程概览:\n * 1. 跳过空白,等待 [ → 标记 started\n * 2. 跳过空白和逗号,等待元素起始 → 记录 elementStart\n * 3. 扫描元素内容,跟踪 nesting 深度直到归零 → 记录 elementEnd\n * 4. 向前 look-ahead 确认后面是逗号或 ](即元素完全结束)→ 回调 onRow 并截断已处理部分\n * 5. 遇到 ] → 标记 finished,返回剩余数据\n *\n * @param {(rawRow: string) => void} onRow - 每当解析出一个数组元素时被调用,传入元素的原始 JSON 文本\n * @returns {{\n * feed(chunk: string): string,\n * reset(): void,\n * buffer: string,\n * started: boolean,\n * finished: boolean,\n * inString: boolean,\n * escaped: boolean,\n * elementStart: number,\n * elementEnd: number,\n * nesting: number,\n * readPos: number,\n * }}\n */\nexport function createRowStreamParser(onRow) {\n\treturn {\n\t\tbuffer: \"\",\n\t\t// 是否已遇到数组开始的 [\n\t\tstarted: false,\n\t\t// 是否已遇到数组结束的 ],之后 feed 直接返回输入\n\t\tfinished: false,\n\t\t// 是否在字符串内部\n\t\tinString: false,\n\t\t// 前一个字符是否为反斜杠\n\t\tescaped: false,\n\t\t// 当前元素在 buffer 中的起始位置\n\t\telementStart: -1,\n\t\t// 当前元素在 buffer 中的结束位置(exclusive)\n\t\telementEnd: -1,\n\t\t// 当前元素的嵌套深度(用于处理元素内部的嵌套结构)\n\t\tnesting: 0,\n\t\t// 上次扫描位置\n\t\treadPos: 0,\n\t\t// 已累积消费的字节数,用于延迟 buffer 物理裁剪\n\t\t_consumed: 0,\n\t\tfeed(chunk) {\n\t\t\t// 如果数组已结束,直接返回新数据\n\t\t\tif (this.finished) return chunk;\n\n\t\t\t// 1. 追加新数据到 buffer\n\t\t\tthis.buffer += chunk;\n\t\t\tlet index = this.readPos;\n\n\t\t\twhile (index < this.buffer.length) {\n\t\t\t\tconst code = this.buffer.charCodeAt(index);\n\n\t\t\t\t// === 阶段 1:等待数组开始 [ ===\n\t\t\t\tif (!this.started) {\n\t\t\t\t\tif (isWhitespaceCode(code)) {\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (code !== CHAR_OPEN_BRACKET) {\n\t\t\t\t\t\t// 非 [ 的字符(非空白)直接跳过\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tthis.started = true;\n\t\t\t\t\tindex++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// === 阶段 2:在字符串内部,处理转义 ===\n\t\t\t\tif (this.inString) {\n\t\t\t\t\tif (this.escaped) {\n\t\t\t\t\t\tthis.escaped = false;\n\t\t\t\t\t} else if (code === CHAR_BACKSLASH) {\n\t\t\t\t\t\tthis.escaped = true;\n\t\t\t\t\t} else if (code === CHAR_QUOTE) {\n\t\t\t\t\t\tthis.inString = false;\n\t\t\t\t\t}\n\t\t\t\t\tindex++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// === 阶段 3:不在任何元素内,等待元素起始 ===\n\t\t\t\tif (this.elementStart === -1) {\n\t\t\t\t\tif (isWhitespaceCode(code) || code === CHAR_COMMA) {\n\t\t\t\t\t\t// 跳过空白和元素间逗号\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (code === CHAR_CLOSE_BRACKET) {\n\t\t\t\t\t\t// 数组结束,标记 finished 并返回剩余数据\n\t\t\t\t\t\tthis.finished = true;\n\t\t\t\t\t\tconst leftover = this.buffer.slice(index + 1);\n\t\t\t\t\t\tthis.buffer = \"\";\n\t\t\t\t\t\tthis.readPos = 0;\n\t\t\t\t\t\treturn leftover;\n\t\t\t\t\t}\n\t\t\t\t\t// 记录元素起始位置,初始化嵌套计数\n\t\t\t\t\tthis.elementStart = index;\n\t\t\t\t\tthis.elementEnd = -1;\n\t\t\t\t\tthis.nesting = code === CHAR_OPEN_BRACE || code === CHAR_OPEN_BRACKET ? 1 : 0;\n\t\t\t\t\tthis.inString = code === CHAR_QUOTE;\n\t\t\t\t\tindex++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// === 阶段 4:在元素内,处理字符串、嵌套结构 ===\n\t\t\t\tif (code === CHAR_QUOTE) {\n\t\t\t\t\tthis.inString = true;\n\t\t\t\t\tindex++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (code === CHAR_OPEN_BRACE || code === CHAR_OPEN_BRACKET) {\n\t\t\t\t\tthis.nesting++;\n\t\t\t\t\tindex++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (code === CHAR_CLOSE_BRACE || code === CHAR_CLOSE_BRACKET) {\n\t\t\t\t\tthis.nesting--;\n\t\t\t\t\tif (this.nesting === 0) {\n\t\t\t\t\t\t// 嵌套归零,标记元素结束位置\n\t\t\t\t\t\tthis.elementEnd = index + 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// === 阶段 5:确认元素后面是逗号或 ],保证元素完整结束 ===\n\t\t\t\tif (this.elementEnd !== -1) {\n\t\t\t\t\t// 向前 look-ahead,跳过元素后的空白\n\t\t\t\t\tlet lookAhead = index + 1;\n\t\t\t\t\twhile (lookAhead < this.buffer.length && isWhitespaceCode(this.buffer.charCodeAt(lookAhead))) {\n\t\t\t\t\t\tlookAhead++;\n\t\t\t\t\t}\n\t\t\t\t\tif (lookAhead < this.buffer.length) {\n\t\t\t\t\t\tconst delimiter = this.buffer.charCodeAt(lookAhead);\n\t\t\t\t\t\tif (delimiter === CHAR_COMMA || delimiter === CHAR_CLOSE_BRACKET) {\n\t\t\t\t\t\t\t// 元素完整:切片出元素文本并回调\n\t\t\t\t\t\t\tonRow(this.buffer.slice(this.elementStart, this.elementEnd));\n\t\t\t\t\t\t\t// 不直接物理裁剪 buffer,改用 _consumed 记录已消费位置\n\t\t\t\t\t\t\tthis._consumed = lookAhead + 1;\n\t\t\t\t\t\t\tthis.elementStart = -1;\n\t\t\t\t\t\t\tthis.elementEnd = -1;\n\t\t\t\t\t\t\tthis.nesting = 0;\n\t\t\t\t\t\t\tif (delimiter === CHAR_CLOSE_BRACKET) {\n\t\t\t\t\t\t\t\t// 数组结束,从 _consumed 处切片剩余数据返回\n\t\t\t\t\t\t\t\tthis.finished = true;\n\t\t\t\t\t\t\t\tconst tail = this.buffer.slice(this._consumed);\n\t\t\t\t\t\t\t\tthis.buffer = \"\";\n\t\t\t\t\t\t\t\tthis._consumed = 0;\n\t\t\t\t\t\t\t\tthis.readPos = 0;\n\t\t\t\t\t\t\t\treturn tail;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tindex = this._consumed;\n\t\t\t\t\t\t\t// 累积消费超过 64KB 时一次物理裁剪,避免 buffer 膨胀和过多 String 分配\n\t\t\t\t\t\t\tif (this._consumed > 65536) {\n\t\t\t\t\t\t\t\tthis.buffer = this.buffer.slice(this._consumed);\n\t\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t\t\tthis._consumed = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// look-ahead 没有看到逗号或 ],说明元素可能被分块截断了,暂不处理\n\t\t\t\t}\n\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\t// 6. buffer 裁剪:用 _consumed 取代逐个元素的 buffer.slice,\n\t\t\t// 每消费一个元素就 slice 一次在高吞吐下会大量分配临时 String。\n\t\t\t// 改为累积消费偏移,仅在本轮末尾做一次物理裁剪。\n\t\t\tif (this._consumed > 0) {\n\t\t\t\tif (this.elementStart !== -1) {\n\t\t\t\t\tthis.elementStart -= this._consumed;\n\t\t\t\t\tif (this.elementEnd !== -1) this.elementEnd -= this._consumed;\n\t\t\t\t}\n\t\t\t\tthis.buffer = this.buffer.slice(this._consumed);\n\t\t\t\tthis._consumed = 0;\n\t\t\t}\n\t\t\t// 保留原始逻辑:若 elementStart > 0 则将未完成元素对齐到 buffer 头部\n\t\t\tif (this.elementStart > 0) {\n\t\t\t\tthis.buffer = this.buffer.slice(this.elementStart);\n\t\t\t\tif (this.elementEnd !== -1) this.elementEnd -= this.elementStart;\n\t\t\t\tthis.elementStart = 0;\n\t\t\t}\n\n\t\t\tthis.readPos = this.elementStart === 0 ? this.buffer.length : 0;\n\n\t\t\treturn \"\";\n\t\t},\n\t\treset() {\n\t\t\tthis.buffer = \"\";\n\t\t\tthis._consumed = 0;\n\t\t\tthis.started = false;\n\t\t\tthis.finished = false;\n\t\t\tthis.inString = false;\n\t\t\tthis.escaped = false;\n\t\t\tthis.elementStart = -1;\n\t\t\tthis.elementEnd = -1;\n\t\t\tthis.nesting = 0;\n\t\t\tthis.readPos = 0;\n\t\t},\n\t};\n}\n","export const TOKEN_COLUMN = \"__sqlite_executor_token__\";\n\n/** 管线化批量发送的默认 batch 大小 */\nexport const DEFAULT_BATCH_SIZE = 10;\n\n/**\n * 管线最大并发数(inflight 任务上限)。\n * 防止大量任务一次性写入 stdin 撑爆 OS 管道缓冲区\n * (Windows 管道 buffer 仅 4KB,Unix 为 64KB)。\n */\nexport const DEFAULT_MAX_INFLIGHT = 50;\n","import { createRowStreamParser } from \"../core/parser.js\";\nimport { toError } from \"../core/parser.js\";\nimport { TOKEN_COLUMN } from \"../core/protocol.js\";\n\nexport { createRowStreamParser };\n\n/**\n * 为 stream 类型的任务设置行级流解析器。\n * 如果任务类型不是 \"stream\" 则返回 null。\n *\n * 解析器内部逐行解析 JSON 数组元素,每解析出一行就调用 task.onRow()。\n * 如果 onRow 抛异常,会将错误记录到 task.consumerError。\n *\n * sqlite3 `-json` 模式下空结果集不输出 `[]`,\n * 此时行解析器可能错误地消费 sentinel 数组(而非数据数组)。\n * 回调中检测 sentinel 行并回喂给 valueParser 以确保 sentinel 被识别。\n *\n * @param {{ kind: string, onRow?: Function, consumerError?: Error | null, token?: string }} task\n * @param {{ feed: Function }} valueParser - 共享 JSON 值解析器,用于回喂 sentinel 行\n * @returns {ReturnType<typeof createRowStreamParser> | null}\n */\nexport function setupStreamParser(task, valueParser = { feed() {} }) {\n\tif (task.kind !== \"stream\") return null;\n\tconst parser = createRowStreamParser((rawRow) => {\n\t\tif (task.consumerError) return;\n\t\ttry {\n\t\t\tconst row = JSON.parse(rawRow);\n\t\t\t// sqlite3 空结果不输出 [],导致 sentinel 被行解析器消费。\n\t\t\t// 若该行包含 TOKEN_COLUMN,回喂给 valueParser 做正式 sentinel 检测。\n\t\t\tif (typeof row === \"object\" && row !== null && TOKEN_COLUMN in row) {\n\t\t\t\tvalueParser.feed(`[${rawRow}]`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttask.onRow(row);\n\t\t} catch (error) {\n\t\t\ttask.consumerError = toError(error);\n\t\t}\n\t});\n\treturn parser;\n}\n\n/**\n * 将回调驱动的行流桥接到 Async Iterator 协议。\n *\n * stream 使用 onRow 回调消费行数据,\n * 而 stream() 方法返回 AsyncIterable 供 for await 使用。\n * AsyncRowBuffer 在两者之间充当适配器:\n * - push(row) 由 onRow 回调调用\n * - end() 由任务完成时调用\n * - error(err) 由任务失败时调用\n * - next() / [Symbol.asyncIterator]() 供消费者使用\n */\nexport class AsyncRowBuffer {\n\t#buffer = [];\n\t/** 已消费行在 #buffer 中的索引,替代 shift() 避免 O(N) 元素搬运 */\n\t#index = 0;\n\t#done = false;\n\t#error = null;\n\t#pending = null;\n\n\t/** 生产者侧:添加一行数据 */\n\tpush(row) {\n\t\tif (this.#done || this.#error) return;\n\t\tif (this.#pending) {\n\t\t\tconst resolve = this.#pending.resolve;\n\t\t\tthis.#pending = null;\n\t\t\tresolve({ value: row, done: false });\n\t\t} else {\n\t\t\tthis.#buffer.push(row);\n\t\t}\n\t}\n\n\t/** 生产者侧:标记数据流结束 */\n\tend() {\n\t\tthis.#done = true;\n\t\tif (this.#pending) {\n\t\t\tconst resolve = this.#pending.resolve;\n\t\t\tthis.#pending = null;\n\t\t\tresolve({ value: undefined, done: true });\n\t\t}\n\t}\n\n\t/** 生产者侧:标记数据流出错 */\n\terror(err) {\n\t\tthis.#error = err;\n\t\tif (this.#pending) {\n\t\t\tconst reject = this.#pending.reject;\n\t\t\tthis.#pending = null;\n\t\t\treject(err);\n\t\t}\n\t}\n\n\t/** AsyncIterator 协议:获取下一行 */\n\tnext() {\n\t\tif (this.#index < this.#buffer.length) {\n\t\t\treturn Promise.resolve({ value: this.#buffer[this.#index++], done: false });\n\t\t}\n\t\tif (this.#done) {\n\t\t\treturn Promise.resolve({ value: undefined, done: true });\n\t\t}\n\t\tif (this.#error) {\n\t\t\treturn Promise.reject(this.#error);\n\t\t}\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.#pending = { resolve, reject };\n\t\t});\n\t}\n\n\t/** for await 提前 break / return 时清理 */\n\treturn() {\n\t\tthis.#done = true;\n\t\tthis.#buffer = [];\n\t\tthis.#index = 0;\n\t\tif (this.#pending) {\n\t\t\tconst resolve = this.#pending.resolve;\n\t\t\tthis.#pending = null;\n\t\t\tresolve({ value: undefined, done: true });\n\t\t}\n\t\treturn Promise.resolve({ value: undefined, done: true });\n\t}\n\n\t[Symbol.asyncIterator]() {\n\t\treturn this;\n\t}\n}\n","import { AsyncRowBuffer } from \"../stream/stream.js\";\n\n/** SQLite 支持的三种事务模式 */\nexport const VALID_TRANSACTION_MODES = [\"DEFERRED\", \"IMMEDIATE\", \"EXCLUSIVE\"];\n\n/**\n * 判断给定的值是否为有效的事务模式。\n * @param {unknown} value\n * @returns {boolean}\n */\nexport function isTransactionMode(value) {\n\treturn VALID_TRANSACTION_MODES.includes(value);\n}\n\n/**\n * 创建一个事务操作句柄。\n * 该句柄的 execute/query/stream 方法会自动携带 scopeId,\n * 使得事务内的所有操作被标记为属于同一事务域。\n *\n * @param {symbol} scopeId - 事务域标识\n * @param {{ enqueue(kind: string, sql: string, params: any[], options: object, scopeId: symbol | null): Promise<any> }} executor\n * @returns {{ execute: Function, query: Function, stream: Function }}\n */\nexport function createTransactionHandle(scopeId, executor) {\n\tconst handle = {\n\t\texecute: (sql, params = [], options = {}) => executor.enqueue(\"execute\", sql, params, options, scopeId),\n\t\tquery: (sql, params = [], options = {}) => executor.enqueue(\"query\", sql, params, options, scopeId),\n\t\tstream: (sql, params = [], options = {}) => {\n\t\t\tif (!Array.isArray(params)) throw new TypeError(\"params must be an array\");\n\t\t\tconst buffer = new AsyncRowBuffer();\n\t\t\texecutor.enqueue(\"stream\", sql, params, { ...options, onRow: (row) => buffer.push(row) }, scopeId)\n\t\t\t\t.then(() => buffer.end(), (err) => buffer.error(err));\n\t\t\treturn buffer;\n\t\t},\n\t};\n\treturn handle;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport os from \"node:os\";\n\nconst isWindows = os.platform() === \"win32\";\n\n/**\n * 判断文件是否可执行\n */\nfunction isExecutable(filePath) {\n\ttry {\n\t\tif (isWindows) {\n\t\t\t// Windows:只要文件存在即可(是否可执行由扩展名判断)\n\t\t\treturn fs.statSync(filePath).isFile();\n\t\t} else {\n\t\t\tfs.accessSync(filePath, fs.constants.X_OK);\n\t\t\treturn true;\n\t\t}\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * 获取 Windows 下的可执行扩展名\n */\nfunction getPathExts() {\n\tif (!isWindows) return [\"\"];\n\tconst ext = process.env.PATHEXT || \".EXE;.CMD;.BAT;.COM;.PS1\";\n\treturn ext.split(\";\").map((e) => e.toLowerCase());\n}\n\n/**\n * which 实现\n * @param {string} command\n * @returns {string|null}\n */\nexport function which(command) {\n\tif (!command) return null;\n\n\tconst pathExts = getPathExts();\n\n\t// 如果 command 本身包含路径\n\tif (command.includes(path.sep)) {\n\t\tconst fullPath = path.resolve(command);\n\n\t\tif (isWindows) {\n\t\t\t// Windows:需要尝试补全扩展名\n\t\t\tif (path.extname(fullPath)) {\n\t\t\t\treturn isExecutable(fullPath) ? fullPath : null;\n\t\t\t}\n\n\t\t\tfor (const ext of pathExts) {\n\t\t\t\tconst file = fullPath + ext;\n\t\t\t\tif (isExecutable(file)) return file;\n\t\t\t}\n\t\t} else {\n\t\t\treturn isExecutable(fullPath) ? fullPath : null;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t// 从 PATH 中查找\n\tconst envPath = process.env.PATH || \"\";\n\tconst pathDirs = envPath.split(path.delimiter);\n\n\tfor (const dir of pathDirs) {\n\t\tif (!dir) continue;\n\n\t\tif (isWindows) {\n\t\t\tfor (const ext of pathExts) {\n\t\t\t\tconst file = path.join(dir, command + ext);\n\t\t\t\tif (isExecutable(file)) return file;\n\t\t\t}\n\t\t} else {\n\t\t\tconst file = path.join(dir, command);\n\t\t\tif (isExecutable(file)) return file;\n\t\t}\n\t}\n\n\treturn null;\n}\n","import { spawn } from \"node:child_process\";\nimport { once } from \"node:events\";\nimport fs from \"node:fs\";\nimport { which } from \"../which.js\";\n\n/** @type {number} */\nconst GRACEFUL_SHUTDOWN_TIMEOUT = 5_000;\n\n/**\n * 管理 sqlite3 子进程的生命周期。\n * 负责启动/stderr/stdin/stdout 管道配置,以及进程的终止与清理。\n */\nexport class ProcessManager {\n\t#binary;\n\t#database;\n\t#proc = null;\n\t#initMode;\n\t#draining = false;\n\t#onDrain;\n\n\t/**\n\t * @param {{ binary?: string, database?: string, initMode?: \"wal\" | \"none\", onDrain?: () => void }} options\n\t */\n\tconstructor({ binary, database, initMode = \"wal\", onDrain } = {}) {\n\t\tthis.#binary = which(binary) ?? binary;\n\t\tthis.#database = database;\n\t\tthis.#initMode = initMode;\n\t\tthis.#onDrain = onDrain ?? (() => {});\n\t}\n\n\t/** drain 状态为 true 时表示 OS pipe 已满,应暂停写入 stdin。 */\n\tget draining() {\n\t\treturn this.#draining;\n\t}\n\n\t/** 注册 drain 回调,当 pipe 重新可写时被调用。 */\n\tsetOnDrainCallback(fn) {\n\t\tthis.#onDrain = fn;\n\t}\n\n\tget binary() {\n\t\treturn this.#binary;\n\t}\n\n\tget process() {\n\t\treturn this.#proc;\n\t}\n\n\t/**\n\t * 启动 sqlite3 子进程。\n\t * 使用 `-json` 模式启动。\n\t * 对于文件数据库,initMode=\"wal\" 时自动启用 WAL 模式 + busy_timeout。\n\t * @returns {import(\"node:child_process\").ChildProcess}\n\t */\n\tstart() {\n\t\tif (!this.#binary) {\n\t\t\tthrow new Error(\"sqlite3 binary path is empty. Provide a valid --binary / binary option.\");\n\t\t}\n\t\tif (!fs.existsSync(this.#binary)) {\n\t\t\tthrow new Error(`sqlite3 binary not found: ${this.#binary}. Make sure sqlite3 is installed or provide a valid --binary / binary option.`);\n\t\t}\n\n\t\tconst args = [\"-json\"];\n\t\tif (this.#database) args.push(this.#database);\n\t\tif (this.#database && this.#database !== \":memory:\" && this.#initMode === \"wal\") {\n\t\t\targs.push(\"-cmd\", \"PRAGMA journal_mode=WAL;\");\n\t\t\targs.push(\"-cmd\", \"PRAGMA busy_timeout=5000;\");\n\t\t}\n\n\t\tconst proc = spawn(this.#binary, args, {\n\t\t\tstdio: \"pipe\",\n\t\t\tshell: false,\n\t\t\twindowsHide: true,\n\t\t});\n\n\t\tproc.stdin?.setDefaultEncoding(\"utf-8\");\n\t\tproc.stdout?.setEncoding(\"utf-8\");\n\t\tproc.stderr?.setEncoding(\"utf-8\");\n\n\t\tthis.#proc = proc;\n\t\treturn proc;\n\t}\n\n\t/**\n\t * 向子进程的 stdin 写入数据。\n\t *\n\t * 当 OS pipe 满时 `stream.write()` 返回 false,此刻:\n\t * - 设置 `#draining = true`,阻止后续写入(#pumpQueue 会在顶部检查 draining)\n\t * - 任务保留在队列中(不进入 inflight、不计时器),等 drain 事件后通过回调恢复发送\n\t * - OS pipe 一有空余,drain 事件触发 → 清 draining → 调用 #onDrain → #pumpQueue 重新发送\n\t *\n\t * 这样就彻底避免了 OS pipe 满导致 sqlite3 写 stdout 阻塞 → 无法读 stdin → 所有 inflight 饿死。\n\t * 管道的实际容量(Windows 4KB / Unix 64KB)不再重要 —— 写入自动节流。\n\t *\n\t * @param {string} data\n\t */\n\twrite(data) {\n\t\tconst stream = this.#proc?.stdin;\n\t\tif (!stream) return;\n\t\tif (this.#draining) return;\n\n\t\tif (!stream.write(data)) {\n\t\t\tthis.#draining = true;\n\t\t\tstream.once(\"drain\", () => {\n\t\t\t\tthis.#draining = false;\n\t\t\t\tthis.#onDrain();\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * 优雅关闭:向子进程发送 \".quit\" 命令并等待其自行退出。\n\t * 如果在超时时间内未退出,则强制 kill。\n\t * @returns {Promise<void>}\n\t */\n\tasync gracefulShutdown() {\n\t\tconst proc = this.#proc;\n\t\tif (!proc) return;\n\n\t\tconst timer = setTimeout(() => {\n\t\t\tproc.kill();\n\t\t}, GRACEFUL_SHUTDOWN_TIMEOUT);\n\n\t\ttry {\n\t\t\tproc.stdin?.write(\".quit\\n\");\n\t\t\tawait once(proc, \"close\");\n\t\t} catch {\n\t\t\t// 进程可能已被清理,忽略\n\t\t} finally {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t}\n\n\t/**\n\t * 终止子进程并清理所有监听器与管道。\n\t * @returns {import(\"node:child_process\").ChildProcess | null} 被终止的进程引用(如果没有正在运行的进程则为 null)\n\t */\n\tkill() {\n\t\tconst proc = this.#proc;\n\t\tif (!proc) return null;\n\t\tthis.#proc = null;\n\t\tthis.#draining = false;\n\t\tproc.stdout?.removeAllListeners();\n\t\tproc.stderr?.removeAllListeners();\n\t\tproc.removeAllListeners();\n\t\tproc.stdin?.destroy();\n\t\tproc.kill();\n\t\treturn proc;\n\t}\n}\n","let _counter = 0;\nconst _PREFIX = \"__executor_end__\";\nconst _PID36 = process.pid.toString(36);\n\n/**\n * 生成一个唯一的 sentinel token。\n * 使用递增计数器和进程 PID 组合,避免每次分配随机数字符串。\n * @returns {string}\n */\nexport function generateToken() {\n\t_counter = (_counter + 1) >>> 0; // 保持在 32 位无符号整数范围内\n\n\treturn `${_PREFIX}${_counter.toString(36)}_${_PID36}`;\n}\n","/**\n * 转义 SQLite 参数\n * @param {any} value\n * @returns {string}\n */\nexport function escapeValue(value) {\n\tif (typeof value === \"string\") {\n\t\t// 绝大多数字符串不含单引号,先检查再 replace 避免无意义的分配\n\t\treturn value.includes(\"'\") ? `'${value.replace(/'/g, \"''\")}'` : `'${value}'`;\n\t}\n\tif (value === null || value === undefined) return \"NULL\";\n\tif (typeof value === \"number\" || typeof value === \"bigint\") return String(value);\n\tif (typeof value === \"boolean\") return value ? \"TRUE\" : \"FALSE\";\n\tif (value instanceof Date) return `'${value.toISOString()}'`;\n\tthrow new TypeError(`Unsupported parameter type: ${typeof value}`);\n}\n","import { LRUCache } from \"../core/lruCache.js\";\nimport { escapeValue } from \"./escape.js\";\nimport {\n\tCC_SINGLE_QUOTE,\n\tCC_DOUBLE_QUOTE,\n\tCC_DASH,\n\tCC_SLASH,\n\tCC_STAR,\n\tCC_NEWLINE,\n\tCC_QUESTION,\n\tSTATE_NORMAL,\n\tSTATE_SINGLE_QUOTE,\n\tSTATE_DOUBLE_QUOTE,\n\tSTATE_LINE_COMMENT,\n\tSTATE_BLOCK_COMMENT,\n} from \"./constants.js\";\n\n/** @type {LRUCache<{ segments: string[], paramCount: number }>} */\nconst _interpCache = new LRUCache({ maxSize: 256, maxKeyLength: 4096 });\n\n/**\n * Parse an SQL template into text segments separated by `?` placeholders.\n * @param {string} sql\n * @returns {{ segments: string[], paramCount: number }}\n */\nfunction _parseTemplate(sql) {\n\tconst segments = [];\n\tlet segStart = 0;\n\tlet state = STATE_NORMAL;\n\tlet stateStartPos = -1;\n\n\tfor (let pos = 0; pos < sql.length; pos++) {\n\t\tconst code = sql.charCodeAt(pos);\n\n\t\tif (state === STATE_NORMAL) {\n\t\t\tif (code === CC_SINGLE_QUOTE) {\n\t\t\t\tstate = STATE_SINGLE_QUOTE;\n\t\t\t\tstateStartPos = pos;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (code === CC_DOUBLE_QUOTE) {\n\t\t\t\tstate = STATE_DOUBLE_QUOTE;\n\t\t\t\tstateStartPos = pos;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (code === CC_DASH && sql.charCodeAt(pos + 1) === CC_DASH) {\n\t\t\t\tstate = STATE_LINE_COMMENT;\n\t\t\t\tpos++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (code === CC_SLASH && sql.charCodeAt(pos + 1) === CC_STAR) {\n\t\t\t\tstate = STATE_BLOCK_COMMENT;\n\t\t\t\tstateStartPos = pos;\n\t\t\t\tpos++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (code === CC_QUESTION) {\n\t\t\t\tsegments.push(sql.slice(segStart, pos));\n\t\t\t\tsegStart = pos + 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (state === STATE_SINGLE_QUOTE) {\n\t\t\tif (code === CC_SINGLE_QUOTE) {\n\t\t\t\tif (sql.charCodeAt(pos + 1) === CC_SINGLE_QUOTE) {\n\t\t\t\t\tpos++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstate = STATE_NORMAL;\n\t\t\t\tstateStartPos = -1;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (state === STATE_DOUBLE_QUOTE) {\n\t\t\tif (code === CC_DOUBLE_QUOTE) {\n\t\t\t\tif (sql.charCodeAt(pos + 1) === CC_DOUBLE_QUOTE) {\n\t\t\t\t\tpos++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstate = STATE_NORMAL;\n\t\t\t\tstateStartPos = -1;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (state === STATE_LINE_COMMENT) {\n\t\t\tif (code === CC_NEWLINE) state = STATE_NORMAL;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (state === STATE_BLOCK_COMMENT) {\n\t\t\tif (code === CC_STAR && sql.charCodeAt(pos + 1) === CC_SLASH) {\n\t\t\t\tpos++;\n\t\t\t\tstate = STATE_NORMAL;\n\t\t\t\tstateStartPos = -1;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (state === STATE_SINGLE_QUOTE) {\n\t\tthrow new Error(`Unterminated single-quoted string starting at position ${stateStartPos + 1}`);\n\t}\n\n\tif (state === STATE_DOUBLE_QUOTE) {\n\t\tthrow new Error(`Unterminated double-quoted identifier/string starting at position ${stateStartPos + 1}`);\n\t}\n\n\tif (state === STATE_BLOCK_COMMENT) {\n\t\tthrow new Error(`Unterminated block comment starting at position ${stateStartPos + 1}`);\n\t}\n\n\tsegments.push(sql.slice(segStart));\n\treturn { segments, paramCount: segments.length - 1 };\n}\n\n/**\n * 替换 SQL 语句中的 ? 为转义后的参数\n * @param {string} sql\n * @param {any[]} params\n * @returns {string}\n */\nexport function interpolateSQL(sql, params) {\n\tif (!sql.includes(\"?\")) {\n\t\tif (params.length > 0) throw new Error(\"Too many parameters provided\");\n\t\treturn sql;\n\t}\n\n\tlet template = _interpCache.get(sql);\n\n\tif (template === undefined) {\n\t\ttemplate = _parseTemplate(sql);\n\t\t_interpCache.set(sql, template);\n\t}\n\n\tconst { segments, paramCount } = template;\n\tif (params.length < paramCount) throw new Error(\"Too few parameters provided\");\n\tif (params.length > paramCount) throw new Error(\"Too many parameters provided\");\n\n\tif (paramCount === 0) return segments[0];\n\n\tconst parts = [segments[0]];\n\tfor (let i = 0; i < params.length; i++) {\n\t\tparts.push(escapeValue(params[i]));\n\t\tparts.push(segments[i + 1]);\n\t}\n\treturn parts.join(\"\");\n}\n","import { LRUCache } from \"./lruCache.js\";\n\nconst READ_ONLY_KINDS = new Set([\"SELECT\", \"WITH\", \"VALUES\", \"EXPLAIN\"]);\n\n// LRU cache for classifySQL: keyed by normalized SQL template (before interpolation),\n// so repeated queries with different params hit the cache.\nconst _classifyCache = new LRUCache({ maxSize: 256, maxKeyLength: 4096 });\n\nfunction classifySingle(stmt) {\n\tconst trimmed = stmt.trim();\n\tif (trimmed.length === 0) return \"write\";\n\tconst kind = trimmed.split(/\\s+/)[0].toUpperCase();\n\treturn READ_ONLY_KINDS.has(kind) ? \"read\" : \"write\";\n}\n\n/**\n * 判断一条 SQL 语句是否为只读操作。\n * 多语句(以 ; 分隔)中若包含任意写语句,整体返回 \"write\"。\n * @param {string} sql\n * @returns {\"read\" | \"write\"}\n */\nexport function classifySQL(sql) {\n\tif (typeof sql !== \"string\") return \"write\";\n\n\tconst cached = _classifyCache.get(sql);\n\tif (cached !== undefined) return cached;\n\n\t// sql 已经过 normalizeSQL 去除首尾空白,但保留 trim() 防御直接调用\n\tconst trimmed = sql.trim();\n\tif (trimmed.length === 0) return \"write\";\n\tlet result;\n\tif (trimmed.includes(\";\")) {\n\t\tconst stmts = trimmed.split(\";\");\n\t\tresult = \"read\";\n\t\tfor (const stmt of stmts) {\n\t\t\tif (classifySingle(stmt) === \"write\") {\n\t\t\t\tresult = \"write\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = classifySingle(trimmed);\n\t}\n\n\t_classifyCache.set(sql, result);\n\treturn result;\n}\n","const INITIAL_CAPACITY = 16;\nconst SHRINK_THRESHOLD = 256; // >= 256 slots → clear() 时收缩到 INITIAL_CAPACITY\n\nexport class Queue {\n\t#items = new Array(INITIAL_CAPACITY);\n\t#head = 0;\n\t#tail = 0;\n\t#size = 0;\n\t#mask = INITIAL_CAPACITY - 1;\n\n\tenqueue(value) {\n\t\tif (this.#size === this.#items.length) {\n\t\t\tthis.#grow();\n\t\t}\n\t\tthis.#items[this.#tail] = value;\n\t\tthis.#tail = (this.#tail + 1) & this.#mask;\n\t\tthis.#size++;\n\t}\n\n\t#grow() {\n\t\tconst oldMask = this.#mask;\n\t\tconst newCap = this.#items.length * 2;\n\t\tthis.#mask = newCap - 1;\n\t\tif (this.#head === 0) {\n\t\t\t// Items are contiguous from index 0; extend in-place without copying.\n\t\t\tthis.#items.length = newCap;\n\t\t\tthis.#tail = this.#size;\n\t\t} else {\n\t\t\tconst newItems = new Array(newCap);\n\t\t\tfor (let i = 0; i < this.#size; i++) {\n\t\t\t\tnewItems[i] = this.#items[(this.#head + i) & oldMask];\n\t\t\t}\n\t\t\tthis.#items = newItems;\n\t\t\tthis.#head = 0;\n\t\t\tthis.#tail = this.#size;\n\t\t}\n\t}\n\n\tdequeue() {\n\t\tif (this.#size === 0) return null;\n\t\tconst value = this.#items[this.#head];\n\t\tthis.#items[this.#head] = undefined;\n\t\tthis.#head = (this.#head + 1) & this.#mask;\n\t\tthis.#size--;\n\t\treturn value;\n\t}\n\n\tclear() {\n\t\t// Reuse the existing backing array (avoids allocation + GC pressure on hot paths\n\t\t// such as #restoreDeferred which calls clear() on every exclusive-zone exit).\n\t\t// #mask stays valid: it equals #items.length - 1 and the array length is unchanged.\n\t\tthis.#items.fill(undefined);\n\t\tthis.#head = 0;\n\t\tthis.#tail = 0;\n\t\tthis.#size = 0;\n\t\tthis.#shrinkIfNeeded();\n\t}\n\n\t/**\n\t * 如果 backing array 远超实际需求,收缩到初始容量以释放内存。\n\t * 仅在 clear() 中调用(非热路径),避免热路径上的 GC 压力。\n\t * 在百万级 SQL 的高负载场景下,队列可能膨胀到数十万 slots,\n\t * 任务耗尽后的大数组将长期驻留内存。收缩解决此问题。\n\t */\n\t#shrinkIfNeeded() {\n\t\tif (this.#items.length >= SHRINK_THRESHOLD) {\n\t\t\tthis.#items = new Array(INITIAL_CAPACITY);\n\t\t\tthis.#mask = INITIAL_CAPACITY - 1;\n\t\t}\n\t}\n\n\tremove(value) {\n\t\tfor (let i = 0; i < this.#size; i++) {\n\t\t\tconst idx = (this.#head + i) & this.#mask;\n\t\t\tif (this.#items[idx] === value) {\n\t\t\t\tfor (let j = i; j < this.#size - 1; j++) {\n\t\t\t\t\tconst curr = (this.#head + j) & this.#mask;\n\t\t\t\t\tconst next = (this.#head + j + 1) & this.#mask;\n\t\t\t\t\tthis.#items[curr] = this.#items[next];\n\t\t\t\t}\n\t\t\t\tthis.#tail = (this.#tail - 1) & this.#mask;\n\t\t\t\tthis.#items[this.#tail] = undefined;\n\t\t\t\tthis.#size--;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tfind(predicate) {\n\t\tfor (let i = 0; i < this.#size; i++) {\n\t\t\tconst value = this.#items[(this.#head + i) & this.#mask];\n\t\t\tif (predicate(value)) return value;\n\t\t}\n\t\treturn null;\n\t}\n\n\ttoArray() {\n\t\tconst result = new Array(this.#size);\n\t\tfor (let i = 0; i < this.#size; i++) {\n\t\t\tresult[i] = this.#items[(this.#head + i) & this.#mask];\n\t\t}\n\t\treturn result;\n\t}\n\n\t*values() {\n\t\tfor (let i = 0; i < this.#size; i++) {\n\t\t\tyield this.#items[(this.#head + i) & this.#mask];\n\t\t}\n\t}\n\n\tpeek() {\n\t\treturn this.#size > 0 ? this.#items[this.#head] : null;\n\t}\n\n\t/**\n\t * Prepend all items from another Queue in front of this queue's existing items,\n\t * preserving the donor queue's order. The donor queue is emptied in the process.\n\t * This is more efficient than toArray() + clear() + repeated enqueue() because it\n\t * avoids allocating an intermediate array and minimises enqueue call overhead.\n\t * @param {Queue} other\n\t */\n\tprependAll(other) {\n\t\tif (other.isEmpty()) return;\n\n\t\t// Fast path: this queue is empty — just swap internals.\n\t\tif (this.#size === 0) {\n\t\t\tconst tmpItems = this.#items;\n\t\t\tconst tmpMask = this.#mask;\n\t\t\tthis.#items = other.#items;\n\t\t\tthis.#head = other.#head;\n\t\t\tthis.#tail = other.#tail;\n\t\t\tthis.#size = other.#size;\n\t\t\tthis.#mask = other.#mask;\n\t\t\tother.#items = tmpItems;\n\t\t\tother.#head = 0;\n\t\t\tother.#tail = 0;\n\t\t\tother.#size = 0;\n\t\t\tother.#mask = tmpMask;\n\t\t\treturn;\n\t\t}\n\n\t\t// General path: merge both queues into a new array so the donor's items\n\t\t// come first, followed by this queue's existing items.\n\t\tconst totalSize = this.#size + other.#size;\n\t\tlet newCap = this.#items.length;\n\t\twhile (newCap < totalSize) newCap *= 2;\n\n\t\tconst newItems = new Array(newCap);\n\t\tlet writeIdx = 0;\n\n\t\tfor (let i = 0; i < other.#size; i++) {\n\t\t\tnewItems[writeIdx++] = other.#items[(other.#head + i) & other.#mask];\n\t\t}\n\t\tfor (let i = 0; i < this.#size; i++) {\n\t\t\tnewItems[writeIdx++] = this.#items[(this.#head + i) & this.#mask];\n\t\t}\n\n\t\tthis.#items = newItems;\n\t\tthis.#head = 0;\n\t\tthis.#tail = totalSize;\n\t\tthis.#size = totalSize;\n\t\tthis.#mask = newCap - 1;\n\n\t\tother.#items.fill(undefined);\n\t\tother.#head = 0;\n\t\tother.#tail = 0;\n\t\tother.#size = 0;\n\t}\n\n\t[Symbol.iterator]() {\n\t\treturn this.values();\n\t}\n\n\tget size() {\n\t\treturn this.#size;\n\t}\n\n\tisEmpty() {\n\t\treturn this.#size === 0;\n\t}\n}\n","import { normalizeSQL } from \"../utils/normalize.js\";\nimport { TOKEN_COLUMN } from \"../constants.js\";\n\nexport { TOKEN_COLUMN } from \"../constants.js\";\n\n/**\n * 构建发送给 sqlite3 进程的完整载荷。\n * 在原始 SQL 末尾追加一条 sentinel 查询,用于标记该任务输出的结束。\n *\n * @param {string} sql - 要执行的 SQL 语句(已规范化时设 skipNormalize=true)\n * @param {string} token - 唯一 sentinel token\n * @param {{ skipNormalize?: boolean }} [options]\n * @returns {string} 追加了 sentinel 查询后的完整载荷\n */\nexport function buildPayload(sql, token, { skipNormalize = false } = {}) {\n\tconst normalized = skipNormalize ? sql : normalizeSQL(sql);\n\tconst suffix = normalized.endsWith(\";\") ? \"\" : \";\";\n\t// 模板字面量在 V8 中会优化为 join,保持原状即可\n\treturn `${normalized}${suffix}\\nSELECT '${token}' AS ${TOKEN_COLUMN};\\n`;\n}\n\n/**\n * 判断 SQL 是否为事务控制语句(BEGIN / COMMIT / ROLLBACK)。\n * WAL batch 不应包裹事务控制语句,否则会破坏事务嵌套层级。\n * @param {string} sql\n * @returns {boolean}\n */\nfunction isTransactionControl(sql) {\n\t// task.sql 已经过 normalizeSQL 去除首尾空白,trim() 冗余但保留防御\n\tconst s = sql.toUpperCase();\n\treturn (\n\t\ts === \"BEGIN\" ||\n\t\ts === \"BEGIN TRANSACTION\" ||\n\t\ts === \"COMMIT\" ||\n\t\ts === \"COMMIT TRANSACTION\" ||\n\t\ts === \"ROLLBACK\" ||\n\t\ts === \"ROLLBACK TRANSACTION\" ||\n\t\ts.startsWith(\"BEGIN \") ||\n\t\ts.startsWith(\"COMMIT \") ||\n\t\ts.startsWith(\"ROLLBACK \")\n\t);\n}\n\n/**\n * 将一批任务合并为单个发送给 sqlite3 进程的载荷字符串。\n * 由 PipelineEngine 和 TaskWorker 共享,避免 25 行重复 payload 构建逻辑。\n *\n * 如果全是 execute 类型且数量 > 1,自动使用 WAL 批量优化:\n * 将多条 INSERT/UPDATE 用 BEGIN/COMMIT 包裹后再追加各自的 sentinel token。\n *\n * WAL batch 会自动跳过事务控制语句(BEGIN / COMMIT / ROLLBACK),\n * 避免 BEGIN/COMMIT 被 WAL batch 的 BEGIN/COMMIT 再次包裹导致事务嵌套异常。\n *\n * @param {Array<{ kind: string, sql: string, token: string }>} batch\n * @returns {string}\n */\nexport function buildBatchPayload(batch) {\n\tconst useWalBatch =\n\t\tbatch.length > 1 &&\n\t\tbatch.every(t => t.kind === \"execute\" && !isTransactionControl(t.sql));\n\tif (useWalBatch) {\n\t\tconst parts = [\"BEGIN;\\n\"];\n\t\tfor (const task of batch) {\n\t\t\tparts.push(task.sql, \"\\n\");\n\t\t}\n\t\tparts.push(\"COMMIT;\\n\");\n\t\tfor (const task of batch) {\n\t\t\tparts.push(`SELECT '${task.token}' AS ${TOKEN_COLUMN};\\n`);\n\t\t}\n\t\treturn parts.join(\"\");\n\t}\n\n\tconst parts = [];\n\tfor (const task of batch) {\n\t\tparts.push(buildPayload(task.sql, task.token, { skipNormalize: true }));\n\t}\n\treturn parts.join(\"\");\n}\n\n/**\n * 通过原始字符串模式检测 sentinel 行,避免 JSON.parse。\n * sentinel 原始格式固定为 [{\"__sqlite_executor_token__\":\"TOKEN\"}],\n * token 由 crypto.randomUUID() 生成(hex UUID,不含特殊 JSON 字符),\n * 因此精确字符串匹配即可安全判断。\n *\n * @param {string} raw - 流式解析器提取的原始 JSON 文本\n * @param {string} token - 当前任务的唯一 token\n * @returns {boolean}\n */\nconst TC_FIRST_CHAR = TOKEN_COLUMN.charCodeAt(0);\n\nexport function isSentinelRaw(raw, token) {\n\treturn raw.charCodeAt(3) === TC_FIRST_CHAR && raw === `[{\"${TOKEN_COLUMN}\":\"${token}\"}]`;\n}\n\n/**\n * 检查解析出的 JSON 行是否为当前任务的 sentinel 结束标记行。\n *\n * @param {unknown} value - 已解析的 JSON 值\n * @param {string} token - 当前任务的唯一 token\n * @returns {boolean}\n */\nexport function isSentinelRow(value, token) {\n\treturn Array.isArray(value) && value.length === 1 && value[0]?.[TOKEN_COLUMN] === token;\n}\n","import { toError } from \"./parser.js\";\n\n/**\n * 将解析后的 JSON 数组行收集到 query 任务的结果数组中。\n * @param {{ rows: any[] }} task\n * @param {any} parsed\n */\nexport function collectQueryRows(task, parsed) {\n\tif (Array.isArray(parsed)) {\n\t\t// 延迟初始化 rows 数组(query 任务在 enqueue 时已创建,此分支仅防御性保障)\n\t\tif (!task.rows) task.rows = [];\n\t\ttask.rows.push(...parsed);\n\t}\n}\n\n/**\n * 将解析后的 JSON 数组元素通过 stream 任务的 onRow 逐行回调。\n * 若 onRow 抛错则记录到 task.consumerError 并停止后续回调。\n * @param {{ onRow: Function, consumerError?: Error | null }} task\n * @param {any} parsed\n */\nexport function processStreamRows(task, parsed) {\n\tif (!Array.isArray(parsed)) return;\n\tfor (const row of parsed) {\n\t\tif (task.consumerError) break;\n\t\ttry {\n\t\t\ttask.onRow(row);\n\t\t} catch (error) {\n\t\t\ttask.consumerError = toError(error);\n\t\t}\n\t}\n}\n\n/**\n * 最终结算一个任务:清除定时器、更新指标,然后 resolve 或 reject。\n * @param {object} task\n * @param {Error | null} error\n * @param {any} value\n * @param {import(\"./metrics.js\").Metrics | null | undefined} metrics\n * @param {{ resetRowParser?: boolean }} [options]\n */\nexport function settleTask(task, error, value, metrics, { resetRowParser = false } = {}) {\n\tif (task.settled) return;\n\ttask.settled = true;\n\n\tif (resetRowParser) {\n\t\ttask.rowParser?.reset?.();\n\t}\n\n\tif (error) {\n\t\tmetrics?.incrementTasksFailed();\n\t\ttask.reject(toError(error));\n\t\treturn;\n\t}\n\n\tconst duration = task.startTime > 0 ? performance.now() - task.startTime : 0;\n\tmetrics?.incrementTasksSuccess(duration);\n\ttask.resolve(value);\n}\n","import { settleTask } from \"./settleUtils.js\";\nimport { createTimeoutError } from \"../utils/timeout.js\";\n\n/**\n * 批量结算 pendingFinalize 集合中的所有任务。\n * 由 scheduleFinalizeCheck 的 setImmediate 回调调用。\n *\n * @param {Set<object>} tasks - pendingFinalizeTasks 集合\n * @param {(task: object, error: Error | null, value: any) => void} settle\n * @param {() => void} pumpQueue\n */\nexport function finalizePendingTasks(tasks, settle, pumpQueue) {\n\tfor (const task of tasks) {\n\t\tif (task.stderrText) {\n\t\t\tsettle(task, new Error(task.stderrText.trim()), undefined);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (task.consumerError) {\n\t\t\tsettle(task, task.consumerError, undefined);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (task.kind === \"query\") {\n\t\t\tsettle(task, null, task.rows);\n\t\t\tcontinue;\n\t\t}\n\n\t\tsettle(task, null, undefined);\n\t}\n\ttasks.clear();\n\tpumpQueue();\n}\n\n/**\n * 处理单任务超时:防重复结算、清除定时器、更新指标、创建超时错误。\n *\n * @param {object} task\n * @param {import(\"./metrics.js\").Metrics | null | undefined} metrics\n * @returns {Error | null} 已创建的 TimeoutError,若任务已结算则返回 null\n */\nexport function prepareTaskTimeout(task, metrics) {\n\tif (task.settled) return null;\n\ttask.timedout = true;\n\tmetrics?.incrementTasksTimeout();\n\treturn createTimeoutError(task.timeout, task.sql);\n}\n","import { ProcessManager } from \"./process.js\";\nimport { Queue } from \"./queue.js\";\nimport { createJsonValueParser, toError } from \"./parser.js\";\nimport { isSentinelRaw, isSentinelRow, buildBatchPayload } from \"./protocol.js\";\nimport { collectQueryRows, processStreamRows, settleTask } from \"./settleUtils.js\";\nimport { finalizePendingTasks, prepareTaskTimeout } from \"./pipelineUtils.js\";\nimport { DEFAULT_BATCH_SIZE, DEFAULT_MAX_INFLIGHT } from \"../constants.js\";\n\n/**\n * 单个 sqlite3 进程的任务执行器。\n * 内部维护 pending 和 inflight 两个队列,支持管线化(pipelining):\n * 多个任务的 SQL payload 合并为一次 stdin.write() 发送,由 sqlite3 顺序执行后,\n * 在 stdout 解析时按 FIFO 顺序匹配 sentinel token 并逐一完成 Promise。\n *\n * TaskWorker 不关心任务是读还是写——它只负责发送 SQL、解析输出、完成 Promise。\n * 由上层(SQLiteExecutor / ReaderPool)决定如何分发任务。\n */\nexport class TaskWorker {\n\t#processManager;\n\t#pendingQueue = new Queue();\n\t#inflightTasks = [];\n\t#pendingFinalizeTasks = new Set();\n\t#scheduledFinalize = false;\n\t#valueParser;\n\t#statementTimeout;\n\t#logger;\n\t#name;\n\t#batchSize;\n\t#maxInflight;\n\t#metrics;\n\n\t/**\n\t * @param {{\n\t * binary: string\n\t * database: string\n\t * statementTimeout: number\n\t * logger?: import(\"../index.js\").Logger\n\t * name?: string\n\t * initMode?: \"wal\" | \"none\"\n\t * batchSize?: number\n\t * metrics?: import(\"./metrics.js\").Metrics\n\t * }} options\n\t */\n\tconstructor({ binary, database, statementTimeout, logger, name, initMode, batchSize = DEFAULT_BATCH_SIZE, maxInflight = DEFAULT_MAX_INFLIGHT, metrics }) {\n\t\tthis.#name = name ?? \"worker\";\n\t\tthis.#statementTimeout = statementTimeout;\n\t\tthis.#logger = logger;\n\t\tthis.#batchSize = batchSize;\n\t\tthis.#maxInflight = maxInflight;\n\t\tthis.#metrics = metrics;\n\t\tthis.#processManager = new ProcessManager({ binary, database, initMode, onDrain: () => this.#pumpQueue() });\n\t\tthis.#valueParser = createJsonValueParser((raw) => this.#handleParsedValue(raw));\n\t\tthis.#startProcess();\n\t}\n\n\tget name() {\n\t\treturn this.#name;\n\t}\n\n\tget idle() {\n\t\treturn this.#inflightTasks.length === 0 && this.#pendingQueue.isEmpty() && this.#pendingFinalizeTasks.size === 0;\n\t}\n\n\tget pendingStatements() {\n\t\treturn this.#pendingQueue.size + this.#inflightTasks.length + this.#pendingFinalizeTasks.size;\n\t}\n\n\t/**\n\t * 接收一个任务配置并加入队列。\n\t * 任务配置应包含:kind, sql, timeout, token, resolve, reject, onRow\n\t * @param {object} config\n\t */\n\tenqueue(config) {\n\t\tconst task = {\n\t\t\tkind: config.kind,\n\t\t\tsql: config.sql,\n\t\t\ttimeout: config.timeout,\n\t\t\ttoken: config.token,\n\t\t\tresolve: config.resolve,\n\t\t\treject: config.reject,\n\t\t\trows: config.kind === \"query\" ? [] : undefined,\n\t\t\tonRow: config.onRow ?? null,\n\t\t\tconsumerError: null,\n\t\t\tstderrText: \"\",\n\t\t\tsettled: false,\n\t\t\terrorScheduled: false,\n\t\t\ttimer: null,\n\t\t\tstartTime: 0,\n\t\t};\n\t\tthis.#metrics?.incrementTasksTotal(config.kind);\n\t\tthis.#pendingQueue.enqueue(task);\n\t\tthis.#pumpQueue();\n\t}\n\n\t/** 测试用:获取底层子进程引用。 */\n\tget _process() {\n\t\treturn this.#processManager.process;\n\t}\n\n\t/** 终止进程并清理。 */\n\tkill() {\n\t\tthis.#rejectAll(new Error(`${this.#name} is killed`));\n\t\tthis.#processManager.kill();\n\t}\n\n\t// ---- 内部 ----\n\n\t#startProcess() {\n\t\tconst proc = this.#processManager.start();\n\n\t\tproc.stdout.on(\"data\", (chunk) => {\n\t\t\tthis.#valueParser.feed(chunk);\n\t\t});\n\n\t\tproc.stderr.on(\"data\", (chunk) => {\n\t\t\tthis.#handleStderrChunk(chunk);\n\t\t});\n\n\t\tproc.on(\"error\", (error) => {\n\t\t\tif (this.#processManager.process !== proc) return;\n\t\t\tthis.#logger?.error?.(`${this.#name} process error`, error);\n\t\t\tthis.#rejectAll(toError(error));\n\t\t});\n\n\t\tproc.on(\"close\", (code, signal) => {\n\t\t\tif (this.#processManager.process !== proc) return;\n\t\t\tconst err = new Error(`${this.#name} exited unexpectedly (code=${code}, signal=${signal ?? \"none\"})`);\n\t\t\tthis.#rejectAll(err);\n\t\t});\n\t}\n\n\t/**\n\t * 从 pendingQueue 中取出最多 batchSize 个任务,合并 payload 后一次性写入 stdin。\n\t * stream 任务必须单独发送(不与其他任务合批),且需要等 inflight 清空后再发送。\n\t */\n\t#pumpQueue() {\n\t\tif (this.#processManager.draining) return;\n\t\tif (this.#inflightTasks.length >= this.#maxInflight) return;\n\n\t\tconst batch = [];\n\t\twhile (\n\t\t\tbatch.length < this.#batchSize &&\n\t\t\t!this.#pendingQueue.isEmpty() &&\n\t\t\tthis.#inflightTasks.length + batch.length < this.#maxInflight\n\t\t) {\n\t\t\tconst task = this.#pendingQueue.peek();\n\t\t\tif (task.kind === \"stream\" && (batch.length > 0 || this.#inflightTasks.length > 0)) break;\n\t\t\tthis.#pendingQueue.dequeue();\n\t\t\tbatch.push(task);\n\t\t}\n\t\tif (batch.length === 0) return;\n\n\t\tconst now = performance.now();\n\n\t\tconst payload = buildBatchPayload(batch);\n\n\t\tfor (const task of batch) {\n\t\t\ttask.startTime = now;\n\t\t\ttask.timer = setTimeout(() => this.#handleTaskTimeout(task), task.timeout ?? this.#statementTimeout);\n\t\t}\n\t\tthis.#inflightTasks.push(...batch);\n\t\tthis.#processManager.write(payload);\n\t}\n\n\t/**\n\t * 单次 JSON 值到达时调用。\n\t * 按 FIFO 顺序匹配 inflightTasks[0] 的 sentinel token。\n\t */\n\t#handleParsedValue(raw) {\n\t\tconst task = this.#inflightTasks[0];\n\t\tif (!task) return;\n\n\t\t// Fast path: 原始字符串精确匹配 sentinel,跳过 JSON.parse\n\t\tif (isSentinelRaw(raw, task.token)) {\n\t\t\tclearTimeout(task.timer);\n\t\t\tthis.#inflightTasks.shift();\n\n\t\t\tif (task.timedout) {\n\t\t\t\tthis.#pumpQueue();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (task.stderrText) {\n\t\t\t\tthis.#settleTask(task, new Error(task.stderrText.trim()), undefined);\n\t\t\t\tthis.#pumpQueue();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (task.consumerError) {\n\t\t\t\tthis.#settleTask(task, task.consumerError, undefined);\n\t\t\t\tthis.#pumpQueue();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// stderr 和 stdout 是独立的 OS 管道,data 事件触发顺序无法保证。\n\t\t\t// 延迟一帧再 finalize,给 stderr 一个事件循环周期的时间到达。\n\t\t\t// 多个 task 共享同一个 setImmediate,减少事件循环开销。\n\t\t\tthis.#pendingFinalizeTasks.add(task);\n\t\t\tthis.#scheduleFinalizeCheck();\n\t\t\tthis.#pumpQueue();\n\t\t\treturn;\n\t\t}\n\n\t\t// Fast path: 空数组 [],execute 的零行结果,跳过 JSON.parse\n\t\tif (raw === \"[]\") return;\n\n\t\tlet parsed;\n\t\ttry {\n\t\t\tparsed = JSON.parse(raw);\n\t\t} catch (error) {\n\t\t\tthis.#rejectAll(new Error(`Invalid JSON from sqlite3: ${toError(error).message}`));\n\t\t\treturn;\n\t\t}\n\n\t\tif (isSentinelRow(parsed, task.token)) {\n\t\t\tclearTimeout(task.timer);\n\t\t\tthis.#inflightTasks.shift();\n\n\t\t\tif (task.timedout) {\n\t\t\t\tthis.#pumpQueue();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (task.stderrText) {\n\t\t\t\tthis.#settleTask(task, new Error(task.stderrText.trim()), undefined);\n\t\t\t\tthis.#pumpQueue();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (task.consumerError) {\n\t\t\t\tthis.#settleTask(task, task.consumerError, undefined);\n\t\t\t\tthis.#pumpQueue();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.#pendingFinalizeTasks.add(task);\n\t\t\tthis.#scheduleFinalizeCheck();\n\t\t\tthis.#pumpQueue();\n\t\t\treturn;\n\t\t}\n\n\t\tif (task.kind === \"query\") {\n\t\t\tcollectQueryRows(task, parsed);\n\t\t\treturn;\n\t\t}\n\n\t\tif (task.kind === \"stream\") {\n\t\t\tprocessStreamRows(task, parsed);\n\t\t}\n\t}\n\n\t/**\n\t * 批量处理 pendingFinalize 任务,合并多次 setImmediate 为一次。\n\t */\n\t#scheduleFinalizeCheck() {\n\t\tif (this.#scheduledFinalize) return;\n\t\tthis.#scheduledFinalize = true;\n\t\tsetImmediate(() => {\n\t\t\tthis.#scheduledFinalize = false;\n\t\t\tfinalizePendingTasks(this.#pendingFinalizeTasks, (t, e, v) => this.#settleTask(t, e, v), () => this.#pumpQueue());\n\t\t});\n\t}\n\n\t#handleStderrChunk(chunk) {\n\t\tconst task = this.#inflightTasks[0] ?? this.#pendingFinalizeTasks.values().next().value;\n\t\tif (!task) {\n\t\t\tthis.#logger?.error?.(String(chunk).trim());\n\t\t\treturn;\n\t\t}\n\t\ttask.stderrText += String(chunk);\n\t}\n\n\t#handleTaskTimeout(task) {\n\t\tconst error = prepareTaskTimeout(task, this.#metrics);\n\t\tif (error) this.#settleTask(task, error, undefined);\n\t}\n\n\t#settleTask(task, error, value) {\n\t\tsettleTask(task, error, value, this.#metrics);\n\t}\n\n\t#rejectAll(error) {\n\t\tconst all = this.#inflightTasks;\n\t\tthis.#inflightTasks = [];\n\n\t\tlet queued = this.#pendingQueue.dequeue();\n\t\twhile (queued) {\n\t\t\tthis.#settleTask(queued, error, undefined);\n\t\t\tqueued = this.#pendingQueue.dequeue();\n\t\t}\n\n\t\tfor (const task of all) {\n\t\t\tthis.#settleTask(task, error, undefined);\n\t\t}\n\n\t\tfor (const task of this.#pendingFinalizeTasks) {\n\t\t\tthis.#settleTask(task, error, undefined);\n\t\t}\n\t\tthis.#pendingFinalizeTasks.clear();\n\t}\n}\n","import { TaskWorker } from \"./taskWorker.js\";\n\n/**\n * 读取器连接池。\n * 维护多个 TaskWorker 实例,每个连接一个独立的 sqlite3 进程。\n * 通过 round-robin 分发只读任务,实现并发读取。\n */\nexport class ReaderPool {\n\t#workers = [];\n\t#rrIndex = 0;\n\n\t/**\n\t * @param {{\n\t * binary: string\n\t * database: string\n\t * poolSize: number\n\t * statementTimeout: number\n\t * logger?: import(\"../index.js\").Logger\n\t * metrics?: import(\"./metrics.js\").Metrics\n\t * }} options\n\t */\n\tconstructor({ binary, database, poolSize, statementTimeout, logger, metrics }) {\n\t\tif (poolSize < 1) throw new RangeError(\"poolSize must be >= 1\");\n\t\tfor (let i = 0; i < poolSize; i++) {\n\t\t\tconst worker = new TaskWorker({\n\t\t\t\tbinary,\n\t\t\t\tdatabase,\n\t\t\t\tstatementTimeout,\n\t\t\t\tlogger,\n\t\t\t\tmetrics,\n\t\t\t\tname: `reader-${i}`,\n\t\t\t\tinitMode: database !== \":memory:\" ? \"none\" : \"wal\",\n\t\t\t});\n\t\t\tthis.#workers.push(worker);\n\t\t}\n\t}\n\n\tget size() {\n\t\treturn this.#workers.length;\n\t}\n\n\tget pendingStatements() {\n\t\treturn this.#workers.reduce((sum, w) => sum + w.pendingStatements, 0);\n\t}\n\n\t/**\n\t * Round-robin 选择一个 reader 并执行任务。\n\t * @param {object} task\n\t */\n\tenqueue(task) {\n\t\tconst worker = this.#workers[this.#rrIndex % this.#workers.length];\n\t\tthis.#rrIndex = (this.#rrIndex + 1) >>> 0;\n\t\tworker.enqueue(task);\n\t}\n\n\t/** 测试用:获取内部 worker 列表。 */\n\tget _workers() {\n\t\treturn this.#workers;\n\t}\n\n\t/** 终止所有 reader 进程。 */\n\tkill() {\n\t\tfor (const worker of this.#workers) {\n\t\t\tworker.kill();\n\t\t}\n\t}\n}\n","/**\n * 轻量级运行时指标收集器。\n * 用于追踪 SQL 执行任务的吞吐、耗时、错误、超时和进程重启。\n *\n * 设计原则:\n * - 仅使用数字计数器,避免高频路径上的对象分配\n * - 所有 increment 方法 O(1)、无 throw\n * - 可被多个 TaskWorker / Executor 共享(通过引用传递)\n */\nexport class Metrics {\n\t#tasksTotal = 0;\n\t#tasksSuccess = 0;\n\t#tasksFailed = 0;\n\t#tasksTimeout = 0;\n\t#processRestarts = 0;\n\t#executeCount = 0;\n\t#queryCount = 0;\n\t#streamCount = 0;\n\t#totalDuration = 0;\n\t#startTime = Date.now();\n\n\tget tasksTotal() {\n\t\treturn this.#tasksTotal;\n\t}\n\n\tget tasksSuccess() {\n\t\treturn this.#tasksSuccess;\n\t}\n\n\tget tasksFailed() {\n\t\treturn this.#tasksFailed;\n\t}\n\n\tget tasksTimeout() {\n\t\treturn this.#tasksTimeout;\n\t}\n\n\tget processRestarts() {\n\t\treturn this.#processRestarts;\n\t}\n\n\tget executeCount() {\n\t\treturn this.#executeCount;\n\t}\n\n\tget queryCount() {\n\t\treturn this.#queryCount;\n\t}\n\n\tget streamCount() {\n\t\treturn this.#streamCount;\n\t}\n\n\t/** 累计任务耗时(毫秒),用于计算 avgQueryTime。 */\n\tget totalDuration() {\n\t\treturn this.#totalDuration;\n\t}\n\n\t/** Metrics 实例的创建时间(Unix 时间戳)。 */\n\tget startTime() {\n\t\treturn this.#startTime;\n\t}\n\n\t/**\n\t * 记录一个任务入队。\n\t * @param {\"execute\" | \"query\" | \"stream\"} kind\n\t */\n\tincrementTasksTotal(kind) {\n\t\tthis.#tasksTotal++;\n\t\tif (kind === \"execute\") this.#executeCount++;\n\t\telse if (kind === \"query\") this.#queryCount++;\n\t\telse if (kind === \"stream\") this.#streamCount++;\n\t}\n\n\t/**\n\t * 记录一个任务成功完成。\n\t * @param {number} duration 实际执行耗时(毫秒)\n\t */\n\tincrementTasksSuccess(duration) {\n\t\tthis.#tasksSuccess++;\n\t\tthis.#totalDuration += duration;\n\t}\n\n\t/** 记录一个任务失败。 */\n\tincrementTasksFailed() {\n\t\tthis.#tasksFailed++;\n\t}\n\n\t/** 记录一个任务超时。 */\n\tincrementTasksTimeout() {\n\t\tthis.#tasksTimeout++;\n\t}\n\n\t/** 记录 sqlite3 进程重启次数。 */\n\tincrementProcessRestarts() {\n\t\tthis.#processRestarts++;\n\t}\n\n\t/**\n\t * 返回当前所有指标的只读快照。\n\t * @returns {{\n\t * tasksTotal: number,\n\t * tasksSuccess: number,\n\t * tasksFailed: number,\n\t * tasksTimeout: number,\n\t * processRestarts: number,\n\t * executeCount: number,\n\t * queryCount: number,\n\t * streamCount: number,\n\t * avgQueryTime: number,\n\t * qps: number,\n\t * uptime: number,\n\t * }}\n\t */\n\tsnapshot() {\n\t\tconst elapsed = (Date.now() - this.#startTime) / 1000;\n\t\treturn {\n\t\t\ttasksTotal: this.#tasksTotal,\n\t\t\ttasksSuccess: this.#tasksSuccess,\n\t\t\ttasksFailed: this.#tasksFailed,\n\t\t\ttasksTimeout: this.#tasksTimeout,\n\t\t\tprocessRestarts: this.#processRestarts,\n\t\t\texecuteCount: this.#executeCount,\n\t\t\tqueryCount: this.#queryCount,\n\t\t\tstreamCount: this.#streamCount,\n\t\t\tavgQueryTime: this.#tasksSuccess > 0 ? (this.#totalDuration / this.#tasksSuccess) : 0,\n\t\t\tqps: elapsed > 0 ? (this.#tasksTotal / elapsed) : 0,\n\t\t\tuptime: elapsed,\n\t\t};\n\t}\n}\n","import { Queue } from \"./queue.js\";\nimport { settleTask } from \"./settleUtils.js\";\n\n/**\n * 事务作用域管理器。\n *\n * 事务内的所有操作绑定到同一个 scopeId,保证不被外部任务交错。\n * 事务外的任务自动暂存到延迟队列,在事务结束后恢复执行。\n */\nexport class TransactionScope {\n\t#deferredQueue = new Queue();\n\t#activeScopeId = null;\n\t#scopeChain = Promise.resolve();\n\n\t/** 当前事务的作用域 ID,无事务时为 null。 */\n\tget scopeId() {\n\t\treturn this.#activeScopeId;\n\t}\n\n\t/** 是否有事务正在执行。 */\n\tget active() {\n\t\treturn this.#activeScopeId !== null;\n\t}\n\n\t/** 延迟队列中的待处理任务数。 */\n\tget pendingStatements() {\n\t\treturn this.#deferredQueue.size;\n\t}\n\n\t/**\n\t * 判断给定 scopeId 的任务是否应当延迟执行。\n\t * @param {symbol | null} scopeId\n\t * @returns {boolean}\n\t */\n\tisDeferred(scopeId) {\n\t\treturn this.#activeScopeId !== null && this.#activeScopeId !== scopeId;\n\t}\n\n\t/** 将任务放入延迟队列。 */\n\tdefer(task) {\n\t\tthis.#deferredQueue.enqueue(task);\n\t}\n\n\t/**\n\t * 进入事务作用域。\n\t * 返回 scopeId 和 release 函数,调用 release 后下一个等待的事务可以执行。\n\t * @returns {Promise<{ scopeId: symbol, release: () => void }>}\n\t */\n\tasync enter() {\n\t\tconst scopeId = Symbol(\"transaction\");\n\t\tlet release = null;\n\t\tconst gate = new Promise((resolve) => { release = resolve; });\n\n\t\tconst previous = this.#scopeChain;\n\t\t// 将前一个 scopeChain 的 reject 吞掉,避免未捕获的 reject 传播。\n\t\t// 前一个事务可能因 ROLLBACK 而 reject,这不应影响当前事务的等待。\n\t\tthis.#scopeChain = previous.catch(() => {}).then(() => gate);\n\t\tawait previous.catch(() => {});\n\n\t\tthis.#activeScopeId = scopeId;\n\t\treturn { scopeId, release };\n\t}\n\n\t/** 退出事务作用域。 */\n\texit() {\n\t\tthis.#activeScopeId = null;\n\t}\n\n\t/**\n\t * 将延迟队列恢复到目标 Queue 的头部。\n\t * @param {import(\"./queue.js\").Queue} targetQueue\n\t */\n\trestoreDeferred(targetQueue) {\n\t\ttargetQueue.prependAll(this.#deferredQueue);\n\t}\n\n\t/**\n\t * 拒绝所有延迟队列中的任务。\n\t * @param {Error} error\n\t */\n\trejectAll(error) {\n\t\tlet task = this.#deferredQueue.dequeue();\n\t\twhile (task) {\n\t\t\tsettleTask(task, error, undefined, null);\n\t\t\ttask = this.#deferredQueue.dequeue();\n\t\t}\n\t}\n}\n","import { Queue } from \"./queue.js\";\nimport { createJsonValueParser, toError } from \"./parser.js\";\nimport { isSentinelRaw, isSentinelRow, buildBatchPayload } from \"./protocol.js\";\nimport { collectQueryRows, processStreamRows, settleTask } from \"./settleUtils.js\";\nimport { finalizePendingTasks, prepareTaskTimeout } from \"./pipelineUtils.js\";\nimport { DEFAULT_BATCH_SIZE, DEFAULT_MAX_INFLIGHT } from \"../constants.js\";\n\n/**\n * 管线化执行引擎。\n *\n * 维护任务队列、管理 inflight 任务、处理 stdout/stderr 解析、\n * 实现 sentinel token 协议和 stderr 竞态处理。\n *\n * PipelineEngine 不关心事务作用域、读写分离或进程恢复 ——\n * 这些由上层(SQLiteExecutor)负责。\n */\nexport class PipelineEngine {\n\t#queue = new Queue();\n\t#inflightTasks = [];\n\t#pendingFinalizeTasks = new Set();\n\t#scheduledFinalize = false;\n\t#sharedValueParser;\n\t#processManager;\n\t#metrics;\n\t#statementTimeout;\n\t#logger;\n\t#batchSize;\n\t#maxInflight;\n\t#onTaskTimeout;\n\t#active = false;\n\t#sweepTimer = null;\n\t#sweepIntervalMs;\n\n\t/**\n\t * @param {import(\"./process.js\").ProcessManager} processManager\n\t * @param {{\n\t * metrics: import(\"./metrics.js\").Metrics,\n\t * statementTimeout: number,\n\t * logger?: import(\"../index.js\").Logger,\n\t * batchSize?: number,\n\t * onTaskTimeout?: (task: object) => void,\n\t * }} options\n\t */\n\tconstructor(\n\t\tprocessManager,\n\t\t{\n\t\t\tmetrics,\n\t\t\tstatementTimeout,\n\t\t\tlogger,\n\t\t\tbatchSize = DEFAULT_BATCH_SIZE,\n\t\t\tmaxInflight = DEFAULT_MAX_INFLIGHT,\n\t\t\tonTaskTimeout,\n\t\t\tsweepInterval = 100,\n\t\t},\n\t) {\n\t\tthis.#processManager = processManager;\n\t\tthis.#metrics = metrics;\n\t\tthis.#statementTimeout = statementTimeout;\n\t\tthis.#logger = logger;\n\t\tthis.#batchSize = batchSize;\n\t\tthis.#maxInflight = maxInflight;\n\t\tthis.#onTaskTimeout = onTaskTimeout ?? (() => {});\n\t\tthis.#sharedValueParser = createJsonValueParser((raw) => this.#handleParsedValue(raw));\n\t\tthis.#processManager.setOnDrainCallback(() => this.#pumpQueue());\n\t\tthis.#sweepIntervalMs = sweepInterval;\n\t}\n\n\t/** 测试用:获取扫制定时器引用。 */\n\tget _sweepTimer() {\n\t\treturn this.#sweepTimer;\n\t}\n\n\t/** 主任务队列(供事务延迟任务恢复使用)。 */\n\tget mainQueue() {\n\t\treturn this.#queue;\n\t}\n\n\t/** 主动触发一次队列发送。 */\n\tpump() {\n\t\tthis.#pumpQueue();\n\t}\n\n\t/** 当前待处理的任务总数(队列中 + 执行中 + pendingFinalize)。 */\n\tget pendingStatements() {\n\t\treturn this.#queue.size + this.#inflightTasks.length + this.#pendingFinalizeTasks.size;\n\t}\n\n\t/**\n\t * 将数据送入 sharedValueParser 解析(供 stream 的 rowParser 回喂数据使用)。\n\t * @param {string} raw\n\t */\n\tfeed(raw) {\n\t\tthis.#sharedValueParser.feed(raw);\n\t}\n\n\t/** 标记引擎可用,允许发送任务。 */\n\tactivate() {\n\t\tthis.#sharedValueParser?.reset();\n\t\tthis.#active = true;\n\t}\n\n\t/** 标记引擎不可用,阻止发送新任务。 */\n\tdeactivate() {\n\t\tthis.#active = false;\n\t}\n\n\t/**\n\t * 入队一个任务。\n\t * 任务对象应包含:kind, sql, timeout, token, onRow, rows, resolve, reject,\n\t * consumerError, stderrText, timer, startTime, rowParser。\n\t * @param {object} task\n\t */\n\tenqueue(task) {\n\t\tthis.#queue.enqueue(task);\n\t\tthis.#pumpQueue();\n\t}\n\n\t/**\n\t * 从队列批量取出任务发送给 sqlite3 进程。\n\t * 非 stream 任务最多批量发送 DEFAULT_BATCH_SIZE 个;\n\t * stream 任务独占发送(队列中有 stream 时不会与其他任务打包)。\n\t */\n\t#pumpQueue() {\n\t\tif (!this.#active) return;\n\t\tif (this.#processManager.draining) return;\n\t\tif (this.#inflightTasks.length >= this.#maxInflight) return;\n\n\t\tconst batch = [];\n\t\twhile (batch.length < this.#batchSize && !this.#queue.isEmpty() && this.#inflightTasks.length + batch.length < this.#maxInflight) {\n\t\t\tconst task = this.#queue.peek();\n\t\t\tif (task.kind === \"stream\" && (batch.length > 0 || this.#inflightTasks.length > 0)) break;\n\t\t\tthis.#queue.dequeue();\n\t\t\tbatch.push(task);\n\t\t}\n\t\tif (batch.length === 0) return;\n\n\t\tconst now = performance.now();\n\n\t\tconst payload = buildBatchPayload(batch);\n\n\t\tfor (const task of batch) {\n\t\t\ttask.startTime = now;\n\t\t}\n\t\tthis.#inflightTasks.push(...batch);\n\t\tthis.#scheduleSweep();\n\t\tthis.#processManager.write(payload);\n\t}\n\n\t/**\n\t * 处理 sqlite3 的 stdout 输出。\n\t * 对于 stream 类型任务,先通过行流解析器逐行处理,剩余数据转给 JSON 值解析器。\n\t * @param {string} chunk\n\t */\n\thandleStdoutChunk(chunk) {\n\t\tconst task = this.#inflightTasks[0];\n\t\tif (!task) return;\n\n\t\t// 已超时的 stream 任务:禁止继续喂给 rowParser(rowParser.reset 后 finished=false,\n\t\t// 否则会触发 spurious onRow 回调)。数据直接走 sharedValueParser 由\n\t\t// #handleParsedValue 中的 task.timedout 短路丢弃。\n\t\tif (task.kind === \"stream\" && task.rowParser && !task.rowParser.finished && !task.timedout) {\n\t\t\tconst leftover = task.rowParser.feed(chunk);\n\t\t\tif (leftover) this.#sharedValueParser.feed(leftover);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#sharedValueParser.feed(chunk);\n\t}\n\n\t/**\n\t * 处理一个完整 JSON 值的解析结果。\n\t * 如果是 sentinel 行,则根据 stderr/consumerError 决定拒绝还是完成;\n\t * 否则按 query/stream 类型分别收集行数据或逐行回调。\n\t * @param {string} raw\n\t */\n\t#handleParsedValue(raw) {\n\t\tconst task = this.#inflightTasks[0];\n\t\tif (!task) return;\n\n\t\t// Fast path: 原始字符串精确匹配 sentinel,跳过 JSON.parse\n\t\tif (isSentinelRaw(raw, task.token)) {\n\t\t\tthis.#inflightTasks.shift();\n\n\t\t\tif (task.timedout) {\n\t\t\t\tthis.#pumpQueue();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// 无论 stderrText 是否为空,都走 pendingFinalize 延迟结算。\n\t\t\t// 原因:Windows 上 sqlite3 的 stderr 输出可能被 OS pipe 拆分为多个 chunk,\n\t\t\t// 若在此处立即 reject,后续到达的 stderr chunk 会丢失或被错误地配给下一个 inflight 任务。\n\t\t\t// 通过 pendingFinalize + setImmediate 给 stderr chunk 留足时间到达。\n\t\t\tif (task.consumerError) {\n\t\t\t\tthis.#settleTask(task, task.consumerError, undefined);\n\t\t\t\tthis.#pumpQueue();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.#pendingFinalizeTasks.add(task);\n\t\t\tthis.#scheduleFinalizeCheck();\n\t\t\tthis.#pumpQueue();\n\t\t\treturn;\n\t\t}\n\n\t\t// Fast path: 空数组 [],execute 的零行结果,跳过 JSON.parse\n\t\tif (raw === \"[]\") return;\n\n\t\tlet parsed;\n\t\ttry {\n\t\t\tparsed = JSON.parse(raw);\n\t\t} catch (error) {\n\t\t\tthis.rejectAll(new Error(`Invalid JSON from sqlite3: ${toError(error).message}`));\n\t\t\treturn;\n\t\t}\n\n\t\tif (isSentinelRow(parsed, task.token)) {\n\t\t\tthis.#inflightTasks.shift();\n\n\t\t\tif (task.timedout) {\n\t\t\t\tthis.#pumpQueue();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (task.consumerError) {\n\t\t\t\tthis.#settleTask(task, task.consumerError, undefined);\n\t\t\t\tthis.#pumpQueue();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.#pendingFinalizeTasks.add(task);\n\t\t\tthis.#scheduleFinalizeCheck();\n\t\t\tthis.#pumpQueue();\n\t\t\treturn;\n\t\t}\n\n\t\tif (task.timedout) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (task.kind === \"query\") {\n\t\t\tcollectQueryRows(task, parsed);\n\t\t\treturn;\n\t\t}\n\n\t\tif (task.kind === \"stream\") {\n\t\t\tprocessStreamRows(task, parsed);\n\t\t}\n\t}\n\n\t/**\n\t * 处理 sqlite3 的 stderr 输出。\n\t * 将错误文本附加到 inflight 任务或 pendingFinalize 任务;\n\t * 如果没有匹配任务则通过 logger 输出。\n\t * @param {string} chunk\n\t */\n\thandleStderrChunk(chunk) {\n\t\t// 优先匹配 pendingFinalize 任务,确保延迟到达的 stderr chunk\n\t\t// 被正确归因到原始任务,而非下一个 inflight 任务。\n\t\tconst task = this.#pendingFinalizeTasks.values().next().value ?? this.#inflightTasks[0];\n\t\tif (!task) {\n\t\t\tthis.#logger?.error?.(String(chunk).trim());\n\t\t\treturn;\n\t\t}\n\t\ttask.stderrText += String(chunk);\n\t}\n\n\t/**\n\t * 批量处理 pendingFinalize 任务,合并多次 setImmediate 为一次。\n\t */\n\t#scheduleFinalizeCheck() {\n\t\tif (this.#scheduledFinalize) return;\n\t\tthis.#scheduledFinalize = true;\n\t\tsetImmediate(() => {\n\t\t\tthis.#scheduledFinalize = false;\n\t\t\tfinalizePendingTasks(\n\t\t\t\tthis.#pendingFinalizeTasks,\n\t\t\t\t(t, e, v) => this.#settleTask(t, e, v),\n\t\t\t\t() => this.#pumpQueue(),\n\t\t\t);\n\t\t});\n\t}\n\n\t#scheduleSweep() {\n\t\tif (this.#sweepTimer) return;\n\t\tthis.#sweepTimer = setTimeout(() => {\n\t\t\tthis.#sweepTimer = null;\n\t\t\tconst inflight = this.#inflightTasks;\n\t\t\tconst now = performance.now();\n\t\t\tfor (let i = 0; i < inflight.length; i++) {\n\t\t\t\tconst task = inflight[i];\n\t\t\t\tif (now - task.startTime > task.timeout) {\n\t\t\t\t\tthis.#handleTaskTimeout(task);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.#inflightTasks.length > 0) {\n\t\t\t\tthis.#scheduleSweep();\n\t\t\t}\n\t\t}, this.#sweepIntervalMs).unref();\n\t}\n\n\t#handleTaskTimeout(task) {\n\t\tconst error = prepareTaskTimeout(task, this.#metrics);\n\t\tif (error) {\n\t\t\tthis.#settleTask(task, error, undefined);\n\t\t\tthis.#onTaskTimeout?.(task);\n\t\t}\n\t}\n\n\t#settleTask(task, error, value) {\n\t\tsettleTask(task, error, value, this.#metrics, { resetRowParser: true });\n\t}\n\n\t/**\n\t * 拒绝 inflight 任务以及队列中的所有待处理任务。\n\t * 不清除 deferred 队列(由上层负责)。\n\t * @param {Error} error\n\t */\n\trejectAll(error) {\n\t\tthis.#sharedValueParser.reset();\n\n\t\tconst all = this.#inflightTasks;\n\t\tthis.#inflightTasks = [];\n\n\t\tfor (const task of all) {\n\t\t\tthis.#settleTask(task, error, undefined);\n\t\t}\n\n\t\tlet queued = this.#queue.dequeue();\n\t\twhile (queued) {\n\t\t\tthis.#settleTask(queued, error, undefined);\n\t\t\tqueued = this.#queue.dequeue();\n\t\t}\n\n\t\tfor (const task of this.#pendingFinalizeTasks) {\n\t\t\tthis.#settleTask(task, error, undefined);\n\t\t}\n\t\tthis.#pendingFinalizeTasks.clear();\n\t}\n\n\t/**\n\t * 终止引擎:拒绝所有任务,清空状态。\n\t */\n\tkill() {\n\t\tthis.#active = false;\n\t\tclearTimeout(this.#sweepTimer);\n\t\tthis.#sweepTimer = null;\n\t\tthis.rejectAll(new Error(\"PipelineEngine is killed\"));\n\t}\n}\n","import { once } from \"node:events\";\nimport { DEFAULT_STATEMENT_TIMEOUT } from \"../utils/timeout.js\";\nimport { VALID_TRANSACTION_MODES, createTransactionHandle } from \"../transaction/transaction.js\";\nimport { ProcessManager } from \"./process.js\";\nimport { toError } from \"./parser.js\";\nimport { generateToken } from \"../utils/token.js\";\n\nimport { setupStreamParser, AsyncRowBuffer } from \"../stream/stream.js\";\nimport { interpolateSQL } from \"../utils/interpolate.js\";\nimport { normalizeSQL } from \"../utils/normalize.js\";\nimport { classifySQL } from \"./classifier.js\";\nimport { ReaderPool } from \"./readerPool.js\";\nimport { Metrics } from \"./metrics.js\";\nimport { TransactionScope } from \"./transactionScope.js\";\nimport { PipelineEngine } from \"./pipelineEngine.js\";\n\n/**\n * SQLite 执行器。\n *\n * 通过 stdin/stdout 与 sqlite3 CLI 进程通信,提供 execute/query/stream/transaction API。\n * 内部使用管线化队列批量发送任务,基于 Sentinel token 协议检测单个 SQL 任务的输出边界。\n */\nexport class SQLiteExecutor {\n\t#closed = false;\n\t#proc = null;\n\t#logger;\n\t#statementTimeout;\n\t#autoRestart;\n\t#fatalError = null;\n\t#processManager;\n\t#readerPool = null;\n\t#poolSize;\n\t#binary;\n\t#database;\n\t#metrics;\n\t#pipeline;\n\t#txScope = new TransactionScope();\n\n\t/**\n\t * @param {{\n\t * binary?: string,\n\t * database?: string,\n\t * logger?: import(\"../index.js\").Logger,\n\t * statementTimeout?: number,\n\t * autoRestart?: boolean,\n\t * poolSize?: number,\n\t * metrics?: import(\"./metrics.js\").Metrics,\n\t * }} options\n\t */\n\tconstructor({\n\t\tbinary = \"sqlite3\",\n\t\tdatabase = \":memory:\",\n\t\tlogger,\n\t\tstatementTimeout = DEFAULT_STATEMENT_TIMEOUT,\n\t\tautoRestart = true,\n\t\tpoolSize = 0,\n\t\tmetrics,\n\t} = {}) {\n\t\tthis.#logger = logger;\n\t\tthis.#statementTimeout = this.#normalizeTimeout(statementTimeout);\n\t\tthis.#autoRestart = autoRestart !== false;\n\t\tthis.#binary = binary;\n\t\tthis.#database = database;\n\t\tthis.#poolSize = poolSize;\n\t\tthis.#metrics = metrics ?? new Metrics();\n\n\t\tthis.#processManager = new ProcessManager({ binary, database });\n\t\tthis.#pipeline = new PipelineEngine(this.#processManager, {\n\t\t\tmetrics: this.#metrics,\n\t\t\tstatementTimeout: this.#statementTimeout,\n\t\t\tlogger: this.#logger,\n\t\t\tonTaskTimeout: () => {},\n\t\t});\n\t\tthis.#startProcess();\n\n\t\tif (poolSize > 0 && database !== \":memory:\") {\n\t\t\tthis.#readerPool = new ReaderPool({\n\t\t\t\tbinary,\n\t\t\t\tdatabase,\n\t\t\t\tpoolSize,\n\t\t\t\tstatementTimeout,\n\t\t\t\tlogger,\n\t\t\t\tmetrics: this.#metrics,\n\t\t\t});\n\t\t}\n\t}\n\n\t/** 当前待处理的任务总数(队列中 + 执行中 + reader 队列中) */\n\tget pendingStatements() {\n\t\treturn this.#txScope.pendingStatements + this.#pipeline.pendingStatements + (this.#readerPool?.pendingStatements ?? 0);\n\t}\n\n\t/** 读取器连接池(null 表示未启用读写分离)。 */\n\tget readerPool() {\n\t\treturn this.#readerPool;\n\t}\n\n\t/** 测试用:获取底层子进程引用。 */\n\tget _process() {\n\t\treturn this.#proc;\n\t}\n\n\t/** 运行时指标收集器。 */\n\tget metrics() {\n\t\treturn this.#metrics;\n\t}\n\n\t/**\n\t * 执行 SQL 语句(不返回行数据)。\n\t * 适用于 INSERT / UPDATE / CREATE 等非查询操作。\n\t * @param {string} sql\n\t * @param {any[]} [params]\n\t * @param {{ timeout?: number }} [options]\n\t * @returns {Promise<void>}\n\t */\n\tasync execute(sql, params = [], options = {}) {\n\t\tawait this.#enqueue(\"execute\", sql, params, options, null);\n\t}\n\n\t/**\n\t * 执行查询并返回所有结果行。\n\t * @template T\n\t * @param {string} sql\n\t * @param {any[]} [params]\n\t * @param {{ timeout?: number }} [options]\n\t * @returns {Promise<T[]>}\n\t */\n\tquery(sql, params = [], options = {}) {\n\t\treturn this.#enqueue(\"query\", sql, params, options, null);\n\t}\n\n\t/**\n\t * 流式执行查询,返回 AsyncIterable,可配合 `for await` 逐行消费。\n\t *\n\t * @template T\n\t * @param {string} sql\n\t * @param {any[]} [params]\n\t * @param {{ timeout?: number }} [options]\n\t * @returns {AsyncIterable<T>}\n\t */\n\tstream(sql, params = [], options = {}) {\n\t\tif (!Array.isArray(params)) throw new TypeError(\"params must be an array\");\n\n\t\tconst buffer = new AsyncRowBuffer();\n\n\t\tthis.#enqueue(\n\t\t\t\"stream\",\n\t\t\tsql,\n\t\t\tparams,\n\t\t\t{\n\t\t\t\t...options,\n\t\t\t\tonRow: (row) => buffer.push(row),\n\t\t\t},\n\t\t\tnull,\n\t\t).then(\n\t\t\t() => buffer.end(),\n\t\t\t(err) => buffer.error(err),\n\t\t);\n\n\t\treturn buffer;\n\t}\n\n\t/**\n\t * 在一个数据库事务中执行用户函数。\n\t * 事务内所有操作共享一个域,不会被外部任务交错。\n\t * 函数成功时自动 COMMIT,抛出异常时自动 ROLLBACK。\n\t * @template T\n\t * @param {(tx: import(\"../index.js\").TransactionHandle) => Promise<T>} fn\n\t * @param {{ mode?: \"DEFERRED\" | \"IMMEDIATE\" | \"EXCLUSIVE\" }} [options]\n\t * @returns {Promise<T>}\n\t */\n\tasync transaction(fn, options = {}) {\n\t\tconst mode = options?.mode ?? \"DEFERRED\";\n\t\tif (!VALID_TRANSACTION_MODES.includes(mode)) {\n\t\t\tthrow new TypeError(`transaction mode must be one of: ${VALID_TRANSACTION_MODES.join(\", \")}`);\n\t\t}\n\n\t\tconst { scopeId, release } = await this.#txScope.enter();\n\n\t\tconst tx = createTransactionHandle(scopeId, {\n\t\t\tenqueue: (kind, sql, params, options, sid) => this.#enqueue(kind, sql, params, options, sid),\n\t\t});\n\n\t\ttry {\n\t\t\tawait tx.execute(`BEGIN ${mode}`);\n\t\t\ttry {\n\t\t\t\tconst result = await fn(tx);\n\t\t\t\tawait tx.execute(\"COMMIT\");\n\t\t\t\treturn result;\n\t\t\t} catch (error) {\n\t\t\t\tawait tx.execute(\"ROLLBACK\").catch(() => {});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.#txScope.exit();\n\t\t\tthis.#txScope.restoreDeferred(this.#pipeline.mainQueue);\n\t\t\tthis.#pipeline.pump();\n\t\t\trelease();\n\t\t}\n\t}\n\n\t/**\n\t * 关闭执行器,拒绝所有待处理任务,终止 sqlite3 进程。\n\t * @returns {Promise<void>}\n\t */\n\tasync close() {\n\t\tif (this.#closed) return;\n\t\tthis.#closed = true;\n\t\tthis.#pipeline.kill();\n\t\tthis.#txScope.rejectAll(new Error(\"SQLiteExecutor is closed\"));\n\n\t\tthis.#readerPool?.kill();\n\n\t\tawait this.#processManager.gracefulShutdown();\n\t\tthis.#processManager.kill();\n\t\ttry {\n\t\t\tawait once(this.#processManager.process, \"close\");\n\t\t} catch {}\n\t}\n\n\t[Symbol.asyncDispose]() {\n\t\treturn this.close();\n\t}\n\n\t[Symbol.dispose]() {\n\t\tvoid this.close();\n\t}\n\n\t#normalizeTimeout(value) {\n\t\tif (!Number.isInteger(value) || value <= 0) {\n\t\t\tthrow new TypeError(\"statementTimeout must be a positive integer\");\n\t\t}\n\t\treturn value;\n\t}\n\n\t#startProcess() {\n\t\tlet proc;\n\t\ttry {\n\t\t\tproc = this.#processManager.start();\n\t\t} catch (error) {\n\t\t\tthis.#fatalError = toError(error);\n\t\t\tthis.#logger?.error?.(\"failed to start sqlite3 process\", this.#fatalError);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!proc.stdout) {\n\t\t\tthis.#fatalError = new Error(`Failed to spawn sqlite3 process: stdio unavailable (binary=${this.#binary})`);\n\t\t\tthis.#processManager.kill();\n\t\t\treturn;\n\t\t}\n\n\t\tproc.stdout.on(\"data\", (chunk) => {\n\t\t\tthis.#pipeline.handleStdoutChunk(chunk);\n\t\t});\n\n\t\tproc.stderr?.on(\"data\", (chunk) => {\n\t\t\tthis.#pipeline.handleStderrChunk(chunk);\n\t\t});\n\n\t\tproc.on(\"error\", (error) => {\n\t\t\tif (this.#proc !== proc) return;\n\t\t\tthis.#logger?.error?.(\"sqlite3 process error\", error);\n\t\t\tthis.#handleProcessFailure(error);\n\t\t});\n\n\t\tproc.on(\"close\", (code, signal) => {\n\t\t\tif (this.#proc !== proc) return;\n\t\t\tif (this.#closed) return;\n\t\t\tthis.#handleProcessFailure(new Error(`sqlite3 process exited unexpectedly (code=${code}, signal=${signal ?? \"none\"})`));\n\t\t});\n\n\t\tthis.#proc = proc;\n\t\tthis.#pipeline.activate();\n\t}\n\n\t#enqueue(kind, sql, params, options, scopeId) {\n\t\tif (this.#closed) return Promise.reject(new Error(\"SQLiteExecutor is closed\"));\n\t\tif (this.#fatalError) return Promise.reject(this.#fatalError);\n\t\tif (!Array.isArray(params)) return Promise.reject(new TypeError(\"params must be an array\"));\n\n\t\tconst timeout = options?.timeout ?? this.#statementTimeout;\n\t\tconst token = generateToken();\n\t\tconst onRow = options?.onRow ?? null;\n\n\t\tconst normalized = normalizeSQL(sql);\n\n\t\tlet formatted;\n\t\tlet sqlNormalized = true;\n\t\tif (params.length === 0 && !normalized.includes(\"?\")) {\n\t\t\tformatted = normalized;\n\t\t} else {\n\t\t\tformatted = interpolateSQL(normalized, params);\n\t\t}\n\n\t\tif (scopeId) {\n\t\t\treturn this.#enqueueWriter(kind, formatted, timeout, token, onRow, scopeId, sqlNormalized);\n\t\t}\n\n\t\tif (this.#readerPool) {\n\t\t\tif (kind === \"stream\" || kind === \"query\") {\n\t\t\t\treturn this.#enqueueReader(kind, formatted, timeout, token, onRow);\n\t\t\t}\n\t\t\tif (kind === \"execute\" && classifySQL(normalized) === \"read\") {\n\t\t\t\treturn this.#enqueueReader(kind, formatted, timeout, token, onRow);\n\t\t\t}\n\t\t}\n\n\t\treturn this.#enqueueWriter(kind, formatted, timeout, token, onRow, null, sqlNormalized);\n\t}\n\n\t#enqueueWriter(kind, sql, timeout, token, onRow, scopeId, sqlNormalized = false) {\n\t\tthis.#metrics.incrementTasksTotal(kind);\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst task = {\n\t\t\t\tkind,\n\t\t\t\tsql,\n\t\t\t\ttimeout,\n\t\t\t\ttoken,\n\t\t\t\tonRow,\n\t\t\t\tscopeId,\n\t\t\t\tsqlNormalized,\n\t\t\t\tresolve,\n\t\t\t\treject,\n\t\t\t\tconsumerError: null,\n\t\t\t\tstderrText: \"\",\n\t\t\t\tsettled: false,\n\t\t\t\ttimer: null,\n\t\t\t\tstartTime: 0,\n\t\t\t\trowParser: null,\n\t\t\t\trows: kind === \"query\" ? [] : null,\n\t\t\t};\n\n\t\t\tif (kind === \"stream\") {\n\t\t\t\ttask.rowParser = setupStreamParser(task, this.#pipeline);\n\t\t\t}\n\n\t\t\tif (this.#txScope.isDeferred(scopeId)) {\n\t\t\t\tthis.#txScope.defer(task);\n\t\t\t} else {\n\t\t\t\tthis.#pipeline.enqueue(task);\n\t\t\t}\n\t\t});\n\t}\n\n\t#enqueueReader(kind, sql, timeout, token, onRow) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.#readerPool.enqueue({\n\t\t\t\tkind,\n\t\t\t\tsql,\n\t\t\t\ttimeout,\n\t\t\t\ttoken,\n\t\t\t\tonRow,\n\t\t\t\tresolve,\n\t\t\t\treject,\n\t\t\t});\n\t\t});\n\t}\n\n\t#handleProcessFailure(error) {\n\t\tconst failure = toError(error);\n\t\tthis.#processManager.kill();\n\t\tthis.#proc = null;\n\n\t\tthis.#pipeline.deactivate();\n\t\tthis.#pipeline.rejectAll(failure);\n\t\tthis.#txScope.rejectAll(failure);\n\n\t\tif (!this.#closed && this.#autoRestart) {\n\t\t\tthis.#metrics.incrementProcessRestarts();\n\t\t\tthis.#startProcess();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#fatalError = failure;\n\t\tthis.#closed = true;\n\t}\n}\n"],"names":["_maxSize","_maxKeyLength","_map","LRUCache","_ref","maxSize","maxKeyLength","Map","Math","get","key","value","undefined","set","firstKey","clear","CC_SINGLE_QUOTE","CC_DOUBLE_QUOTE","CC_DASH","CC_SLASH","CC_STAR","CC_NEWLINE","CC_QUESTION","CC_SEMICOLON","CC_SPACE","STATE_NORMAL","STATE_SINGLE_QUOTE","STATE_DOUBLE_QUOTE","STATE_LINE_COMMENT","STATE_BLOCK_COMMENT","_normBuf","Uint16Array","_normDecoder","TextDecoder","_normCache","normalizeSQL","sql","cached","len","needed","outCodes","writePos","pendingSpace","state","i","code","nextCode","result","DEFAULT_STATEMENT_TIMEOUT","createTimeoutError","timeout","Error","toError","String","CHAR_QUOTE","CHAR_BACKSLASH","CHAR_OPEN_BRACKET","CHAR_CLOSE_BRACKET","CHAR_OPEN_BRACE","CHAR_CLOSE_BRACE","CHAR_COMMA","CHAR_SPACE","CHAR_TAB","CHAR_LF","CHAR_CR","isWhitespaceCode","createJsonValueParser","onValue","chunk","consumeUntil","index","raw","createRowStreamParser","onRow","leftover","lookAhead","delimiter","tail","TOKEN_COLUMN","DEFAULT_BATCH_SIZE","DEFAULT_MAX_INFLIGHT","setupStreamParser","task","valueParser","parser","rawRow","row","JSON","_type_of","error","Symbol","_buffer","_index","_done","_error","_pending","AsyncRowBuffer","push","resolve","end","err","reject","next","Promise","_return","VALID_TRANSACTION_MODES","createTransactionHandle","scopeId","executor","handle","params","options","Array","TypeError","buffer","isWindows","os","isExecutable","filePath","fs","getPathExts","ext","process","e","which","command","pathExts","path","fullPath","_iteratorError","file","envPath","pathDirs","_iteratorError1","dir","_iteratorError2","ext1","file1","file2","GRACEFUL_SHUTDOWN_TIMEOUT","_binary","_database","_proc","_initMode","_draining","_onDrain","ProcessManager","binary","database","initMode","onDrain","_which","setOnDrainCallback","fn","start","_proc_stdin","_proc_stdout","_proc_stderr","args","proc","spawn","write","data","stream","gracefulShutdown","timer","setTimeout","once","clearTimeout","kill","_counter","_PREFIX","_PID36","generateToken","escapeValue","Date","_interpCache","_parseTemplate","segments","segStart","stateStartPos","pos","interpolateSQL","template","paramCount","parts","READ_ONLY_KINDS","Set","_classifyCache","classifySingle","stmt","trimmed","kind","classifySQL","stmts","INITIAL_CAPACITY","SHRINK_THRESHOLD","_items","_head","_tail","_size","_mask","grow","shrinkIfNeeded","Queue","enqueue","dequeue","remove","idx","j","curr","find","predicate","toArray","values","peek","prependAll","other","tmpItems","tmpMask","totalSize","newCap","newItems","writeIdx","i1","isEmpty","oldMask","buildPayload","token","skipNormalize","normalized","suffix","isTransactionControl","s","buildBatchPayload","batch","useWalBatch","t","task1","parts1","task2","TC_FIRST_CHAR","isSentinelRaw","isSentinelRow","_value_","collectQueryRows","parsed","_task_rows","processStreamRows","settleTask","metrics","resetRowParser","_task_rowParser","duration","performance","finalizePendingTasks","tasks","settle","pumpQueue","prepareTaskTimeout","_processManager","_pendingQueue","_inflightTasks","_pendingFinalizeTasks","_scheduledFinalize","_valueParser","_statementTimeout","_logger","_name","_batchSize","_maxInflight","_metrics","startProcess","handleParsedValue","scheduleFinalizeCheck","handleStderrChunk","handleTaskTimeout","settleTask1","rejectAll","TaskWorker","param","statementTimeout","logger","name","batchSize","maxInflight","config","_config_onRow","_class_private_field_get_error","signal","now","payload","_task_timeout","setImmediate","v","_class_private_field_get_","all","queued","_workers","_rrIndex","ReaderPool","poolSize","RangeError","worker","sum","w","_tasksTotal","_tasksSuccess","_tasksFailed","_tasksTimeout","_processRestarts","_executeCount","_queryCount","_streamCount","_totalDuration","_startTime","Metrics","incrementTasksTotal","incrementTasksSuccess","incrementTasksFailed","incrementTasksTimeout","incrementProcessRestarts","snapshot","elapsed","_deferredQueue","_activeScopeId","_scopeChain","TransactionScope","isDeferred","defer","enter","release","gate","previous","exit","restoreDeferred","targetQueue","_queue","_sharedValueParser","_onTaskTimeout","_active","_sweepTimer","_sweepIntervalMs","scheduleSweep","PipelineEngine","processManager","onTaskTimeout","sweepInterval","pump","feed","activate","deactivate","handleStdoutChunk","_class_private_field_get_values_next_value","inflight","_this1","_closed","_autoRestart","_fatalError","_readerPool","_poolSize","_pipeline","_txScope","normalizeTimeout","enqueueWriter","enqueueReader","handleProcessFailure","SQLiteExecutor","autoRestart","_class_private_field_get_pendingStatements","execute","query","transaction","_options_mode","mode","tx","sid","close","Number","_options_timeout","_options_onRow","formatted","sqlNormalized","failure"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cjs/index.cjs","sources":["webpack://sqlite-executor/./src/utils/timeout.js","webpack://sqlite-executor/./src/core/parser.js","webpack://sqlite-executor/./src/constants.js","webpack://sqlite-executor/./src/stream/stream.js","webpack://sqlite-executor/./src/transaction/transaction.js","webpack://sqlite-executor/./src/which.js","webpack://sqlite-executor/./src/core/process.js","webpack://sqlite-executor/./src/utils/token.js","webpack://sqlite-executor/./src/core/lruCache.js","webpack://sqlite-executor/./src/utils/escape.js","webpack://sqlite-executor/./src/utils/interpolate.js","webpack://sqlite-executor/./src/utils/constants.js","webpack://sqlite-executor/./src/utils/normalize.js","webpack://sqlite-executor/./src/core/classifier.js","webpack://sqlite-executor/./src/core/queue.js","webpack://sqlite-executor/./src/core/protocol.js","webpack://sqlite-executor/./src/core/settleUtils.js","webpack://sqlite-executor/./src/core/pipelineUtils.js","webpack://sqlite-executor/./src/core/taskWorker.js","webpack://sqlite-executor/./src/core/readerPool.js","webpack://sqlite-executor/./src/core/metrics.js","webpack://sqlite-executor/./src/core/transactionScope.js","webpack://sqlite-executor/./src/core/pipelineEngine.js","webpack://sqlite-executor/./src/core/executor.js"],"sourcesContent":["/** 默认 SQL 超时时间(毫秒) */\nexport const DEFAULT_STATEMENT_TIMEOUT = 30_000;\n\n/**\n * 创建一个描述 SQL 超时的 Error 对象。\n * @param {number} timeout - 超时毫秒数\n * @param {string} sql - 超时的 SQL 语句(已标准化)\n * @returns {Error}\n */\nexport function createTimeoutError(timeout, sql) {\n\treturn new Error(`SQLite statement timed out after ${timeout}ms: ${sql}`);\n}\n","/**\n * 将任意值统一转为 Error 对象。\n * 如果已是 Error 实例则原样返回,否则将其字符串化后包装为新 Error。\n * @param {unknown} value\n * @returns {Error}\n */\nexport function toError(value) {\n\treturn value instanceof Error ? value : new Error(String(value));\n}\n\nconst CHAR_QUOTE = 34; // \"\nconst CHAR_BACKSLASH = 92; // \\\nconst CHAR_OPEN_BRACKET = 91; // [\nconst CHAR_CLOSE_BRACKET = 93; // ]\nconst CHAR_OPEN_BRACE = 123; // {\nconst CHAR_CLOSE_BRACE = 125; // }\nconst CHAR_COMMA = 44; // ,\nconst CHAR_SPACE = 32; //\nconst CHAR_TAB = 9; // \\t\nconst CHAR_LF = 10; // \\n\nconst CHAR_CR = 13; // \\r\n\n/**\n * 判断字符码是否为空白字符(空格、制表符、换行、回车)。\n * @param {number} code\n * @returns {boolean}\n */\nfunction isWhitespaceCode(code) {\n\treturn code === CHAR_SPACE || code === CHAR_TAB || code === CHAR_LF || code === CHAR_CR;\n}\n\n/**\n * 创建一个 JSON 值解析器,逐字符扫描流式数据,检测完整的顶层 JSON 值\n *(对象或数组),解析出完整的 JSON 文本后通过回调通知。\n *\n * 核心逻辑是一个状态机,维护以下状态:\n * start — 当前正在累积的顶层 JSON 值在 buffer 中的起始位置,-1 表示未开始\n * nesting — 当前嵌套深度(遇到 [ 或 { 递增,遇到 ] 或 } 递减)\n * inString — 是否在字符串内部(字符串内的括号不计入嵌套深度)\n * escaped — 前一个字符是否为反斜杠(用于处理字符串内的转义 \\\" \\\\ 等)\n *\n * 支持流式分块输入,通过 readPos 记录上次扫描位置,避免多次分块间重复扫描已处理数据。\n *\n * 关键优化:空数组 [] 走 fast path,直接跳过 slice 和 onValue 回调。\n *\n * @param {(raw: string) => void} onValue - 每当解析出一个完整 JSON 值时被调用\n * @returns {{\n * feed(chunk: string): void,\n * reset(): void,\n * buffer: string,\n * start: number,\n * readPos: number,\n * nesting: number,\n * inString: boolean,\n * escaped: boolean,\n * }}\n */\nexport function createJsonValueParser(onValue) {\n\treturn {\n\t\t// 累积的未解析原始数据\n\t\tbuffer: \"\",\n\t\t// 当前顶层 JSON 值在 buffer 中的起始索引,-1 表示未开始扫描顶层值\n\t\tstart: -1,\n\t\t// 上次扫描到的位置,下次 feed 从这继续,避免重复扫描\n\t\treadPos: 0,\n\t\t// 嵌套深度:遇到 [ 或 { 递增,遇到 ] 或 } 递减;归零表示一个完整值结束\n\t\tnesting: 0,\n\t\t// 是否在一对双引号内部(字符串内的括号不参与 nesting 计数)\n\t\tinString: false,\n\t\t// 前一个字符是否为反斜杠(处理字符串中的转义序列 \\\" \\\\ \\/ \\b \\f \\n \\r \\t \\uXXXX)\n\t\tescaped: false,\n\t\t// 已累积消费的字节数,用于延迟 buffer 物理裁剪,减少 String 分配和 GC 压力\n\t\t_consumed: 0,\n\t\tfeed(chunk) {\n\t\t\t// 1. 将新数据追加到 buffer 尾部\n\t\t\tthis.buffer += chunk;\n\t\t\tlet consumeUntil = 0;\n\n\t\t\t// 将状态缓存到局部变量,避免热循环中反复访问 this.* 引发的隐藏类查找\n\t\t\tconst buffer = this.buffer;\n\t\t\tlet start = this.start;\n\t\t\tlet nesting = this.nesting;\n\t\t\tlet inString = this.inString;\n\t\t\tlet escaped = this.escaped;\n\n\t\t\t// 2. 从上次处理到的位置继续扫描\n\t\t\tfor (let index = this.readPos; index < buffer.length; index++) {\n\t\t\t\tconst code = buffer.charCodeAt(index);\n\n\t\t\t\t// === 状态 A:未开始解析顶层值,跳过空白,寻找 [ 或 { ===\n\t\t\t\tif (start === -1) {\n\t\t\t\t\tif (isWhitespaceCode(code)) continue;\n\t\t\t\t\tif (code !== CHAR_OPEN_BRACKET && code !== CHAR_OPEN_BRACE) continue;\n\t\t\t\t\t// 找到顶层值的起始位置,初始化嵌套计数\n\t\t\t\t\tstart = index;\n\t\t\t\t\tnesting = 1;\n\t\t\t\t\tinString = false;\n\t\t\t\t\tescaped = false;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// === 状态 B:在字符串内部,处理转义序列 ===\n\t\t\t\tif (inString) {\n\t\t\t\t\tif (escaped) {\n\t\t\t\t\t\t// 前一个字符是反斜杠,当前字符被转义,重置 escaped\n\t\t\t\t\t\tescaped = false;\n\t\t\t\t\t} else if (code === CHAR_BACKSLASH) {\n\t\t\t\t\t\t// 遇到反斜杠,标记下一个字符为转义状态\n\t\t\t\t\t\tescaped = true;\n\t\t\t\t\t} else if (code === CHAR_QUOTE) {\n\t\t\t\t\t\t// 遇到未转义的双引号,字符串结束\n\t\t\t\t\t\tinString = false;\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// === 状态 C:不在字符串内,遇到双引号则进入字符串 ===\n\t\t\t\tif (code === CHAR_QUOTE) {\n\t\t\t\t\tinString = true;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// === 状态 D:不在字符串内,处理嵌套结构 ===\n\t\t\t\tif (code === CHAR_OPEN_BRACKET || code === CHAR_OPEN_BRACE) {\n\t\t\t\t\t// 进入一层嵌套\n\t\t\t\t\tnesting++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (code === CHAR_CLOSE_BRACKET || code === CHAR_CLOSE_BRACE) {\n\t\t\t\t\t// 退出一层嵌套\n\t\t\t\t\tnesting--;\n\t\t\t\t\tif (nesting === 0) {\n\t\t\t\t\t\t// 嵌套归零 → 一个完整的顶层 JSON 值解析完成\n\t\t\t\t\t\t// Fast path: 空数组 [],index === start + 1,无需 slice 和回调\n\t\t\t\t\t\tif (index === start + 1) {\n\t\t\t\t\t\t\tstart = -1;\n\t\t\t\t\t\t\tconsumeUntil = index + 1;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// 正常路径:切片出完整 JSON 文本,通过回调通知\n\t\t\t\t\t\tconst raw = buffer.slice(start, index + 1);\n\t\t\t\t\t\tstart = -1;\n\t\t\t\t\t\tonValue(raw);\n\t\t\t\t\t\tconsumeUntil = index + 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// 将局部状态写回 this,供下次 feed 调用继续使用\n\t\t\tthis.start = start;\n\t\t\tthis.nesting = nesting;\n\t\t\tthis.inString = inString;\n\t\t\tthis.escaped = escaped;\n\n\t\t\t// 3. 清理已消费部分:用 _consumed 记录已消费位置而非每次都物理裁剪 buffer。\n\t\t\t// 避免每个完整值都产生一次 String 分配(buffer.slice),\n\t\t\t// 仅在累积超过 64KB 时一次性物理裁剪,减少 GC 压力。\n\t\t\t// 注意:consumeUntil 是相对 buffer 起始的绝对位置,直接赋值即可。\n\t\t\tif (consumeUntil > 0) {\n\t\t\t\tthis._consumed = consumeUntil;\n\t\t\t\t// 当有未完成的部分值(start !== -1)时,readPos 跳到 buffer 末尾\n\t\t\t\t// 避免下次 feed 重扫已计入 nesting 的 [/{ 字符,\n\t\t\t\t// 同时保留 nested/inString/escaped 状态供继续解析。\n\t\t\t\tthis.readPos = this.start !== -1 ? buffer.length : this._consumed;\n\t\t\t\tif (this._consumed > 65536) {\n\t\t\t\t\tif (this.start !== -1) this.start -= this._consumed;\n\t\t\t\t\tthis.buffer = this.buffer.slice(this._consumed);\n\t\t\t\t\tthis.readPos = this.buffer.length;\n\t\t\t\t\tthis._consumed = 0;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// 没有完整值被消费,记录当前位置,下次 feed 从此继续\n\t\t\t\tthis.readPos = buffer.length;\n\t\t\t}\n\t\t},\n\t\treset() {\n\t\t\tthis.buffer = \"\";\n\t\t\tthis._consumed = 0;\n\t\t\tthis.start = -1;\n\t\t\tthis.readPos = 0;\n\t\t\tthis.nesting = 0;\n\t\t\tthis.inString = false;\n\t\t\tthis.escaped = false;\n\t\t},\n\t};\n}\n\n/**\n * 创建一个行流解析器,用于解析 sqlite3 `-json` 模式下输出的 JSON 数组。\n * 它不是一次性解析整个数组,而是在元素到达时逐行回调 `onRow`,\n * 支持分块输入、嵌套对象/数组、转义字符串。\n *\n * 核心状态机比 createJsonValueParser 更复杂,因为需要在数组上下文中\n * 逐个识别元素边界(逗号分隔,] 结束),而不是只匹配顶层括号匹配。\n *\n * 解析流程概览:\n * 1. 跳过空白,等待 [ → 标记 started\n * 2. 跳过空白和逗号,等待元素起始 → 记录 elementStart\n * 3. 扫描元素内容,跟踪 nesting 深度直到归零 → 记录 elementEnd\n * 4. 向前 look-ahead 确认后面是逗号或 ](即元素完全结束)→ 回调 onRow 并截断已处理部分\n * 5. 遇到 ] → 标记 finished,返回剩余数据\n *\n * @param {(rawRow: string) => void} onRow - 每当解析出一个数组元素时被调用,传入元素的原始 JSON 文本\n * @returns {{\n * feed(chunk: string): string,\n * reset(): void,\n * buffer: string,\n * started: boolean,\n * finished: boolean,\n * inString: boolean,\n * escaped: boolean,\n * elementStart: number,\n * elementEnd: number,\n * nesting: number,\n * readPos: number,\n * }}\n */\nexport function createRowStreamParser(onRow) {\n\treturn {\n\t\tbuffer: \"\",\n\t\t// 是否已遇到数组开始的 [\n\t\tstarted: false,\n\t\t// 是否已遇到数组结束的 ],之后 feed 直接返回输入\n\t\tfinished: false,\n\t\t// 是否在字符串内部\n\t\tinString: false,\n\t\t// 前一个字符是否为反斜杠\n\t\tescaped: false,\n\t\t// 当前元素在 buffer 中的起始位置\n\t\telementStart: -1,\n\t\t// 当前元素在 buffer 中的结束位置(exclusive)\n\t\telementEnd: -1,\n\t\t// 当前元素的嵌套深度(用于处理元素内部的嵌套结构)\n\t\tnesting: 0,\n\t\t// 上次扫描位置\n\t\treadPos: 0,\n\t\t// 已累积消费的字节数,用于延迟 buffer 物理裁剪\n\t\t_consumed: 0,\n\t\tfeed(chunk) {\n\t\t\t// 如果数组已结束,直接返回新数据\n\t\t\tif (this.finished) return chunk;\n\n\t\t\t// 1. 追加新数据到 buffer;将状态缓存到局部变量避免隐藏类查找\n\t\t\tthis.buffer += chunk;\n\n\t\t\tconst buffer = this.buffer;\n\t\t\tlet started = this.started;\n\t\t\tlet inString = this.inString;\n\t\t\tlet escaped = this.escaped;\n\t\t\tlet elementStart = this.elementStart;\n\t\t\tlet elementEnd = this.elementEnd;\n\t\t\tlet nesting = this.nesting;\n\t\t\tlet consumed = this._consumed;\n\t\t\tlet index = this.readPos;\n\n\t\t\twhile (index < buffer.length) {\n\t\t\t\tconst code = buffer.charCodeAt(index);\n\n\t\t\t\t// === 阶段 1:等待数组开始 [ ===\n\t\t\t\tif (!started) {\n\t\t\t\t\tif (isWhitespaceCode(code)) {\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (code !== CHAR_OPEN_BRACKET) {\n\t\t\t\t\t\t// 非 [ 的字符(非空白)直接跳过\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstarted = true;\n\t\t\t\t\tindex++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// === 阶段 2:在字符串内部,处理转义 ===\n\t\t\t\tif (inString) {\n\t\t\t\t\tif (escaped) {\n\t\t\t\t\t\tescaped = false;\n\t\t\t\t\t} else if (code === CHAR_BACKSLASH) {\n\t\t\t\t\t\tescaped = true;\n\t\t\t\t\t} else if (code === CHAR_QUOTE) {\n\t\t\t\t\t\tinString = false;\n\t\t\t\t\t}\n\t\t\t\t\tindex++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// === 阶段 3:不在任何元素内,等待元素起始 ===\n\t\t\t\tif (elementStart === -1) {\n\t\t\t\t\tif (isWhitespaceCode(code) || code === CHAR_COMMA) {\n\t\t\t\t\t\t// 跳过空白和元素间逗号\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (code === CHAR_CLOSE_BRACKET) {\n\t\t\t\t\t\t// 数组结束,标记 finished 并返回剩余数据\n\t\t\t\t\t\tthis.finished = true;\n\t\t\t\t\t\tthis.readPos = 0;\n\t\t\t\t\t\tthis.buffer = \"\";\n\t\t\t\t\t\tthis.started = false;\n\t\t\t\t\t\treturn buffer.slice(index + 1);\n\t\t\t\t\t}\n\t\t\t\t\t// 记录元素起始位置,初始化嵌套计数\n\t\t\t\t\telementStart = index;\n\t\t\t\t\telementEnd = -1;\n\t\t\t\t\tnesting = code === CHAR_OPEN_BRACE || code === CHAR_OPEN_BRACKET ? 1 : 0;\n\t\t\t\t\tinString = code === CHAR_QUOTE;\n\t\t\t\t\tescaped = false;\n\t\t\t\t\tindex++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// === 阶段 4:在元素内,处理字符串、嵌套结构 ===\n\t\t\t\tif (code === CHAR_QUOTE) {\n\t\t\t\t\tinString = true;\n\t\t\t\t\tindex++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (code === CHAR_OPEN_BRACE || code === CHAR_OPEN_BRACKET) {\n\t\t\t\t\tnesting++;\n\t\t\t\t\tindex++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (code === CHAR_CLOSE_BRACE || code === CHAR_CLOSE_BRACKET) {\n\t\t\t\t\tnesting--;\n\t\t\t\t\tif (nesting === 0) {\n\t\t\t\t\t\t// 嵌套归零,标记元素结束位置\n\t\t\t\t\t\telementEnd = index + 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// === 阶段 5:确认元素后面是逗号或 ],保证元素完整结束 ===\n\t\t\t\tif (elementEnd !== -1) {\n\t\t\t\t\t// 向前 look-ahead,跳过元素后的空白\n\t\t\t\t\tlet lookAhead = index + 1;\n\t\t\t\t\twhile (lookAhead < buffer.length && isWhitespaceCode(buffer.charCodeAt(lookAhead))) {\n\t\t\t\t\t\tlookAhead++;\n\t\t\t\t\t}\n\t\t\t\t\tif (lookAhead < buffer.length) {\n\t\t\t\t\t\tconst delimiter = buffer.charCodeAt(lookAhead);\n\t\t\t\t\t\tif (delimiter === CHAR_COMMA || delimiter === CHAR_CLOSE_BRACKET) {\n\t\t\t\t\t\t\t// 元素完整:切片出元素文本并回调\n\t\t\t\t\t\t\tonRow(buffer.slice(elementStart, elementEnd));\n\t\t\t\t\t\t\t// 不直接物理裁剪 buffer,改用 consumed 记录已消费位置\n\t\t\t\t\t\t\tconsumed = lookAhead + 1;\n\t\t\t\t\t\t\telementStart = -1;\n\t\t\t\t\t\t\telementEnd = -1;\n\t\t\t\t\t\t\tnesting = 0;\n\t\t\t\t\t\t\tif (delimiter === CHAR_CLOSE_BRACKET) {\n\t\t\t\t\t\t\t\t// 数组结束,从 consumed 处切片剩余数据返回\n\t\t\t\t\t\t\t\tthis.finished = true;\n\t\t\t\t\t\t\t\tthis.buffer = \"\";\n\t\t\t\t\t\t\t\tthis.started = false;\n\t\t\t\t\t\t\t\tthis.inString = false;\n\t\t\t\t\t\t\t\tthis.escaped = false;\n\t\t\t\t\t\t\t\tthis.elementStart = -1;\n\t\t\t\t\t\t\t\tthis.elementEnd = -1;\n\t\t\t\t\t\t\t\tthis.nesting = 0;\n\t\t\t\t\t\t\t\tthis._consumed = 0;\n\t\t\t\t\t\t\t\tthis.readPos = 0;\n\t\t\t\t\t\t\t\treturn buffer.slice(consumed);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tindex = consumed;\n\t\t\t\t\t\t\t// 累积消费超过 64KB 时一次物理裁剪,避免 buffer 膨胀和过多 String 分配\n\t\t\t\t\t\t\tif (consumed > 65536) {\n\t\t\t\t\t\t\t\tthis.buffer = buffer.slice(consumed);\n\t\t\t\t\t\t\t\tthis._consumed = 0;\n\t\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t\t\tconsumed = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// look-ahead 没有看到逗号或 ],说明元素可能被分块截断了,暂不处理\n\t\t\t\t}\n\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\t// 将局部状态写回 this,供下次 feed 调用继续使用\n\t\t\tthis.started = started;\n\t\t\tthis.inString = inString;\n\t\t\tthis.escaped = escaped;\n\t\t\tthis.elementStart = elementStart;\n\t\t\tthis.elementEnd = elementEnd;\n\t\t\tthis.nesting = nesting;\n\t\t\tthis._consumed = consumed;\n\n\t\t\t// 6. buffer 裁剪:用 _consumed 取代逐个元素的 buffer.slice,\n\t\t\t// 每消费一个元素就 slice 一次在高吞吐下会大量分配临时 String。\n\t\t\t// 改为累积消费偏移,仅在本轮末尾做一次物理裁剪。\n\t\t\tif (consumed > 0) {\n\t\t\t\tif (elementStart !== -1) {\n\t\t\t\t\tthis.elementStart -= consumed;\n\t\t\t\t\tif (elementEnd !== -1) this.elementEnd -= consumed;\n\t\t\t\t}\n\t\t\t\tthis.buffer = buffer.slice(consumed);\n\t\t\t\tthis._consumed = 0;\n\t\t\t}\n\t\t\t// 保留原始逻辑:若 elementStart > 0 则将未完成元素对齐到 buffer 头部\n\t\t\tif (this.elementStart > 0) {\n\t\t\t\tthis.buffer = this.buffer.slice(this.elementStart);\n\t\t\t\tif (this.elementEnd !== -1) this.elementEnd -= this.elementStart;\n\t\t\t\tthis.elementStart = 0;\n\t\t\t}\n\n\t\t\tthis.readPos = this.elementStart === 0 ? this.buffer.length : 0;\n\n\t\t\treturn \"\";\n\t\t},\n\t\treset() {\n\t\t\tthis.buffer = \"\";\n\t\t\tthis._consumed = 0;\n\t\t\tthis.started = false;\n\t\t\tthis.finished = false;\n\t\t\tthis.inString = false;\n\t\t\tthis.escaped = false;\n\t\t\tthis.elementStart = -1;\n\t\t\tthis.elementEnd = -1;\n\t\t\tthis.nesting = 0;\n\t\t\tthis.readPos = 0;\n\t\t},\n\t};\n}\n","export const TOKEN_COLUMN = \"__sqlite_executor_token__\";\n\n/** 管线化批量发送的默认 batch 大小 */\nexport const DEFAULT_BATCH_SIZE = 10;\n\n/**\n * 管线最大并发数(inflight 任务上限)。\n * 防止大量任务一次性写入 stdin 撑爆 OS 管道缓冲区\n * (Windows 管道 buffer 仅 4KB,Unix 为 64KB)。\n */\nexport const DEFAULT_MAX_INFLIGHT = 50;\n","import { createRowStreamParser } from \"../core/parser.js\";\nimport { toError } from \"../core/parser.js\";\nimport { TOKEN_COLUMN } from \"../core/protocol.js\";\n\nexport { createRowStreamParser };\n\n/**\n * 为 stream 类型的任务设置行级流解析器。\n * 如果任务类型不是 \"stream\" 则返回 null。\n *\n * 解析器内部逐行解析 JSON 数组元素,每解析出一行就调用 task.onRow()。\n * 如果 onRow 抛异常,会将错误记录到 task.consumerError。\n *\n * sqlite3 `-json` 模式下空结果集不输出 `[]`,\n * 此时行解析器可能错误地消费 sentinel 数组(而非数据数组)。\n * 回调中检测 sentinel 行并回喂给 valueParser 以确保 sentinel 被识别。\n *\n * @param {{ kind: string, onRow?: Function, consumerError?: Error | null, token?: string }} task\n * @param {{ feed: Function }} valueParser - 共享 JSON 值解析器,用于回喂 sentinel 行\n * @returns {ReturnType<typeof createRowStreamParser> | null}\n */\nexport function setupStreamParser(task, valueParser = { feed() {} }) {\n\tif (task.kind !== \"stream\") return null;\n\tconst parser = createRowStreamParser((rawRow) => {\n\t\tif (task.consumerError) return;\n\t\ttry {\n\t\t\tconst row = JSON.parse(rawRow);\n\t\t\t// sqlite3 空结果不输出 [],导致 sentinel 被行解析器消费。\n\t\t\t// 若该行包含 TOKEN_COLUMN,回喂给 valueParser 做正式 sentinel 检测。\n\t\t\tif (typeof row === \"object\" && row !== null && TOKEN_COLUMN in row) {\n\t\t\t\tvalueParser.feed(`[${rawRow}]`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttask.onRow(row);\n\t\t} catch (error) {\n\t\t\ttask.consumerError = toError(error);\n\t\t}\n\t});\n\treturn parser;\n}\n\n/**\n * 将回调驱动的行流桥接到 Async Iterator 协议。\n *\n * stream 使用 onRow 回调消费行数据,\n * 而 stream() 方法返回 AsyncIterable 供 for await 使用。\n * AsyncRowBuffer 在两者之间充当适配器:\n * - push(row) 由 onRow 回调调用\n * - end() 由任务完成时调用\n * - error(err) 由任务失败时调用\n * - next() / [Symbol.asyncIterator]() 供消费者使用\n */\nexport class AsyncRowBuffer {\n\t#buffer = [];\n\t/** 已消费行在 #buffer 中的索引,替代 shift() 避免 O(N) 元素搬运 */\n\t#index = 0;\n\t#done = false;\n\t#error = null;\n\t#pending = null;\n\n\t/** 生产者侧:添加一行数据 */\n\tpush(row) {\n\t\tif (this.#done || this.#error) return;\n\t\tif (this.#pending) {\n\t\t\tconst resolve = this.#pending.resolve;\n\t\t\tthis.#pending = null;\n\t\t\tresolve({ value: row, done: false });\n\t\t} else {\n\t\t\tthis.#buffer.push(row);\n\t\t}\n\t}\n\n\t/** 生产者侧:标记数据流结束 */\n\tend() {\n\t\tthis.#done = true;\n\t\tif (this.#pending) {\n\t\t\tconst resolve = this.#pending.resolve;\n\t\t\tthis.#pending = null;\n\t\t\tresolve({ value: undefined, done: true });\n\t\t}\n\t}\n\n\t/** 生产者侧:标记数据流出错 */\n\terror(err) {\n\t\tthis.#error = err;\n\t\tif (this.#pending) {\n\t\t\tconst reject = this.#pending.reject;\n\t\t\tthis.#pending = null;\n\t\t\treject(err);\n\t\t}\n\t}\n\n\t/** AsyncIterator 协议:获取下一行 */\n\tnext() {\n\t\tif (this.#index < this.#buffer.length) {\n\t\t\treturn Promise.resolve({ value: this.#buffer[this.#index++], done: false });\n\t\t}\n\t\tif (this.#done) {\n\t\t\treturn Promise.resolve({ value: undefined, done: true });\n\t\t}\n\t\tif (this.#error) {\n\t\t\treturn Promise.reject(this.#error);\n\t\t}\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.#pending = { resolve, reject };\n\t\t});\n\t}\n\n\t/** for await 提前 break / return 时清理 */\n\treturn() {\n\t\tthis.#done = true;\n\t\tthis.#buffer = [];\n\t\tthis.#index = 0;\n\t\tif (this.#pending) {\n\t\t\tconst resolve = this.#pending.resolve;\n\t\t\tthis.#pending = null;\n\t\t\tresolve({ value: undefined, done: true });\n\t\t}\n\t\treturn Promise.resolve({ value: undefined, done: true });\n\t}\n\n\t[Symbol.asyncIterator]() {\n\t\treturn this;\n\t}\n}\n","import { AsyncRowBuffer } from \"../stream/stream.js\";\n\n/** SQLite 支持的三种事务模式 */\nexport const VALID_TRANSACTION_MODES = [\"DEFERRED\", \"IMMEDIATE\", \"EXCLUSIVE\"];\n\n/**\n * 判断给定的值是否为有效的事务模式。\n * @param {unknown} value\n * @returns {boolean}\n */\nexport function isTransactionMode(value) {\n\treturn VALID_TRANSACTION_MODES.includes(value);\n}\n\n/**\n * 创建一个事务操作句柄。\n * 该句柄的 execute/query/stream 方法会自动携带 scopeId,\n * 使得事务内的所有操作被标记为属于同一事务域。\n *\n * @param {symbol} scopeId - 事务域标识\n * @param {{ enqueue(kind: string, sql: string, params: any[], options: object, scopeId: symbol | null): Promise<any> }} executor\n * @returns {{ execute: Function, query: Function, stream: Function }}\n */\nexport function createTransactionHandle(scopeId, executor) {\n\tconst handle = {\n\t\texecute: (sql, params = [], options = {}) => executor.enqueue(\"execute\", sql, params, options, scopeId),\n\t\tquery: (sql, params = [], options = {}) => executor.enqueue(\"query\", sql, params, options, scopeId),\n\t\tstream: (sql, params = [], options = {}) => {\n\t\t\tif (!Array.isArray(params)) throw new TypeError(\"params must be an array\");\n\t\t\tconst buffer = new AsyncRowBuffer();\n\t\t\texecutor.enqueue(\"stream\", sql, params, { ...options, onRow: (row) => buffer.push(row) }, scopeId)\n\t\t\t\t.then(() => buffer.end(), (err) => buffer.error(err));\n\t\t\treturn buffer;\n\t\t},\n\t};\n\treturn handle;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport os from \"node:os\";\n\nconst isWindows = os.platform() === \"win32\";\n\n/**\n * 判断文件是否可执行\n */\nfunction isExecutable(filePath) {\n\ttry {\n\t\tif (isWindows) {\n\t\t\t// Windows:只要文件存在即可(是否可执行由扩展名判断)\n\t\t\treturn fs.statSync(filePath).isFile();\n\t\t} else {\n\t\t\tfs.accessSync(filePath, fs.constants.X_OK);\n\t\t\treturn true;\n\t\t}\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * 获取 Windows 下的可执行扩展名\n */\nfunction getPathExts() {\n\tif (!isWindows) return [\"\"];\n\tconst ext = process.env.PATHEXT || \".EXE;.CMD;.BAT;.COM;.PS1\";\n\treturn ext.split(\";\").map((e) => e.toLowerCase());\n}\n\n/**\n * which 实现\n * @param {string} command\n * @returns {string|null}\n */\nexport function which(command) {\n\tif (!command) return null;\n\n\tconst pathExts = getPathExts();\n\n\t// 如果 command 本身包含路径\n\tif (command.includes(path.sep)) {\n\t\tconst fullPath = path.resolve(command);\n\n\t\tif (isWindows) {\n\t\t\t// Windows:需要尝试补全扩展名\n\t\t\tif (path.extname(fullPath)) {\n\t\t\t\treturn isExecutable(fullPath) ? fullPath : null;\n\t\t\t}\n\n\t\t\tfor (const ext of pathExts) {\n\t\t\t\tconst file = fullPath + ext;\n\t\t\t\tif (isExecutable(file)) return file;\n\t\t\t}\n\t\t} else {\n\t\t\treturn isExecutable(fullPath) ? fullPath : null;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t// 从 PATH 中查找\n\tconst envPath = process.env.PATH || \"\";\n\tconst pathDirs = envPath.split(path.delimiter);\n\n\tfor (const dir of pathDirs) {\n\t\tif (!dir) continue;\n\n\t\tif (isWindows) {\n\t\t\tfor (const ext of pathExts) {\n\t\t\t\tconst file = path.join(dir, command + ext);\n\t\t\t\tif (isExecutable(file)) return file;\n\t\t\t}\n\t\t} else {\n\t\t\tconst file = path.join(dir, command);\n\t\t\tif (isExecutable(file)) return file;\n\t\t}\n\t}\n\n\treturn null;\n}\n","import { spawn } from \"node:child_process\";\nimport { once } from \"node:events\";\nimport fs from \"node:fs\";\nimport { which } from \"../which.js\";\n\n/** @type {number} */\nconst GRACEFUL_SHUTDOWN_TIMEOUT = 5_000;\n\n/**\n * 管理 sqlite3 子进程的生命周期。\n * 负责启动/stderr/stdin/stdout 管道配置,以及进程的终止与清理。\n */\nexport class ProcessManager {\n\t#binary;\n\t#database;\n\t#proc = null;\n\t#initMode;\n\t#draining = false;\n\t#onDrain;\n\n\t/**\n\t * @param {{ binary?: string, database?: string, initMode?: \"wal\" | \"none\", onDrain?: () => void }} options\n\t */\n\tconstructor({ binary, database, initMode = \"wal\", onDrain } = {}) {\n\t\tthis.#binary = which(binary) ?? binary;\n\t\tthis.#database = database;\n\t\tthis.#initMode = initMode;\n\t\tthis.#onDrain = onDrain ?? (() => {});\n\t}\n\n\t/** drain 状态为 true 时表示 OS pipe 已满,应暂停写入 stdin。 */\n\tget draining() {\n\t\treturn this.#draining;\n\t}\n\n\t/** 注册 drain 回调,当 pipe 重新可写时被调用。 */\n\tsetOnDrainCallback(fn) {\n\t\tthis.#onDrain = fn;\n\t}\n\n\tget binary() {\n\t\treturn this.#binary;\n\t}\n\n\tget process() {\n\t\treturn this.#proc;\n\t}\n\n\t/**\n\t * 启动 sqlite3 子进程。\n\t * 使用 `-json` 模式启动。\n\t * 对于文件数据库,initMode=\"wal\" 时自动启用 WAL 模式 + busy_timeout。\n\t * @returns {import(\"node:child_process\").ChildProcess}\n\t */\n\tstart() {\n\t\tif (!this.#binary) {\n\t\t\tthrow new Error(\"sqlite3 binary path is empty. Provide a valid --binary / binary option.\");\n\t\t}\n\t\tif (!fs.existsSync(this.#binary)) {\n\t\t\tthrow new Error(`sqlite3 binary not found: ${this.#binary}. Make sure sqlite3 is installed or provide a valid --binary / binary option.`);\n\t\t}\n\n\t\tconst args = [\"-json\"];\n\t\tif (this.#database) args.push(this.#database);\n\t\tif (this.#database && this.#database !== \":memory:\" && this.#initMode === \"wal\") {\n\t\t\targs.push(\"-cmd\", \"PRAGMA journal_mode=WAL;\");\n\t\t\targs.push(\"-cmd\", \"PRAGMA busy_timeout=5000;\");\n\t\t}\n\n\t\tconst proc = spawn(this.#binary, args, {\n\t\t\tstdio: \"pipe\",\n\t\t\tshell: false,\n\t\t\twindowsHide: true,\n\t\t});\n\n\t\tproc.stdin?.setDefaultEncoding(\"utf-8\");\n\t\tproc.stdout?.setEncoding(\"utf-8\");\n\t\tproc.stderr?.setEncoding(\"utf-8\");\n\n\t\tthis.#proc = proc;\n\t\treturn proc;\n\t}\n\n\t/**\n\t * 向子进程的 stdin 写入数据。\n\t *\n\t * 当 OS pipe 满时 `stream.write()` 返回 false,此刻:\n\t * - 设置 `#draining = true`,阻止后续写入(#pumpQueue 会在顶部检查 draining)\n\t * - 任务保留在队列中(不进入 inflight、不计时器),等 drain 事件后通过回调恢复发送\n\t * - OS pipe 一有空余,drain 事件触发 → 清 draining → 调用 #onDrain → #pumpQueue 重新发送\n\t *\n\t * 这样就彻底避免了 OS pipe 满导致 sqlite3 写 stdout 阻塞 → 无法读 stdin → 所有 inflight 饿死。\n\t * 管道的实际容量(Windows 4KB / Unix 64KB)不再重要 —— 写入自动节流。\n\t *\n\t * @param {string} data\n\t */\n\twrite(data) {\n\t\tconst stream = this.#proc?.stdin;\n\t\tif (!stream) return;\n\t\tif (this.#draining) return;\n\n\t\tif (!stream.write(data)) {\n\t\t\tthis.#draining = true;\n\t\t\tstream.once(\"drain\", () => {\n\t\t\t\tthis.#draining = false;\n\t\t\t\tthis.#onDrain();\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * 优雅关闭:向子进程发送 \".quit\" 命令并等待其自行退出。\n\t * 如果在超时时间内未退出,则强制 kill。\n\t * @returns {Promise<void>}\n\t */\n\tasync gracefulShutdown() {\n\t\tconst proc = this.#proc;\n\t\tif (!proc) return;\n\n\t\tconst timer = setTimeout(() => {\n\t\t\tproc.kill();\n\t\t}, GRACEFUL_SHUTDOWN_TIMEOUT);\n\n\t\ttry {\n\t\t\tproc.stdin?.write(\".quit\\n\");\n\t\t\tawait once(proc, \"close\");\n\t\t} catch {\n\t\t\t// 进程可能已被清理,忽略\n\t\t} finally {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t}\n\n\t/**\n\t * 终止子进程并清理所有监听器与管道。\n\t * @returns {import(\"node:child_process\").ChildProcess | null} 被终止的进程引用(如果没有正在运行的进程则为 null)\n\t */\n\tkill() {\n\t\tconst proc = this.#proc;\n\t\tif (!proc) return null;\n\t\tthis.#proc = null;\n\t\tthis.#draining = false;\n\t\tproc.stdout?.removeAllListeners();\n\t\tproc.stderr?.removeAllListeners();\n\t\tproc.removeAllListeners();\n\t\tproc.stdin?.destroy();\n\t\tproc.kill();\n\t\treturn proc;\n\t}\n}\n","let _counter = 0;\nconst _PREFIX = \"__executor_end__\";\nconst _PID36 = process.pid.toString(36);\n\n/**\n * 生成一个唯一的 sentinel token。\n * 使用递增计数器和进程 PID 组合,避免每次分配随机数字符串。\n * @returns {string}\n */\nexport function generateToken() {\n\t_counter = (_counter + 1) >>> 0; // 保持在 32 位无符号整数范围内\n\n\treturn `${_PREFIX}${_counter.toString(36)}_${_PID36}`;\n}\n","/**\n * 基于 Map 插入顺序的 LRU 缓存。\n *\n * 使用 `get()` 命中时自动将条目提升到末尾;\n * `set()` 在达到容量上限时淘汰最久未访问的条目(首个 key)。\n * 仅缓存字符串 key,长度超过 `maxKeyLength` 的 key 不会被缓存。\n *\n * @template T\n */\nexport class LRUCache {\n\t#maxSize;\n\t#maxKeyLength;\n\t#maxValueLength;\n\t/** @type {Map<string, T>} */\n\t#map = new Map();\n\n\t/**\n\t * @param {{ maxSize?: number, maxKeyLength?: number, maxValueLength?: number }} [options]\n\t */\n\tconstructor({ maxSize = 256, maxKeyLength = 4096, maxValueLength = Infinity } = {}) {\n\t\tthis.#maxSize = Math.max(1, maxSize);\n\t\tthis.#maxKeyLength = maxKeyLength;\n\t\tthis.#maxValueLength = maxValueLength;\n\t}\n\n\t/**\n\t * 获取缓存值。命中时将条目提升到末尾;未命中或 key 不合法时返回 undefined。\n\t * @param {string} key\n\t * @returns {T | undefined}\n\t */\n\tget(key) {\n\t\tif (typeof key !== \"string\" || key.length > this.#maxKeyLength) return undefined;\n\t\tconst value = this.#map.get(key);\n\t\tif (value === undefined) return undefined;\n\t\tthis.#map.delete(key);\n\t\tthis.#map.set(key, value);\n\t\treturn value;\n\t}\n\n\t/**\n\t * 设置缓存值。达到容量上限时淘汰最旧条目。超长 key 不缓存。\n\t * @param {string} key\n\t * @param {T} value\n\t */\n\tset(key, value) {\n\t\tif (typeof key !== \"string\" || key.length > this.#maxKeyLength) return;\n\t\tif (value && value.length > this.#maxValueLength) return;\n\t\tif (this.#map.size >= this.#maxSize) {\n\t\t\tconst firstKey = this.#map.keys().next().value;\n\t\t\tthis.#map.delete(firstKey);\n\t\t}\n\t\tthis.#map.set(key, value);\n\t}\n\n\t/** 当前缓存条目数。 */\n\tget size() {\n\t\treturn this.#map.size;\n\t}\n\n\t/** 清空缓存。 */\n\tclear() {\n\t\tthis.#map.clear();\n\t}\n}\n","/**\n * 转义 SQLite 参数\n * @param {any} value\n * @returns {string}\n */\nexport function escapeValue(value) {\n\tif (typeof value === \"string\") {\n\t\t// 绝大多数字符串不含单引号,先检查再 replace 避免无意义的分配\n\t\treturn value.includes(\"'\") ? `'${value.replace(/'/g, \"''\")}'` : `'${value}'`;\n\t}\n\tif (value === null || value === undefined) return \"NULL\";\n\tif (typeof value === \"number\" || typeof value === \"bigint\") return String(value);\n\tif (typeof value === \"boolean\") return value ? \"TRUE\" : \"FALSE\";\n\tif (value instanceof Date) return `'${value.toISOString()}'`;\n\tthrow new TypeError(`Unsupported parameter type: ${typeof value}`);\n}\n","import { LRUCache } from \"../core/lruCache.js\";\nimport { escapeValue } from \"./escape.js\";\nimport {\n\tCC_SINGLE_QUOTE,\n\tCC_DOUBLE_QUOTE,\n\tCC_DASH,\n\tCC_SLASH,\n\tCC_STAR,\n\tCC_NEWLINE,\n\tCC_QUESTION,\n\tSTATE_NORMAL,\n\tSTATE_SINGLE_QUOTE,\n\tSTATE_DOUBLE_QUOTE,\n\tSTATE_LINE_COMMENT,\n\tSTATE_BLOCK_COMMENT,\n} from \"./constants.js\";\n\n/** @type {LRUCache<{ segments: string[], paramCount: number }>} */\nconst _interpCache = new LRUCache({ maxSize: 256, maxKeyLength: 4096 });\n\n/**\n * Parse an SQL template into text segments separated by `?` placeholders.\n * @param {string} sql\n * @returns {{ segments: string[], paramCount: number }}\n */\nfunction _parseTemplate(sql) {\n\tconst segments = [];\n\tlet segStart = 0;\n\tlet state = STATE_NORMAL;\n\tlet stateStartPos = -1;\n\n\tfor (let pos = 0; pos < sql.length; pos++) {\n\t\tconst code = sql.charCodeAt(pos);\n\n\t\tif (state === STATE_NORMAL) {\n\t\t\tif (code === CC_SINGLE_QUOTE) {\n\t\t\t\tstate = STATE_SINGLE_QUOTE;\n\t\t\t\tstateStartPos = pos;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (code === CC_DOUBLE_QUOTE) {\n\t\t\t\tstate = STATE_DOUBLE_QUOTE;\n\t\t\t\tstateStartPos = pos;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (code === CC_DASH && sql.charCodeAt(pos + 1) === CC_DASH) {\n\t\t\t\tstate = STATE_LINE_COMMENT;\n\t\t\t\tpos++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (code === CC_SLASH && sql.charCodeAt(pos + 1) === CC_STAR) {\n\t\t\t\tstate = STATE_BLOCK_COMMENT;\n\t\t\t\tstateStartPos = pos;\n\t\t\t\tpos++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (code === CC_QUESTION) {\n\t\t\t\tsegments.push(sql.slice(segStart, pos));\n\t\t\t\tsegStart = pos + 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (state === STATE_SINGLE_QUOTE) {\n\t\t\tif (code === CC_SINGLE_QUOTE) {\n\t\t\t\tif (sql.charCodeAt(pos + 1) === CC_SINGLE_QUOTE) {\n\t\t\t\t\tpos++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstate = STATE_NORMAL;\n\t\t\t\tstateStartPos = -1;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (state === STATE_DOUBLE_QUOTE) {\n\t\t\tif (code === CC_DOUBLE_QUOTE) {\n\t\t\t\tif (sql.charCodeAt(pos + 1) === CC_DOUBLE_QUOTE) {\n\t\t\t\t\tpos++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstate = STATE_NORMAL;\n\t\t\t\tstateStartPos = -1;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (state === STATE_LINE_COMMENT) {\n\t\t\tif (code === CC_NEWLINE) state = STATE_NORMAL;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (state === STATE_BLOCK_COMMENT) {\n\t\t\tif (code === CC_STAR && sql.charCodeAt(pos + 1) === CC_SLASH) {\n\t\t\t\tpos++;\n\t\t\t\tstate = STATE_NORMAL;\n\t\t\t\tstateStartPos = -1;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (state === STATE_SINGLE_QUOTE) {\n\t\tthrow new Error(`Unterminated single-quoted string starting at position ${stateStartPos + 1}`);\n\t}\n\n\tif (state === STATE_DOUBLE_QUOTE) {\n\t\tthrow new Error(`Unterminated double-quoted identifier/string starting at position ${stateStartPos + 1}`);\n\t}\n\n\tif (state === STATE_BLOCK_COMMENT) {\n\t\tthrow new Error(`Unterminated block comment starting at position ${stateStartPos + 1}`);\n\t}\n\n\tsegments.push(sql.slice(segStart));\n\treturn { segments, paramCount: segments.length - 1 };\n}\n\n/**\n * 使用预解析的模板替换参数,避免重新扫描 SQL。\n * @param {{ segments: string[], paramCount: number }} template\n * @param {any[]} params\n * @returns {string}\n */\nexport function interpolateFromTemplate(template, params) {\n\tconst { segments, paramCount } = template;\n\tif (params.length < paramCount) throw new Error(\"Too few parameters provided\");\n\tif (params.length > paramCount) throw new Error(\"Too many parameters provided\");\n\n\tif (paramCount === 0) return segments[0];\n\n\tconst parts = [segments[0]];\n\tfor (let i = 0; i < params.length; i++) {\n\t\tparts.push(escapeValue(params[i]));\n\t\tparts.push(segments[i + 1]);\n\t}\n\treturn parts.join(\"\");\n}\n\n/**\n * 替换 SQL 语句中的 ? 为转义后的参数\n * @param {string} sql\n * @param {any[]} params\n * @returns {string}\n */\nexport function interpolateSQL(sql, params) {\n\tif (!sql.includes(\"?\")) {\n\t\tif (params.length > 0) throw new Error(\"Too many parameters provided\");\n\t\treturn sql;\n\t}\n\n\tlet template = _interpCache.get(sql);\n\n\tif (template === undefined) {\n\t\ttemplate = _parseTemplate(sql);\n\t\t_interpCache.set(sql, template);\n\t}\n\n\treturn interpolateFromTemplate(template, params);\n}\n","const CC_SINGLE_QUOTE = 39;\nconst CC_DOUBLE_QUOTE = 34;\nconst CC_DASH = 45;\nconst CC_SLASH = 47;\nconst CC_STAR = 42;\nconst CC_NEWLINE = 10;\nconst CC_QUESTION = 63;\nconst CC_SEMICOLON = 59;\nconst CC_SPACE = 32;\n\nconst STATE_NORMAL = 0;\nconst STATE_SINGLE_QUOTE = 1;\nconst STATE_DOUBLE_QUOTE = 2;\nconst STATE_LINE_COMMENT = 3;\nconst STATE_BLOCK_COMMENT = 4;\n\nexport {\n\tCC_SINGLE_QUOTE,\n\tCC_DOUBLE_QUOTE,\n\tCC_DASH,\n\tCC_SLASH,\n\tCC_STAR,\n\tCC_NEWLINE,\n\tCC_QUESTION,\n\tCC_SEMICOLON,\n\tCC_SPACE,\n\tSTATE_NORMAL,\n\tSTATE_SINGLE_QUOTE,\n\tSTATE_DOUBLE_QUOTE,\n\tSTATE_LINE_COMMENT,\n\tSTATE_BLOCK_COMMENT,\n};\n","import { LRUCache } from \"../core/lruCache.js\";\nimport {\n\tCC_SINGLE_QUOTE,\n\tCC_DOUBLE_QUOTE,\n\tCC_DASH,\n\tCC_SLASH,\n\tCC_STAR,\n\tCC_NEWLINE,\n\tCC_QUESTION,\n\tCC_SEMICOLON,\n\tCC_SPACE,\n\tSTATE_NORMAL,\n\tSTATE_SINGLE_QUOTE,\n\tSTATE_DOUBLE_QUOTE,\n\tSTATE_LINE_COMMENT,\n\tSTATE_BLOCK_COMMENT,\n} from \"./constants.js\";\n\nconst _normDecoder = new TextDecoder(\"utf-16le\");\n\nconst _normCache = new LRUCache({ maxSize: 256, maxKeyLength: 4096 });\n\nfunction _normalize(sql) {\n\tconst len = sql.length;\n\tconst needed = len + 1;\n\tconst outCodes = new Uint16Array(needed);\n\tlet writePos = 0;\n\tlet pendingSpace = false;\n\tlet state = STATE_NORMAL;\n\tconst questionPositions = [];\n\n\tfor (let i = 0; i < len; i++) {\n\t\tconst code = sql.charCodeAt(i);\n\t\tconst nextCode = sql.charCodeAt(i + 1);\n\n\t\tif (state === STATE_BLOCK_COMMENT) {\n\t\t\tif (code === CC_STAR && nextCode === CC_SLASH) {\n\t\t\t\tstate = STATE_NORMAL;\n\t\t\t\ti++;\n\t\t\t\tif (writePos > 0) pendingSpace = true;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (state === STATE_LINE_COMMENT) {\n\t\t\tif (code === CC_NEWLINE) {\n\t\t\t\tstate = STATE_NORMAL;\n\t\t\t\tif (writePos > 0) pendingSpace = true;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (state === STATE_NORMAL) {\n\t\t\tif (code === CC_DASH && nextCode === CC_DASH) {\n\t\t\t\tstate = STATE_LINE_COMMENT;\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (code === CC_SLASH && nextCode === CC_STAR) {\n\t\t\t\tstate = STATE_BLOCK_COMMENT;\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tif (code === 32 || code === 9 || code === 10 || code === 11 || code === 12 || code === 13) {\n\t\t\tif (writePos > 0) pendingSpace = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (pendingSpace && writePos > 0) {\n\t\t\toutCodes[writePos++] = CC_SPACE;\n\t\t\tpendingSpace = false;\n\t\t}\n\n\t\tif (code === CC_QUESTION && state === STATE_NORMAL) {\n\t\t\tquestionPositions.push(writePos);\n\t\t}\n\t\toutCodes[writePos++] = code;\n\n\t\tif (state === STATE_NORMAL) {\n\t\t\tif (code === CC_SINGLE_QUOTE) state = STATE_SINGLE_QUOTE;\n\t\t\telse if (code === CC_DOUBLE_QUOTE) state = STATE_DOUBLE_QUOTE;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (state === STATE_SINGLE_QUOTE) {\n\t\t\tif (code === CC_SINGLE_QUOTE && nextCode === CC_SINGLE_QUOTE) {\n\t\t\t\toutCodes[writePos++] = nextCode;\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (code === CC_SINGLE_QUOTE) state = STATE_NORMAL;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (state === STATE_DOUBLE_QUOTE) {\n\t\t\tif (code === CC_DOUBLE_QUOTE && nextCode === CC_DOUBLE_QUOTE) {\n\t\t\t\toutCodes[writePos++] = nextCode;\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (code === CC_DOUBLE_QUOTE) state = STATE_NORMAL;\n\t\t}\n\t}\n\n\tlet normalized;\n\tif (writePos === 0) {\n\t\tnormalized = \";\";\n\t} else {\n\t\twhile (writePos > 0 && outCodes[writePos - 1] === CC_SEMICOLON) writePos--;\n\t\toutCodes[writePos++] = CC_SEMICOLON;\n\t\tnormalized = _normDecoder.decode(outCodes.subarray(0, writePos));\n\t}\n\n\tconst paramCount = questionPositions.length;\n\tif (paramCount === 0) {\n\t\treturn { normalized, segments: [normalized], paramCount: 0 };\n\t}\n\n\tconst segments = [];\n\tlet segStart = 0;\n\tfor (const pos of questionPositions) {\n\t\tsegments.push(normalized.slice(segStart, pos));\n\t\tsegStart = pos + 1;\n\t}\n\tsegments.push(normalized.slice(segStart));\n\treturn { normalized, segments, paramCount };\n}\n\nexport function normalizeSQL(sql) {\n\tconst cached = _normCache.get(sql);\n\tif (cached !== undefined) return cached.normalized;\n\tconst result = _normalize(sql);\n\t_normCache.set(sql, result);\n\treturn result.normalized;\n}\n\nexport function normalizeSQLTemplate(sql) {\n\tconst cached = _normCache.get(sql);\n\tif (cached !== undefined) return cached;\n\tconst result = _normalize(sql);\n\t_normCache.set(sql, result);\n\treturn result;\n}\n","import { LRUCache } from \"./lruCache.js\";\n\nconst READ_ONLY_KINDS = new Set([\"SELECT\", \"WITH\", \"VALUES\", \"EXPLAIN\"]);\n\n// LRU cache for classifySQL: keyed by normalized SQL template (before interpolation),\n// so repeated queries with different params hit the cache.\nconst _classifyCache = new LRUCache({ maxSize: 256, maxKeyLength: 4096 });\n\nfunction classifySingle(stmt) {\n\tconst trimmed = stmt.trim();\n\tif (trimmed.length === 0) return \"write\";\n\tconst kind = trimmed.split(/\\s+/)[0].toUpperCase();\n\treturn READ_ONLY_KINDS.has(kind) ? \"read\" : \"write\";\n}\n\n/**\n * 判断一条 SQL 语句是否为只读操作。\n * 多语句(以 ; 分隔)中若包含任意写语句,整体返回 \"write\"。\n * @param {string} sql\n * @returns {\"read\" | \"write\"}\n */\nexport function classifySQL(sql) {\n\tif (typeof sql !== \"string\") return \"write\";\n\n\tconst cached = _classifyCache.get(sql);\n\tif (cached !== undefined) return cached;\n\n\t// sql 已经过 normalizeSQL 去除首尾空白,但保留 trim() 防御直接调用\n\tconst trimmed = sql.trim();\n\tif (trimmed.length === 0) return \"write\";\n\tlet result;\n\tif (trimmed.includes(\";\")) {\n\t\tconst stmts = trimmed.split(\";\").filter((s) => s.trim().length > 0);\n\t\tif (stmts.length === 0) return \"write\";\n\t\tresult = \"read\";\n\t\tfor (const stmt of stmts) {\n\t\t\tif (classifySingle(stmt) === \"write\") {\n\t\t\t\tresult = \"write\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = classifySingle(trimmed);\n\t}\n\n\t_classifyCache.set(sql, result);\n\treturn result;\n}\n","const INITIAL_CAPACITY = 16;\nconst SHRINK_THRESHOLD = 256; // >= 256 slots → clear() 时收缩到 INITIAL_CAPACITY\n\nexport class Queue {\n\t#items = new Array(INITIAL_CAPACITY);\n\t#head = 0;\n\t#tail = 0;\n\t#size = 0;\n\t#mask = INITIAL_CAPACITY - 1;\n\n\tenqueue(value) {\n\t\tif (this.#size === this.#items.length) {\n\t\t\tthis.#grow();\n\t\t}\n\t\tthis.#items[this.#tail] = value;\n\t\tthis.#tail = (this.#tail + 1) & this.#mask;\n\t\tthis.#size++;\n\t}\n\n\t#grow() {\n\t\tconst oldMask = this.#mask;\n\t\tconst newCap = this.#items.length * 2;\n\t\tthis.#mask = newCap - 1;\n\t\tif (this.#head === 0) {\n\t\t\t// Items are contiguous from index 0; extend in-place without copying.\n\t\t\tthis.#items.length = newCap;\n\t\t\tthis.#tail = this.#size;\n\t\t} else {\n\t\t\tconst newItems = new Array(newCap);\n\t\t\tfor (let i = 0; i < this.#size; i++) {\n\t\t\t\tnewItems[i] = this.#items[(this.#head + i) & oldMask];\n\t\t\t}\n\t\t\tthis.#items = newItems;\n\t\t\tthis.#head = 0;\n\t\t\tthis.#tail = this.#size;\n\t\t}\n\t}\n\n\tdequeue() {\n\t\tif (this.#size === 0) return null;\n\t\tconst value = this.#items[this.#head];\n\t\tthis.#items[this.#head] = undefined;\n\t\tthis.#head = (this.#head + 1) & this.#mask;\n\t\tthis.#size--;\n\t\treturn value;\n\t}\n\n\tclear() {\n\t\t// Reuse the existing backing array (avoids allocation + GC pressure on hot paths\n\t\t// such as #restoreDeferred which calls clear() on every exclusive-zone exit).\n\t\t// #mask stays valid: it equals #items.length - 1 and the array length is unchanged.\n\t\tthis.#items.fill(undefined);\n\t\tthis.#head = 0;\n\t\tthis.#tail = 0;\n\t\tthis.#size = 0;\n\t\tthis.#shrinkIfNeeded();\n\t}\n\n\t/**\n\t * 如果 backing array 远超实际需求,收缩到初始容量以释放内存。\n\t * 仅在 clear() 中调用(非热路径),避免热路径上的 GC 压力。\n\t * 在百万级 SQL 的高负载场景下,队列可能膨胀到数十万 slots,\n\t * 任务耗尽后的大数组将长期驻留内存。收缩解决此问题。\n\t */\n\t#shrinkIfNeeded() {\n\t\tif (this.#items.length >= SHRINK_THRESHOLD) {\n\t\t\tthis.#items = new Array(INITIAL_CAPACITY);\n\t\t\tthis.#mask = INITIAL_CAPACITY - 1;\n\t\t}\n\t}\n\n\tremove(value) {\n\t\tfor (let i = 0; i < this.#size; i++) {\n\t\t\tconst idx = (this.#head + i) & this.#mask;\n\t\t\tif (this.#items[idx] === value) {\n\t\t\t\tfor (let j = i; j < this.#size - 1; j++) {\n\t\t\t\t\tconst curr = (this.#head + j) & this.#mask;\n\t\t\t\t\tconst next = (this.#head + j + 1) & this.#mask;\n\t\t\t\t\tthis.#items[curr] = this.#items[next];\n\t\t\t\t}\n\t\t\t\tthis.#tail = (this.#tail - 1) & this.#mask;\n\t\t\t\tthis.#items[this.#tail] = undefined;\n\t\t\t\tthis.#size--;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tfind(predicate) {\n\t\tfor (let i = 0; i < this.#size; i++) {\n\t\t\tconst value = this.#items[(this.#head + i) & this.#mask];\n\t\t\tif (predicate(value)) return value;\n\t\t}\n\t\treturn null;\n\t}\n\n\ttoArray() {\n\t\tconst result = new Array(this.#size);\n\t\tfor (let i = 0; i < this.#size; i++) {\n\t\t\tresult[i] = this.#items[(this.#head + i) & this.#mask];\n\t\t}\n\t\treturn result;\n\t}\n\n\t*values() {\n\t\tfor (let i = 0; i < this.#size; i++) {\n\t\t\tyield this.#items[(this.#head + i) & this.#mask];\n\t\t}\n\t}\n\n\tpeek() {\n\t\treturn this.#size > 0 ? this.#items[this.#head] : null;\n\t}\n\n\t/**\n\t * Prepend all items from another Queue in front of this queue's existing items,\n\t * preserving the donor queue's order. The donor queue is emptied in the process.\n\t * This is more efficient than toArray() + clear() + repeated enqueue() because it\n\t * avoids allocating an intermediate array and minimises enqueue call overhead.\n\t * @param {Queue} other\n\t */\n\tprependAll(other) {\n\t\tif (other.isEmpty()) return;\n\n\t\t// Fast path: this queue is empty — just swap internals.\n\t\tif (this.#size === 0) {\n\t\t\tconst tmpItems = this.#items;\n\t\t\tconst tmpMask = this.#mask;\n\t\t\tthis.#items = other.#items;\n\t\t\tthis.#head = other.#head;\n\t\t\tthis.#tail = other.#tail;\n\t\t\tthis.#size = other.#size;\n\t\t\tthis.#mask = other.#mask;\n\t\t\tother.#items = tmpItems;\n\t\t\tother.#head = 0;\n\t\t\tother.#tail = 0;\n\t\t\tother.#size = 0;\n\t\t\tother.#mask = tmpMask;\n\t\t\treturn;\n\t\t}\n\n\t\t// General path: merge both queues into a new array so the donor's items\n\t\t// come first, followed by this queue's existing items.\n\t\tconst totalSize = this.#size + other.#size;\n\t\tlet newCap = this.#items.length;\n\t\twhile (newCap < totalSize) newCap *= 2;\n\n\t\tconst newItems = new Array(newCap);\n\t\tlet writeIdx = 0;\n\n\t\tfor (let i = 0; i < other.#size; i++) {\n\t\t\tnewItems[writeIdx++] = other.#items[(other.#head + i) & other.#mask];\n\t\t}\n\t\tfor (let i = 0; i < this.#size; i++) {\n\t\t\tnewItems[writeIdx++] = this.#items[(this.#head + i) & this.#mask];\n\t\t}\n\n\t\tthis.#items = newItems;\n\t\tthis.#head = 0;\n\t\tthis.#tail = totalSize;\n\t\tthis.#size = totalSize;\n\t\tthis.#mask = newCap - 1;\n\n\t\tother.#items.fill(undefined);\n\t\tother.#head = 0;\n\t\tother.#tail = 0;\n\t\tother.#size = 0;\n\t}\n\n\t[Symbol.iterator]() {\n\t\treturn this.values();\n\t}\n\n\tget size() {\n\t\treturn this.#size;\n\t}\n\n\tisEmpty() {\n\t\treturn this.#size === 0;\n\t}\n}\n","import { normalizeSQL } from \"../utils/normalize.js\";\nimport { TOKEN_COLUMN } from \"../constants.js\";\n\nexport { TOKEN_COLUMN } from \"../constants.js\";\n\n/**\n * 构建发送给 sqlite3 进程的完整载荷。\n * 在原始 SQL 末尾追加一条 sentinel 查询,用于标记该任务输出的结束。\n *\n * @param {string} sql - 要执行的 SQL 语句(已规范化时设 skipNormalize=true)\n * @param {string} token - 唯一 sentinel token\n * @param {{ skipNormalize?: boolean }} [options]\n * @returns {string} 追加了 sentinel 查询后的完整载荷\n */\nexport function buildPayload(sql, token, { skipNormalize = false } = {}) {\n\tconst normalized = skipNormalize ? sql : normalizeSQL(sql);\n\tconst suffix = normalized.endsWith(\";\") ? \"\" : \";\";\n\t// 模板字面量在 V8 中会优化为 join,保持原状即可\n\treturn `${normalized}${suffix}\\nSELECT '${token}' AS ${TOKEN_COLUMN};\\n`;\n}\n\n/**\n * 判断 SQL 是否为事务控制语句(BEGIN / COMMIT / ROLLBACK)。\n * WAL batch 不应包裹事务控制语句,否则会破坏事务嵌套层级。\n * @param {string} sql\n * @returns {boolean}\n */\nfunction isTransactionControl(sql) {\n\t// sql 经过 normalizeSQL 后关键词大小写不变;首 charCodeAt 快速失败避免字符串分配。\n\t// 若首字母不是 B/C/R(事务关键字),直接返回 false。\n\tconst f = sql.charCodeAt(0);\n\tif (f === 66 || f === 98) {\n\t\treturn sql === \"BEGIN\" || sql === \"BEGIN;\" || sql.startsWith(\"BEGIN \") || sql.startsWith(\"BEGIN;\");\n\t}\n\tif (f === 67 || f === 99) {\n\t\treturn sql === \"COMMIT\" || sql === \"COMMIT;\" || sql.startsWith(\"COMMIT \") || sql.startsWith(\"COMMIT;\");\n\t}\n\tif (f === 82 || f === 114) {\n\t\treturn sql === \"ROLLBACK\" || sql === \"ROLLBACK;\" || sql.startsWith(\"ROLLBACK \") || sql.startsWith(\"ROLLBACK;\");\n\t}\n\treturn false;\n}\n\n/**\n * 将一批任务合并为单个发送给 sqlite3 进程的载荷字符串。\n * 由 PipelineEngine 和 TaskWorker 共享,避免 25 行重复 payload 构建逻辑。\n *\n * 如果全是 execute 类型且数量 > 1,自动使用 WAL 批量优化:\n * 将多条 INSERT/UPDATE 用 BEGIN/COMMIT 包裹后再追加各自的 sentinel token。\n *\n * WAL batch 会自动跳过事务控制语句(BEGIN / COMMIT / ROLLBACK),\n * 避免 BEGIN/COMMIT 被 WAL batch 的 BEGIN/COMMIT 再次包裹导致事务嵌套异常。\n *\n * @param {Array<{ kind: string, sql: string, token: string }>} batch\n * @returns {string}\n */\nexport function buildBatchPayload(batch) {\n\tconst useWalBatch = batch.length > 1 && batch.every((t) => t.kind === \"execute\" && !isTransactionControl(t.sql));\n\tif (useWalBatch) {\n\t\tconst parts = [\"BEGIN;\\n\"];\n\t\tfor (const task of batch) {\n\t\t\tparts.push(task.sql, \"\\n\");\n\t\t}\n\t\tparts.push(\"COMMIT;\\n\");\n\t\tfor (const task of batch) {\n\t\t\tparts.push(`SELECT '${task.token}' AS ${TOKEN_COLUMN};\\n`);\n\t\t}\n\t\treturn parts.join(\"\");\n\t}\n\n\tconst parts = [];\n\tfor (const task of batch) {\n\t\tparts.push(buildPayload(task.sql, task.token, { skipNormalize: true }));\n\t}\n\treturn parts.join(\"\");\n}\n\nconst TC_FIRST_CHAR = TOKEN_COLUMN.charCodeAt(0);\n\n/**\n * 构建 sentinel 字符串,供 isSentinelRaw 直接比较。\n * 每任务调用一次(而非每 JSON 值),消除模板字符串重复分配。\n * @param {string} token\n * @returns {string}\n */\nfunction buildSentinelStr(token) {\n\treturn `[{\"${TOKEN_COLUMN}\":\"${token}\"}]`;\n}\n\n/**\n * 通过原始字符串模式检测 sentinel 行,避免 JSON.parse。\n * sentinel 原始格式固定为 [{\"__sqlite_executor_token__\":\"TOKEN\"}],\n * token 由 crypto.randomUUID() 生成(hex UUID,不含特殊 JSON 字符),\n * 因此精确字符串匹配即可安全判断。\n *\n * 哨兵字符串在 isSentinelRaw 内部按需构建;外部调用只需传入 token。\n * fast path 首先检查第 4 个字符是否匹配列名首字符,不匹配则快速返回 false。\n *\n * @param {string} raw - 流式解析器提取的原始 JSON 文本\n * @param {string} token - 当前任务的唯一 token\n * @returns {boolean}\n */\nexport function isSentinelRaw(raw, token) {\n\treturn raw.charCodeAt(3) === TC_FIRST_CHAR && raw === buildSentinelStr(token);\n}\n\n/**\n * 检查解析出的 JSON 行是否为当前任务的 sentinel 结束标记行。\n *\n * @param {unknown} value - 已解析的 JSON 值\n * @param {string} token - 当前任务的唯一 token\n * @returns {boolean}\n */\nexport function isSentinelRow(value, token) {\n\treturn Array.isArray(value) && value.length === 1 && value[0]?.[TOKEN_COLUMN] === token;\n}\n","import { toError } from \"./parser.js\";\n\n/**\n * 将解析后的 JSON 数组行收集到 query 任务的结果数组中。\n * @param {{ rows: any[] }} task\n * @param {any} parsed\n */\nexport function collectQueryRows(task, parsed) {\n\tif (Array.isArray(parsed)) {\n\t\tif (!task.rows) task.rows = [];\n\t\tfor (let i = 0; i < parsed.length; i++) {\n\t\t\ttask.rows.push(parsed[i]);\n\t\t}\n\t}\n}\n\n/**\n * 将解析后的 JSON 数组元素通过 stream 任务的 onRow 逐行回调。\n * 若 onRow 抛错则记录到 task.consumerError 并停止后续回调。\n * @param {{ onRow: Function, consumerError?: Error | null }} task\n * @param {any} parsed\n */\nexport function processStreamRows(task, parsed) {\n\tif (!Array.isArray(parsed)) return;\n\tfor (const row of parsed) {\n\t\tif (task.consumerError) break;\n\t\ttry {\n\t\t\ttask.onRow(row);\n\t\t} catch (error) {\n\t\t\ttask.consumerError = toError(error);\n\t\t}\n\t}\n}\n\n/**\n * 最终结算一个任务:清除定时器、更新指标,然后 resolve 或 reject。\n * @param {object} task\n * @param {Error | null} error\n * @param {any} value\n * @param {import(\"./metrics.js\").Metrics | null | undefined} metrics\n * @param {{ resetRowParser?: boolean }} [options]\n */\nexport function settleTask(task, error, value, metrics, { resetRowParser = false } = {}) {\n\tif (task.settled) return;\n\ttask.settled = true;\n\n\tif (resetRowParser) {\n\t\ttask.rowParser?.reset?.();\n\t}\n\n\tif (error) {\n\t\tmetrics?.incrementTasksFailed();\n\t\ttask.reject(toError(error));\n\t\treturn;\n\t}\n\n\tconst duration = task.startTime > 0 ? performance.now() - task.startTime : 0;\n\tmetrics?.incrementTasksSuccess(duration);\n\ttask.resolve(value);\n}\n","import { settleTask } from \"./settleUtils.js\";\nimport { createTimeoutError } from \"../utils/timeout.js\";\n\n/**\n * 批量结算 pendingFinalize 集合中的所有任务。\n * 由 scheduleFinalizeCheck 的 setImmediate 回调调用。\n *\n * @param {Set<object>} tasks - pendingFinalizeTasks 集合\n * @param {(task: object, error: Error | null, value: any) => void} settle\n * @param {() => void} pumpQueue\n */\nexport function finalizePendingTasks(tasks, settle, pumpQueue) {\n\tfor (const task of tasks) {\n\t\tif (task.stderrText) {\n\t\t\tsettle(task, new Error(task.stderrText.trim()), undefined);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (task.consumerError) {\n\t\t\tsettle(task, task.consumerError, undefined);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (task.kind === \"query\") {\n\t\t\tsettle(task, null, task.rows);\n\t\t\tcontinue;\n\t\t}\n\n\t\tsettle(task, null, undefined);\n\t}\n\ttasks.clear();\n\tpumpQueue();\n}\n\n/**\n * 处理单任务超时:防重复结算、清除定时器、更新指标、创建超时错误。\n *\n * @param {object} task\n * @param {import(\"./metrics.js\").Metrics | null | undefined} metrics\n * @returns {Error | null} 已创建的 TimeoutError,若任务已结算则返回 null\n */\nexport function prepareTaskTimeout(task, metrics) {\n\tif (task.settled) return null;\n\ttask.timedout = true;\n\tmetrics?.incrementTasksTimeout();\n\treturn createTimeoutError(task.timeout, task.sql);\n}\n","import { ProcessManager } from \"./process.js\";\nimport { Queue } from \"./queue.js\";\nimport { createJsonValueParser, toError } from \"./parser.js\";\nimport { isSentinelRaw, isSentinelRow, buildBatchPayload } from \"./protocol.js\";\nimport { collectQueryRows, processStreamRows, settleTask } from \"./settleUtils.js\";\nimport { finalizePendingTasks, prepareTaskTimeout } from \"./pipelineUtils.js\";\nimport { DEFAULT_BATCH_SIZE, DEFAULT_MAX_INFLIGHT } from \"../constants.js\";\n\n/**\n * 单个 sqlite3 进程的任务执行器。\n * 内部维护 pending 和 inflight 两个队列,支持管线化(pipelining):\n * 多个任务的 SQL payload 合并为一次 stdin.write() 发送,由 sqlite3 顺序执行后,\n * 在 stdout 解析时按 FIFO 顺序匹配 sentinel token 并逐一完成 Promise。\n *\n * TaskWorker 不关心任务是读还是写——它只负责发送 SQL、解析输出、完成 Promise。\n * 由上层(SQLiteExecutor / ReaderPool)决定如何分发任务。\n */\nexport class TaskWorker {\n\t#processManager;\n\t#pendingQueue = new Queue();\n\t#inflightTasks = [];\n\t#inflightHead = 0;\n\t#pendingFinalizeTasks = new Set();\n\t#scheduledFinalize = false;\n\t#valueParser;\n\t#statementTimeout;\n\t#logger;\n\t#name;\n\t#batchSize;\n\t#maxInflight;\n\t#metrics;\n\t#sweepTimer = null;\n\t#sweepIntervalMs;\n\n\t/**\n\t * @param {{\n\t * binary: string\n\t * database: string\n\t * statementTimeout: number\n\t * logger?: import(\"../index.js\").Logger\n\t * name?: string\n\t * initMode?: \"wal\" | \"none\"\n\t * batchSize?: number\n\t * metrics?: import(\"./metrics.js\").Metrics\n\t * sweepInterval?: number\n\t * }} options\n\t */\n\tconstructor({ binary, database, statementTimeout, logger, name, initMode, batchSize = DEFAULT_BATCH_SIZE, maxInflight = DEFAULT_MAX_INFLIGHT, metrics, sweepInterval = 100 }) {\n\t\tthis.#name = name ?? \"worker\";\n\t\tthis.#statementTimeout = statementTimeout;\n\t\tthis.#logger = logger;\n\t\tthis.#batchSize = batchSize;\n\t\tthis.#maxInflight = maxInflight;\n\t\tthis.#metrics = metrics;\n\t\tthis.#sweepIntervalMs = sweepInterval;\n\t\tthis.#processManager = new ProcessManager({ binary, database, initMode, onDrain: () => this.#pumpQueue() });\n\t\tthis.#valueParser = createJsonValueParser((raw) => this.#handleParsedValue(raw));\n\t\tthis.#startProcess();\n\t}\n\n\tget name() {\n\t\treturn this.#name;\n\t}\n\n\tget idle() {\n\t\treturn this.#inflightTasks.length === this.#inflightHead && this.#pendingQueue.isEmpty() && this.#pendingFinalizeTasks.size === 0;\n\t}\n\n\tget pendingStatements() {\n\t\treturn this.#pendingQueue.size + (this.#inflightTasks.length - this.#inflightHead) + this.#pendingFinalizeTasks.size;\n\t}\n\n\t/**\n\t * 接收一个任务配置并加入队列。\n\t * 任务配置应包含:kind, sql, timeout, token, resolve, reject, onRow\n\t * @param {object} config\n\t */\n\tenqueue(config) {\n\t\tconst task = {\n\t\t\tkind: config.kind,\n\t\t\tsql: config.sql,\n\t\t\ttimeout: config.timeout,\n\t\t\ttoken: config.token,\n\t\t\tresolve: config.resolve,\n\t\t\treject: config.reject,\n\t\t\trows: config.kind === \"query\" ? [] : undefined,\n\t\t\tonRow: config.onRow ?? null,\n\t\t\tconsumerError: null,\n\t\t\tstderrText: \"\",\n\t\t\tsettled: false,\n\t\t\tstartTime: 0,\n\t\t};\n\t\tthis.#metrics?.incrementTasksTotal(config.kind);\n\t\tthis.#pendingQueue.enqueue(task);\n\t\tthis.#pumpQueue();\n\t}\n\n\t/** 测试用:获取扫制定时器引用。 */\n\tget _sweepTimer() {\n\t\treturn this.#sweepTimer;\n\t}\n\n\t/** 测试用:获取底层子进程引用。 */\n\tget _process() {\n\t\treturn this.#processManager.process;\n\t}\n\n\t/** 终止进程并清理。 */\n\tkill() {\n\t\tclearTimeout(this.#sweepTimer);\n\t\tthis.#sweepTimer = null;\n\t\tthis.#rejectAll(new Error(`${this.#name} is killed`));\n\t\tthis.#processManager.kill();\n\t}\n\n\t// ---- 内部 ----\n\n\t#startProcess() {\n\t\tconst proc = this.#processManager.start();\n\n\t\tproc.stdout.on(\"data\", (chunk) => {\n\t\t\tthis.#valueParser.feed(chunk);\n\t\t});\n\n\t\tproc.stderr.on(\"data\", (chunk) => {\n\t\t\tthis.#handleStderrChunk(chunk);\n\t\t});\n\n\t\tproc.on(\"error\", (error) => {\n\t\t\tif (this.#processManager.process !== proc) return;\n\t\t\tthis.#logger?.error?.(`${this.#name} process error`, error);\n\t\t\tthis.#rejectAll(toError(error));\n\t\t});\n\n\t\tproc.on(\"close\", (code, signal) => {\n\t\t\tif (this.#processManager.process !== proc) return;\n\t\t\tconst err = new Error(`${this.#name} exited unexpectedly (code=${code}, signal=${signal ?? \"none\"})`);\n\t\t\tthis.#rejectAll(err);\n\t\t});\n\t}\n\n\t#inflightCount() {\n\t\treturn this.#inflightTasks.length - this.#inflightHead;\n\t}\n\n\t#firstInflight() {\n\t\treturn this.#inflightHead < this.#inflightTasks.length ? this.#inflightTasks[this.#inflightHead] : null;\n\t}\n\n\t#shiftInflight() {\n\t\tconst task = this.#inflightTasks[this.#inflightHead];\n\t\tthis.#inflightTasks[this.#inflightHead] = null;\n\t\tthis.#inflightHead++;\n\t\tif (this.#inflightHead >= this.#inflightTasks.length) {\n\t\t\tthis.#inflightTasks = [];\n\t\t\tthis.#inflightHead = 0;\n\t\t} else if (this.#inflightHead > 128) {\n\t\t\tthis.#inflightTasks = this.#inflightTasks.slice(this.#inflightHead);\n\t\t\tthis.#inflightHead = 0;\n\t\t}\n\t\treturn task;\n\t}\n\n\t/**\n\t * 从 pendingQueue 中取出最多 batchSize 个任务,合并 payload 后一次性写入 stdin。\n\t * stream 任务必须单独发送(不与其他任务合批),且需要等 inflight 清空后再发送。\n\t */\n\t#pumpQueue() {\n\t\tif (this.#processManager.draining) return;\n\t\tif (this.#inflightCount() >= this.#maxInflight) return;\n\n\t\tconst batch = [];\n\t\twhile (\n\t\t\tbatch.length < this.#batchSize &&\n\t\t\t!this.#pendingQueue.isEmpty() &&\n\t\t\tthis.#inflightCount() + batch.length < this.#maxInflight\n\t\t) {\n\t\t\tconst task = this.#pendingQueue.peek();\n\t\t\tif (task.kind === \"stream\" && (batch.length > 0 || this.#inflightCount() > 0)) break;\n\t\t\tthis.#pendingQueue.dequeue();\n\t\t\tbatch.push(task);\n\t\t}\n\t\tif (batch.length === 0) return;\n\n\t\tconst now = performance.now();\n\n\t\tconst payload = buildBatchPayload(batch);\n\n\t\tfor (const task of batch) {\n\t\t\ttask.startTime = now;\n\t\t}\n\t\tthis.#inflightTasks.push(...batch);\n\t\tthis.#scheduleSweep();\n\t\tthis.#processManager.write(payload);\n\t}\n\n\t/**\n\t * 单次 JSON 值到达时调用。\n\t * 按 FIFO 顺序匹配 inflightTasks[0] 的 sentinel token。\n\t */\n\t#handleParsedValue(raw) {\n\t\tconst task = this.#firstInflight();\n\t\tif (!task) return;\n\n\t\t// Fast path: 原始字符串精确匹配 sentinel,跳过 JSON.parse\n\t\tif (isSentinelRaw(raw, task.token)) {\n\t\t\tthis.#shiftInflight();\n\n\t\t\tif (task.timedout) {\n\t\t\t\tthis.#pumpQueue();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (task.stderrText) {\n\t\t\t\tthis.#settleTask(task, new Error(task.stderrText.trim()), undefined);\n\t\t\t\tthis.#pumpQueue();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (task.consumerError) {\n\t\t\t\tthis.#settleTask(task, task.consumerError, undefined);\n\t\t\t\tthis.#pumpQueue();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// stderr 和 stdout 是独立的 OS 管道,data 事件触发顺序无法保证。\n\t\t\t// 延迟一帧再 finalize,给 stderr 一个事件循环周期的时间到达。\n\t\t\t// 多个 task 共享同一个 setImmediate,减少事件循环开销。\n\t\t\tthis.#pendingFinalizeTasks.add(task);\n\t\t\tthis.#scheduleFinalizeCheck();\n\t\t\tthis.#pumpQueue();\n\t\t\treturn;\n\t\t}\n\n\t\t// Fast path: 空数组 [],execute 的零行结果,跳过 JSON.parse\n\t\tif (raw === \"[]\") return;\n\n\t\tlet parsed;\n\t\ttry {\n\t\t\tparsed = JSON.parse(raw);\n\t\t} catch (error) {\n\t\t\tthis.#rejectAll(new Error(`Invalid JSON from sqlite3: ${toError(error).message}`));\n\t\t\treturn;\n\t\t}\n\n\t\tif (isSentinelRow(parsed, task.token)) {\n\t\t\tthis.#shiftInflight();\n\n\t\t\tif (task.timedout) {\n\t\t\t\tthis.#pumpQueue();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (task.stderrText) {\n\t\t\t\tthis.#settleTask(task, new Error(task.stderrText.trim()), undefined);\n\t\t\t\tthis.#pumpQueue();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (task.consumerError) {\n\t\t\t\tthis.#settleTask(task, task.consumerError, undefined);\n\t\t\t\tthis.#pumpQueue();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.#pendingFinalizeTasks.add(task);\n\t\t\tthis.#scheduleFinalizeCheck();\n\t\t\tthis.#pumpQueue();\n\t\t\treturn;\n\t\t}\n\n\t\tif (task.timedout) return;\n\n\t\tif (task.kind === \"query\") {\n\t\t\tcollectQueryRows(task, parsed);\n\t\t\treturn;\n\t\t}\n\n\t\tif (task.kind === \"stream\") {\n\t\t\tprocessStreamRows(task, parsed);\n\t\t}\n\t}\n\n\t/**\n\t * 批量处理 pendingFinalize 任务,合并多次 setImmediate 为一次。\n\t */\n\t#scheduleFinalizeCheck() {\n\t\tif (this.#scheduledFinalize) return;\n\t\tthis.#scheduledFinalize = true;\n\t\tsetImmediate(() => {\n\t\t\tthis.#scheduledFinalize = false;\n\t\t\tfinalizePendingTasks(this.#pendingFinalizeTasks, (t, e, v) => this.#settleTask(t, e, v), () => this.#pumpQueue());\n\t\t});\n\t}\n\n\t#handleStderrChunk(chunk) {\n\t\tconst task = this.#pendingFinalizeTasks.values().next().value ?? this.#firstInflight();\n\t\tif (!task) {\n\t\t\tthis.#logger?.error?.(chunk.trim());\n\t\t\treturn;\n\t\t}\n\t\ttask.stderrText += chunk;\n\t}\n\n\t#scheduleSweep() {\n\t\tif (this.#sweepTimer) return;\n\t\tthis.#sweepTimer = setTimeout(() => {\n\t\t\tthis.#sweepTimer = null;\n\t\t\tconst tasks = this.#inflightTasks;\n\t\t\tconst head = this.#inflightHead;\n\t\t\tconst now = performance.now();\n\t\t\tfor (let i = head; i < tasks.length; i++) {\n\t\t\t\tconst task = tasks[i];\n\t\t\t\tif (now - task.startTime > task.timeout) {\n\t\t\t\t\tthis.#handleTaskTimeout(task);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.#inflightCount() > 0) {\n\t\t\t\tthis.#scheduleSweep();\n\t\t\t}\n\t\t}, this.#sweepIntervalMs).unref();\n\t}\n\n\t#handleTaskTimeout(task) {\n\t\tconst error = prepareTaskTimeout(task, this.#metrics);\n\t\tif (error) this.#settleTask(task, error, undefined);\n\t}\n\n\t#settleTask(task, error, value) {\n\t\tsettleTask(task, error, value, this.#metrics);\n\t}\n\n\t#rejectAll(error) {\n\t\tclearTimeout(this.#sweepTimer);\n\t\tthis.#sweepTimer = null;\n\n\t\tconst activeCount = this.#inflightTasks.length - this.#inflightHead;\n\t\tconst all = activeCount > 0 ? this.#inflightTasks.slice(this.#inflightHead) : [];\n\t\tthis.#inflightTasks = [];\n\t\tthis.#inflightHead = 0;\n\n\t\tlet queued = this.#pendingQueue.dequeue();\n\t\twhile (queued) {\n\t\t\tthis.#settleTask(queued, error, undefined);\n\t\t\tqueued = this.#pendingQueue.dequeue();\n\t\t}\n\n\t\tfor (const task of all) {\n\t\t\tthis.#settleTask(task, error, undefined);\n\t\t}\n\n\t\tfor (const task of this.#pendingFinalizeTasks) {\n\t\t\tthis.#settleTask(task, error, undefined);\n\t\t}\n\t\tthis.#pendingFinalizeTasks.clear();\n\t}\n}\n","import { TaskWorker } from \"./taskWorker.js\";\n\n/**\n * 读取器连接池。\n * 维护多个 TaskWorker 实例,每个连接一个独立的 sqlite3 进程。\n * 通过 round-robin 分发只读任务,实现并发读取。\n */\nexport class ReaderPool {\n\t#workers = [];\n\t#rrIndex = 0;\n\n\t/**\n\t * @param {{\n\t * binary: string\n\t * database: string\n\t * poolSize: number\n\t * statementTimeout: number\n\t * logger?: import(\"../index.js\").Logger\n\t * metrics?: import(\"./metrics.js\").Metrics\n\t * }} options\n\t */\n\tconstructor({ binary, database, poolSize, statementTimeout, logger, metrics }) {\n\t\tif (poolSize < 1) throw new RangeError(\"poolSize must be >= 1\");\n\t\tfor (let i = 0; i < poolSize; i++) {\n\t\t\tconst worker = new TaskWorker({\n\t\t\t\tbinary,\n\t\t\t\tdatabase,\n\t\t\t\tstatementTimeout,\n\t\t\t\tlogger,\n\t\t\t\tmetrics,\n\t\t\t\tname: `reader-${i}`,\n\t\t\t\tinitMode: database !== \":memory:\" ? \"none\" : \"wal\",\n\t\t\t});\n\t\t\tthis.#workers.push(worker);\n\t\t}\n\t}\n\n\tget size() {\n\t\treturn this.#workers.length;\n\t}\n\n\tget pendingStatements() {\n\t\treturn this.#workers.reduce((sum, w) => sum + w.pendingStatements, 0);\n\t}\n\n\t/**\n\t * Least Busy 选择一个 reader 并执行任务。\n\t * 比较所有 worker 的 pendingStatements,选负载最小的。\n\t * 负载相同时按 round-robin 选,确保公平性。\n\t * @param {object} task\n\t */\n\tenqueue(task) {\n\t\tlet minLoad = Infinity;\n\t\tconst candidates = [];\n\t\tfor (let i = 0; i < this.#workers.length; i++) {\n\t\t\tconst load = this.#workers[i].pendingStatements;\n\t\t\tif (load < minLoad) {\n\t\t\t\tminLoad = load;\n\t\t\t\tcandidates.length = 0;\n\t\t\t\tcandidates.push(i);\n\t\t\t} else if (load === minLoad) {\n\t\t\t\tcandidates.push(i);\n\t\t\t}\n\t\t}\n\t\tconst idx = candidates[this.#rrIndex % candidates.length];\n\t\tthis.#rrIndex = (this.#rrIndex + 1) >>> 0;\n\t\tthis.#workers[idx].enqueue(task);\n\t}\n\n\t/** 测试用:获取内部 worker 列表。 */\n\tget _workers() {\n\t\treturn this.#workers;\n\t}\n\n\t/** 终止所有 reader 进程。 */\n\tkill() {\n\t\tfor (const worker of this.#workers) {\n\t\t\tworker.kill();\n\t\t}\n\t}\n}\n","/**\n * 轻量级运行时指标收集器。\n * 用于追踪 SQL 执行任务的吞吐、耗时、错误、超时和进程重启。\n *\n * 设计原则:\n * - 仅使用数字计数器,避免高频路径上的对象分配\n * - 所有 increment 方法 O(1)、无 throw\n * - 可被多个 TaskWorker / Executor 共享(通过引用传递)\n */\nexport class Metrics {\n\t#tasksTotal = 0;\n\t#tasksSuccess = 0;\n\t#tasksFailed = 0;\n\t#tasksTimeout = 0;\n\t#processRestarts = 0;\n\t#executeCount = 0;\n\t#queryCount = 0;\n\t#streamCount = 0;\n\t#totalDuration = 0;\n\t#startTime = Date.now();\n\n\tget tasksTotal() {\n\t\treturn this.#tasksTotal;\n\t}\n\n\tget tasksSuccess() {\n\t\treturn this.#tasksSuccess;\n\t}\n\n\tget tasksFailed() {\n\t\treturn this.#tasksFailed;\n\t}\n\n\tget tasksTimeout() {\n\t\treturn this.#tasksTimeout;\n\t}\n\n\tget processRestarts() {\n\t\treturn this.#processRestarts;\n\t}\n\n\tget executeCount() {\n\t\treturn this.#executeCount;\n\t}\n\n\tget queryCount() {\n\t\treturn this.#queryCount;\n\t}\n\n\tget streamCount() {\n\t\treturn this.#streamCount;\n\t}\n\n\t/** 累计任务耗时(毫秒),用于计算 avgQueryTime。 */\n\tget totalDuration() {\n\t\treturn this.#totalDuration;\n\t}\n\n\t/** Metrics 实例的创建时间(Unix 时间戳)。 */\n\tget startTime() {\n\t\treturn this.#startTime;\n\t}\n\n\t/**\n\t * 记录一个任务入队。\n\t * @param {\"execute\" | \"query\" | \"stream\"} kind\n\t */\n\tincrementTasksTotal(kind) {\n\t\tthis.#tasksTotal++;\n\t\tif (kind === \"execute\") this.#executeCount++;\n\t\telse if (kind === \"query\") this.#queryCount++;\n\t\telse if (kind === \"stream\") this.#streamCount++;\n\t}\n\n\t/**\n\t * 记录一个任务成功完成。\n\t * @param {number} duration 实际执行耗时(毫秒)\n\t */\n\tincrementTasksSuccess(duration) {\n\t\tthis.#tasksSuccess++;\n\t\tthis.#totalDuration += duration;\n\t}\n\n\t/** 记录一个任务失败。 */\n\tincrementTasksFailed() {\n\t\tthis.#tasksFailed++;\n\t}\n\n\t/** 记录一个任务超时。 */\n\tincrementTasksTimeout() {\n\t\tthis.#tasksTimeout++;\n\t}\n\n\t/** 记录 sqlite3 进程重启次数。 */\n\tincrementProcessRestarts() {\n\t\tthis.#processRestarts++;\n\t}\n\n\t/**\n\t * 返回当前所有指标的只读快照。\n\t * @returns {{\n\t * tasksTotal: number,\n\t * tasksSuccess: number,\n\t * tasksFailed: number,\n\t * tasksTimeout: number,\n\t * processRestarts: number,\n\t * executeCount: number,\n\t * queryCount: number,\n\t * streamCount: number,\n\t * avgQueryTime: number,\n\t * qps: number,\n\t * uptime: number,\n\t * }}\n\t */\n\tsnapshot() {\n\t\tconst elapsed = (Date.now() - this.#startTime) / 1000;\n\t\treturn {\n\t\t\ttasksTotal: this.#tasksTotal,\n\t\t\ttasksSuccess: this.#tasksSuccess,\n\t\t\ttasksFailed: this.#tasksFailed,\n\t\t\ttasksTimeout: this.#tasksTimeout,\n\t\t\tprocessRestarts: this.#processRestarts,\n\t\t\texecuteCount: this.#executeCount,\n\t\t\tqueryCount: this.#queryCount,\n\t\t\tstreamCount: this.#streamCount,\n\t\t\tavgQueryTime: this.#tasksSuccess > 0 ? (this.#totalDuration / this.#tasksSuccess) : 0,\n\t\t\tqps: elapsed > 0 ? (this.#tasksTotal / elapsed) : 0,\n\t\t\tuptime: elapsed,\n\t\t};\n\t}\n}\n","import { Queue } from \"./queue.js\";\nimport { settleTask } from \"./settleUtils.js\";\n\n/**\n * 事务作用域管理器。\n *\n * 事务内的所有操作绑定到同一个 scopeId,保证不被外部任务交错。\n * 事务外的任务自动暂存到延迟队列,在事务结束后恢复执行。\n */\nexport class TransactionScope {\n\t#deferredQueue = new Queue();\n\t#activeScopeId = null;\n\t#scopeChain = Promise.resolve();\n\n\t/** 当前事务的作用域 ID,无事务时为 null。 */\n\tget scopeId() {\n\t\treturn this.#activeScopeId;\n\t}\n\n\t/** 是否有事务正在执行。 */\n\tget active() {\n\t\treturn this.#activeScopeId !== null;\n\t}\n\n\t/** 延迟队列中的待处理任务数。 */\n\tget pendingStatements() {\n\t\treturn this.#deferredQueue.size;\n\t}\n\n\t/**\n\t * 判断给定 scopeId 的任务是否应当延迟执行。\n\t * @param {symbol | null} scopeId\n\t * @returns {boolean}\n\t */\n\tisDeferred(scopeId) {\n\t\treturn this.#activeScopeId !== null && this.#activeScopeId !== scopeId;\n\t}\n\n\t/** 将任务放入延迟队列。 */\n\tdefer(task) {\n\t\tthis.#deferredQueue.enqueue(task);\n\t}\n\n\t/**\n\t * 进入事务作用域。\n\t * 返回 scopeId 和 release 函数,调用 release 后下一个等待的事务可以执行。\n\t * @returns {Promise<{ scopeId: symbol, release: () => void }>}\n\t */\n\tasync enter() {\n\t\tconst scopeId = Symbol(\"transaction\");\n\t\tlet release = null;\n\t\tconst gate = new Promise((resolve) => { release = resolve; });\n\n\t\tconst previous = this.#scopeChain;\n\t\t// 将前一个 scopeChain 的 reject 吞掉,避免未捕获的 reject 传播。\n\t\t// 前一个事务可能因 ROLLBACK 而 reject,这不应影响当前事务的等待。\n\t\tthis.#scopeChain = gate;\n\t\tawait previous.catch(() => {});\n\n\t\tthis.#activeScopeId = scopeId;\n\t\treturn { scopeId, release };\n\t}\n\n\t/** 退出事务作用域。 */\n\texit() {\n\t\tthis.#activeScopeId = null;\n\t}\n\n\t/**\n\t * 将延迟队列恢复到目标 Queue 的头部。\n\t * @param {import(\"./queue.js\").Queue} targetQueue\n\t */\n\trestoreDeferred(targetQueue) {\n\t\ttargetQueue.prependAll(this.#deferredQueue);\n\t}\n\n\t/**\n\t * 拒绝所有延迟队列中的任务。\n\t * @param {Error} error\n\t */\n\trejectAll(error) {\n\t\tlet task = this.#deferredQueue.dequeue();\n\t\twhile (task) {\n\t\t\tsettleTask(task, error, undefined, null);\n\t\t\ttask = this.#deferredQueue.dequeue();\n\t\t}\n\t}\n}\n","import { Queue } from \"./queue.js\";\nimport { createJsonValueParser, toError } from \"./parser.js\";\nimport { isSentinelRaw, isSentinelRow, buildBatchPayload } from \"./protocol.js\";\nimport { collectQueryRows, processStreamRows, settleTask } from \"./settleUtils.js\";\nimport { finalizePendingTasks, prepareTaskTimeout } from \"./pipelineUtils.js\";\nimport { DEFAULT_BATCH_SIZE, DEFAULT_MAX_INFLIGHT } from \"../constants.js\";\n\n/**\n * 管线化执行引擎。\n *\n * 维护任务队列、管理 inflight 任务、处理 stdout/stderr 解析、\n * 实现 sentinel token 协议和 stderr 竞态处理。\n *\n * PipelineEngine 不关心事务作用域、读写分离或进程恢复 ——\n * 这些由上层(SQLiteExecutor)负责。\n */\nexport class PipelineEngine {\n\t#queue = new Queue();\n\t#inflightTasks = [];\n\t#inflightHead = 0;\n\t#pendingFinalizeTasks = new Set();\n\t#scheduledFinalize = false;\n\t#sharedValueParser;\n\t#processManager;\n\t#metrics;\n\t#statementTimeout;\n\t#logger;\n\t#batchSize;\n\t#maxInflight;\n\t#onTaskTimeout;\n\t#active = false;\n\t#sweepTimer = null;\n\t#sweepIntervalMs;\n\n\t/**\n\t * @param {import(\"./process.js\").ProcessManager} processManager\n\t * @param {{\n\t * metrics: import(\"./metrics.js\").Metrics,\n\t * statementTimeout: number,\n\t * logger?: import(\"../index.js\").Logger,\n\t * batchSize?: number,\n\t * onTaskTimeout?: (task: object) => void,\n\t * }} options\n\t */\n\tconstructor(\n\t\tprocessManager,\n\t\t{\n\t\t\tmetrics,\n\t\t\tstatementTimeout,\n\t\t\tlogger,\n\t\t\tbatchSize = DEFAULT_BATCH_SIZE,\n\t\t\tmaxInflight = DEFAULT_MAX_INFLIGHT,\n\t\t\tonTaskTimeout,\n\t\t\tsweepInterval = 100,\n\t\t},\n\t) {\n\t\tthis.#processManager = processManager;\n\t\tthis.#metrics = metrics;\n\t\tthis.#statementTimeout = statementTimeout;\n\t\tthis.#logger = logger;\n\t\tthis.#batchSize = batchSize;\n\t\tthis.#maxInflight = maxInflight;\n\t\tthis.#onTaskTimeout = onTaskTimeout ?? (() => {});\n\t\tthis.#sharedValueParser = createJsonValueParser((raw) => this.#handleParsedValue(raw));\n\t\tthis.#processManager.setOnDrainCallback(() => this.#pumpQueue());\n\t\tthis.#sweepIntervalMs = sweepInterval;\n\t}\n\n\t/** 测试用:获取扫制定时器引用。 */\n\tget _sweepTimer() {\n\t\treturn this.#sweepTimer;\n\t}\n\n\t/** 主任务队列(供事务延迟任务恢复使用)。 */\n\tget mainQueue() {\n\t\treturn this.#queue;\n\t}\n\n\t/** 主动触发一次队列发送。 */\n\tpump() {\n\t\tthis.#pumpQueue();\n\t}\n\n\t/** 当前待处理的任务总数(队列中 + 执行中 + pendingFinalize)。 */\n\tget pendingStatements() {\n\t\treturn this.#queue.size + (this.#inflightTasks.length - this.#inflightHead) + this.#pendingFinalizeTasks.size;\n\t}\n\n\t/**\n\t * 将数据送入 sharedValueParser 解析(供 stream 的 rowParser 回喂数据使用)。\n\t * @param {string} raw\n\t */\n\tfeed(raw) {\n\t\tthis.#sharedValueParser.feed(raw);\n\t}\n\n\t/** 标记引擎可用,允许发送任务。 */\n\tactivate() {\n\t\tthis.#sharedValueParser?.reset();\n\t\tthis.#active = true;\n\t}\n\n\t/** 标记引擎不可用,阻止发送新任务。 */\n\tdeactivate() {\n\t\tthis.#active = false;\n\t}\n\n\t/**\n\t * 入队一个任务。\n\t * 任务对象应包含:kind, sql, timeout, token, onRow, rows, resolve, reject,\n\t * consumerError, stderrText, timer, startTime, rowParser。\n\t * @param {object} task\n\t */\n\tenqueue(task) {\n\t\tthis.#queue.enqueue(task);\n\t\tthis.#pumpQueue();\n\t}\n\n\t#inflightCount() {\n\t\treturn this.#inflightTasks.length - this.#inflightHead;\n\t}\n\n\t#firstInflight() {\n\t\treturn this.#inflightHead < this.#inflightTasks.length ? this.#inflightTasks[this.#inflightHead] : null;\n\t}\n\n\t#shiftInflight() {\n\t\tconst task = this.#inflightTasks[this.#inflightHead];\n\t\tthis.#inflightTasks[this.#inflightHead] = null;\n\t\tthis.#inflightHead++;\n\t\tif (this.#inflightHead >= this.#inflightTasks.length) {\n\t\t\tthis.#inflightTasks = [];\n\t\t\tthis.#inflightHead = 0;\n\t\t} else if (this.#inflightHead > 128) {\n\t\t\tthis.#inflightTasks = this.#inflightTasks.slice(this.#inflightHead);\n\t\t\tthis.#inflightHead = 0;\n\t\t}\n\t\treturn task;\n\t}\n\n\t/**\n\t * 从队列批量取出任务发送给 sqlite3 进程。\n\t * 非 stream 任务最多批量发送 DEFAULT_BATCH_SIZE 个;\n\t * stream 任务独占发送(队列中有 stream 时不会与其他任务打包)。\n\t */\n\t#pumpQueue() {\n\t\tif (!this.#active) return;\n\t\tif (this.#processManager.draining) return;\n\t\tif (this.#inflightCount() >= this.#maxInflight) return;\n\n\t\tconst batch = [];\n\t\twhile (batch.length < this.#batchSize && !this.#queue.isEmpty() && this.#inflightCount() + batch.length < this.#maxInflight) {\n\t\t\tconst task = this.#queue.peek();\n\t\t\tif (task.kind === \"stream\" && (batch.length > 0 || this.#inflightCount() > 0)) break;\n\t\t\tthis.#queue.dequeue();\n\t\t\tbatch.push(task);\n\t\t}\n\t\tif (batch.length === 0) return;\n\n\t\tconst now = performance.now();\n\n\t\tconst payload = buildBatchPayload(batch);\n\n\t\tfor (const task of batch) {\n\t\t\ttask.startTime = now;\n\t\t}\n\t\tthis.#inflightTasks.push(...batch);\n\t\tthis.#scheduleSweep();\n\t\tthis.#processManager.write(payload);\n\t}\n\n\t/**\n\t * 处理 sqlite3 的 stdout 输出。\n\t * 对于 stream 类型任务,先通过行流解析器逐行处理,剩余数据转给 JSON 值解析器。\n\t * @param {string} chunk\n\t */\n\thandleStdoutChunk(chunk) {\n\t\tconst task = this.#firstInflight();\n\t\tif (!task) return;\n\n\t\t// 已超时的 stream 任务:禁止继续喂给 rowParser(rowParser.reset 后 finished=false,\n\t\t// 否则会触发 spurious onRow 回调)。数据直接走 sharedValueParser 由\n\t\t// #handleParsedValue 中的 task.timedout 短路丢弃。\n\t\tif (task.kind === \"stream\" && task.rowParser && !task.rowParser.finished && !task.timedout) {\n\t\t\tconst leftover = task.rowParser.feed(chunk);\n\t\t\tif (leftover) this.#sharedValueParser.feed(leftover);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#sharedValueParser.feed(chunk);\n\t}\n\n\t/**\n\t * 处理一个完整 JSON 值的解析结果。\n\t * 如果是 sentinel 行,则根据 stderr/consumerError 决定拒绝还是完成;\n\t * 否则按 query/stream 类型分别收集行数据或逐行回调。\n\t * @param {string} raw\n\t */\n\t#handleParsedValue(raw) {\n\t\tconst task = this.#firstInflight();\n\t\tif (!task) return;\n\n\t\t// Fast path: 原始字符串精确匹配 sentinel,跳过 JSON.parse\n\t\tif (isSentinelRaw(raw, task.token)) {\n\t\t\tthis.#shiftInflight();\n\n\t\t\tif (task.timedout) {\n\t\t\t\tthis.#pumpQueue();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// 无论 stderrText 是否为空,都走 pendingFinalize 延迟结算。\n\t\t\t// 原因:Windows 上 sqlite3 的 stderr 输出可能被 OS pipe 拆分为多个 chunk,\n\t\t\t// 若在此处立即 reject,后续到达的 stderr chunk 会丢失或被错误地配给下一个 inflight 任务。\n\t\t\t// 通过 pendingFinalize + setImmediate 给 stderr chunk 留足时间到达。\n\t\t\tif (task.consumerError) {\n\t\t\t\tthis.#settleTask(task, task.consumerError, undefined);\n\t\t\t\tthis.#pumpQueue();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.#pendingFinalizeTasks.add(task);\n\t\t\tthis.#scheduleFinalizeCheck();\n\t\t\tthis.#pumpQueue();\n\t\t\treturn;\n\t\t}\n\n\t\t// Fast path: 空数组 [],execute 的零行结果,跳过 JSON.parse\n\t\tif (raw === \"[]\") return;\n\n\t\tlet parsed;\n\t\ttry {\n\t\t\tparsed = JSON.parse(raw);\n\t\t} catch (error) {\n\t\t\tthis.rejectAll(new Error(`Invalid JSON from sqlite3: ${toError(error).message}`));\n\t\t\treturn;\n\t\t}\n\n\t\tif (isSentinelRow(parsed, task.token)) {\n\t\t\tthis.#shiftInflight();\n\n\t\t\tif (task.timedout) {\n\t\t\t\tthis.#pumpQueue();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (task.consumerError) {\n\t\t\t\tthis.#settleTask(task, task.consumerError, undefined);\n\t\t\t\tthis.#pumpQueue();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.#pendingFinalizeTasks.add(task);\n\t\t\tthis.#scheduleFinalizeCheck();\n\t\t\tthis.#pumpQueue();\n\t\t\treturn;\n\t\t}\n\n\t\tif (task.timedout) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (task.kind === \"query\") {\n\t\t\tcollectQueryRows(task, parsed);\n\t\t\treturn;\n\t\t}\n\n\t\tif (task.kind === \"stream\") {\n\t\t\tprocessStreamRows(task, parsed);\n\t\t}\n\t}\n\n\t/**\n\t * 处理 sqlite3 的 stderr 输出。\n\t * 将错误文本附加到 inflight 任务或 pendingFinalize 任务;\n\t * 如果没有匹配任务则通过 logger 输出。\n\t * @param {string} chunk\n\t */\n\thandleStderrChunk(chunk) {\n\t\t// 优先匹配 pendingFinalize 任务,确保延迟到达的 stderr chunk\n\t\t// 被正确归因到原始任务,而非下一个 inflight 任务。\n\t\tconst task = this.#pendingFinalizeTasks.values().next().value ?? this.#firstInflight();\n\t\tif (!task) {\n\t\t\tthis.#logger?.error?.(chunk.trim());\n\t\t\treturn;\n\t\t}\n\t\ttask.stderrText += chunk;\n\t}\n\n\t/**\n\t * 批量处理 pendingFinalize 任务,合并多次 setImmediate 为一次。\n\t */\n\t#scheduleFinalizeCheck() {\n\t\tif (this.#scheduledFinalize) return;\n\t\tthis.#scheduledFinalize = true;\n\t\tsetImmediate(() => {\n\t\t\tthis.#scheduledFinalize = false;\n\t\t\tfinalizePendingTasks(\n\t\t\t\tthis.#pendingFinalizeTasks,\n\t\t\t\t(t, e, v) => this.#settleTask(t, e, v),\n\t\t\t\t() => this.#pumpQueue(),\n\t\t\t);\n\t\t});\n\t}\n\n\t#scheduleSweep() {\n\t\tif (this.#sweepTimer) return;\n\t\tthis.#sweepTimer = setTimeout(() => {\n\t\t\tthis.#sweepTimer = null;\n\t\t\tconst tasks = this.#inflightTasks;\n\t\t\tconst head = this.#inflightHead;\n\t\t\tconst now = performance.now();\n\t\t\tfor (let i = head; i < tasks.length; i++) {\n\t\t\t\tconst task = tasks[i];\n\t\t\t\tif (now - task.startTime > task.timeout) {\n\t\t\t\t\tthis.#handleTaskTimeout(task);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.#inflightCount() > 0) {\n\t\t\t\tthis.#scheduleSweep();\n\t\t\t}\n\t\t}, this.#sweepIntervalMs).unref();\n\t}\n\n\t#handleTaskTimeout(task) {\n\t\tconst error = prepareTaskTimeout(task, this.#metrics);\n\t\tif (error) {\n\t\t\tthis.#settleTask(task, error, undefined);\n\t\t\tthis.#onTaskTimeout?.(task);\n\t\t}\n\t}\n\n\t#settleTask(task, error, value) {\n\t\tsettleTask(task, error, value, this.#metrics, { resetRowParser: true });\n\t}\n\n\t/**\n\t * 拒绝 inflight 任务以及队列中的所有待处理任务。\n\t * 不清除 deferred 队列(由上层负责)。\n\t * @param {Error} error\n\t */\n\trejectAll(error) {\n\t\tthis.#sharedValueParser.reset();\n\n\t\tconst activeCount = this.#inflightTasks.length - this.#inflightHead;\n\t\tconst all = activeCount > 0 ? this.#inflightTasks.slice(this.#inflightHead) : [];\n\t\tthis.#inflightTasks = [];\n\t\tthis.#inflightHead = 0;\n\n\t\tfor (const task of all) {\n\t\t\tthis.#settleTask(task, error, undefined);\n\t\t}\n\n\t\tlet queued = this.#queue.dequeue();\n\t\twhile (queued) {\n\t\t\tthis.#settleTask(queued, error, undefined);\n\t\t\tqueued = this.#queue.dequeue();\n\t\t}\n\n\t\tfor (const task of this.#pendingFinalizeTasks) {\n\t\t\tthis.#settleTask(task, error, undefined);\n\t\t}\n\t\tthis.#pendingFinalizeTasks.clear();\n\t}\n\n\t/**\n\t * 终止引擎:拒绝所有任务,清空状态。\n\t */\n\tkill() {\n\t\tthis.#active = false;\n\t\tclearTimeout(this.#sweepTimer);\n\t\tthis.#sweepTimer = null;\n\t\tthis.rejectAll(new Error(\"PipelineEngine is killed\"));\n\t}\n}\n","import { once } from \"node:events\";\nimport { DEFAULT_STATEMENT_TIMEOUT } from \"../utils/timeout.js\";\nimport { VALID_TRANSACTION_MODES, createTransactionHandle } from \"../transaction/transaction.js\";\nimport { ProcessManager } from \"./process.js\";\nimport { toError } from \"./parser.js\";\nimport { generateToken } from \"../utils/token.js\";\n\nimport { setupStreamParser, AsyncRowBuffer } from \"../stream/stream.js\";\nimport { interpolateFromTemplate } from \"../utils/interpolate.js\";\nimport { normalizeSQLTemplate } from \"../utils/normalize.js\";\nimport { classifySQL } from \"./classifier.js\";\nimport { ReaderPool } from \"./readerPool.js\";\nimport { Metrics } from \"./metrics.js\";\nimport { TransactionScope } from \"./transactionScope.js\";\nimport { PipelineEngine } from \"./pipelineEngine.js\";\n\n/**\n * SQLite 执行器。\n *\n * 通过 stdin/stdout 与 sqlite3 CLI 进程通信,提供 execute/query/stream/transaction API。\n * 内部使用管线化队列批量发送任务,基于 Sentinel token 协议检测单个 SQL 任务的输出边界。\n */\nexport class SQLiteExecutor {\n\t#closed = false;\n\t#proc = null;\n\t#logger;\n\t#statementTimeout;\n\t#autoRestart;\n\t#fatalError = null;\n\t#processManager;\n\t#readerPool = null;\n\t#poolSize;\n\t#binary;\n\t#database;\n\t#metrics;\n\t#pipeline;\n\t#txScope = new TransactionScope();\n\n\t/**\n\t * @param {{\n\t * binary?: string,\n\t * database?: string,\n\t * logger?: import(\"../index.js\").Logger,\n\t * statementTimeout?: number,\n\t * autoRestart?: boolean,\n\t * poolSize?: number,\n\t * metrics?: import(\"./metrics.js\").Metrics,\n\t * }} options\n\t */\n\tconstructor({\n\t\tbinary = \"sqlite3\",\n\t\tdatabase = \":memory:\",\n\t\tlogger,\n\t\tstatementTimeout = DEFAULT_STATEMENT_TIMEOUT,\n\t\tautoRestart = true,\n\t\tpoolSize = 0,\n\t\tmetrics,\n\t} = {}) {\n\t\tthis.#logger = logger;\n\t\tthis.#statementTimeout = this.#normalizeTimeout(statementTimeout);\n\t\tthis.#autoRestart = autoRestart !== false;\n\t\tthis.#binary = binary;\n\t\tthis.#database = database;\n\t\tthis.#poolSize = poolSize;\n\t\tthis.#metrics = metrics ?? new Metrics();\n\n\t\tthis.#processManager = new ProcessManager({ binary, database });\n\t\tthis.#pipeline = new PipelineEngine(this.#processManager, {\n\t\t\tmetrics: this.#metrics,\n\t\t\tstatementTimeout: this.#statementTimeout,\n\t\t\tlogger: this.#logger,\n\t\t\tonTaskTimeout: () => {},\n\t\t});\n\t\tthis.#startProcess();\n\n\t\tif (poolSize > 0 && database !== \":memory:\") {\n\t\t\tthis.#readerPool = new ReaderPool({\n\t\t\t\tbinary,\n\t\t\t\tdatabase,\n\t\t\t\tpoolSize,\n\t\t\t\tstatementTimeout,\n\t\t\t\tlogger,\n\t\t\t\tmetrics: this.#metrics,\n\t\t\t});\n\t\t}\n\t}\n\n\t/** 当前待处理的任务总数(队列中 + 执行中 + reader 队列中) */\n\tget pendingStatements() {\n\t\treturn this.#txScope.pendingStatements + this.#pipeline.pendingStatements + (this.#readerPool?.pendingStatements ?? 0);\n\t}\n\n\t/** 读取器连接池(null 表示未启用读写分离)。 */\n\tget readerPool() {\n\t\treturn this.#readerPool;\n\t}\n\n\t/** 测试用:获取底层子进程引用。 */\n\tget _process() {\n\t\treturn this.#proc;\n\t}\n\n\t/** 运行时指标收集器。 */\n\tget metrics() {\n\t\treturn this.#metrics;\n\t}\n\n\t/**\n\t * 执行 SQL 语句(不返回行数据)。\n\t * 适用于 INSERT / UPDATE / CREATE 等非查询操作。\n\t * @param {string} sql\n\t * @param {any[]} [params]\n\t * @param {{ timeout?: number }} [options]\n\t * @returns {Promise<void>}\n\t */\n\tasync execute(sql, params = [], options = {}) {\n\t\tawait this.#enqueue(\"execute\", sql, params, options, null);\n\t}\n\n\t/**\n\t * 执行查询并返回所有结果行。\n\t * @template T\n\t * @param {string} sql\n\t * @param {any[]} [params]\n\t * @param {{ timeout?: number }} [options]\n\t * @returns {Promise<T[]>}\n\t */\n\tquery(sql, params = [], options = {}) {\n\t\treturn this.#enqueue(\"query\", sql, params, options, null);\n\t}\n\n\t/**\n\t * 流式执行查询,返回 AsyncIterable,可配合 `for await` 逐行消费。\n\t *\n\t * @template T\n\t * @param {string} sql\n\t * @param {any[]} [params]\n\t * @param {{ timeout?: number }} [options]\n\t * @returns {AsyncIterable<T>}\n\t */\n\tstream(sql, params = [], options = {}) {\n\t\tif (!Array.isArray(params)) throw new TypeError(\"params must be an array\");\n\n\t\tconst buffer = new AsyncRowBuffer();\n\n\t\tthis.#enqueue(\n\t\t\t\"stream\",\n\t\t\tsql,\n\t\t\tparams,\n\t\t\t{\n\t\t\t\t...options,\n\t\t\t\tonRow: (row) => buffer.push(row),\n\t\t\t},\n\t\t\tnull,\n\t\t).then(\n\t\t\t() => buffer.end(),\n\t\t\t(err) => buffer.error(err),\n\t\t);\n\n\t\treturn buffer;\n\t}\n\n\t/**\n\t * 在一个数据库事务中执行用户函数。\n\t * 事务内所有操作共享一个域,不会被外部任务交错。\n\t * 函数成功时自动 COMMIT,抛出异常时自动 ROLLBACK。\n\t * @template T\n\t * @param {(tx: import(\"../index.js\").TransactionHandle) => Promise<T>} fn\n\t * @param {{ mode?: \"DEFERRED\" | \"IMMEDIATE\" | \"EXCLUSIVE\" }} [options]\n\t * @returns {Promise<T>}\n\t */\n\tasync transaction(fn, options = {}) {\n\t\tconst mode = options?.mode ?? \"DEFERRED\";\n\t\tif (!VALID_TRANSACTION_MODES.includes(mode)) {\n\t\t\tthrow new TypeError(`transaction mode must be one of: ${VALID_TRANSACTION_MODES.join(\", \")}`);\n\t\t}\n\n\t\tconst { scopeId, release } = await this.#txScope.enter();\n\n\t\tconst tx = createTransactionHandle(scopeId, {\n\t\t\tenqueue: (kind, sql, params, options, sid) => this.#enqueue(kind, sql, params, options, sid),\n\t\t});\n\n\t\ttry {\n\t\t\tawait tx.execute(`BEGIN ${mode}`);\n\t\t\ttry {\n\t\t\t\tconst result = await fn(tx);\n\t\t\t\tawait tx.execute(\"COMMIT\");\n\t\t\t\treturn result;\n\t\t\t} catch (error) {\n\t\t\t\tawait tx.execute(\"ROLLBACK\").catch(() => {});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.#txScope.exit();\n\t\t\tthis.#txScope.restoreDeferred(this.#pipeline.mainQueue);\n\t\t\tthis.#pipeline.pump();\n\t\t\trelease();\n\t\t}\n\t}\n\n\t/**\n\t * 关闭执行器,拒绝所有待处理任务,终止 sqlite3 进程。\n\t * @returns {Promise<void>}\n\t */\n\tasync close() {\n\t\tif (this.#closed) return;\n\t\tthis.#closed = true;\n\t\tthis.#pipeline.kill();\n\t\tthis.#txScope.rejectAll(new Error(\"SQLiteExecutor is closed\"));\n\n\t\tthis.#readerPool?.kill();\n\n\t\tawait this.#processManager.gracefulShutdown();\n\t\tthis.#processManager.kill();\n\t\ttry {\n\t\t\tawait once(this.#processManager.process, \"close\");\n\t\t} catch {}\n\t}\n\n\t[Symbol.asyncDispose]() {\n\t\treturn this.close();\n\t}\n\n\t[Symbol.dispose]() {\n\t\tvoid this.close();\n\t}\n\n\t#normalizeTimeout(value) {\n\t\tif (!Number.isInteger(value) || value <= 0) {\n\t\t\tthrow new TypeError(\"statementTimeout must be a positive integer\");\n\t\t}\n\t\treturn value;\n\t}\n\n\t#startProcess() {\n\t\tlet proc;\n\t\ttry {\n\t\t\tproc = this.#processManager.start();\n\t\t} catch (error) {\n\t\t\tthis.#fatalError = toError(error);\n\t\t\tthis.#logger?.error?.(\"failed to start sqlite3 process\", this.#fatalError);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!proc.stdout) {\n\t\t\tthis.#fatalError = new Error(`Failed to spawn sqlite3 process: stdio unavailable (binary=${this.#binary})`);\n\t\t\tthis.#processManager.kill();\n\t\t\treturn;\n\t\t}\n\n\t\tproc.stdout.on(\"data\", (chunk) => {\n\t\t\tthis.#pipeline.handleStdoutChunk(chunk);\n\t\t});\n\n\t\tproc.stderr?.on(\"data\", (chunk) => {\n\t\t\tthis.#pipeline.handleStderrChunk(chunk);\n\t\t});\n\n\t\tproc.on(\"error\", (error) => {\n\t\t\tif (this.#proc !== proc) return;\n\t\t\tthis.#logger?.error?.(\"sqlite3 process error\", error);\n\t\t\tthis.#handleProcessFailure(error);\n\t\t});\n\n\t\tproc.on(\"close\", (code, signal) => {\n\t\t\tif (this.#proc !== proc) return;\n\t\t\tif (this.#closed) return;\n\t\t\tthis.#handleProcessFailure(new Error(`sqlite3 process exited unexpectedly (code=${code}, signal=${signal ?? \"none\"})`));\n\t\t});\n\n\t\tthis.#proc = proc;\n\t\tthis.#pipeline.activate();\n\t}\n\n\t#enqueue(kind, sql, params, options, scopeId) {\n\t\tif (this.#closed) return Promise.reject(new Error(\"SQLiteExecutor is closed\"));\n\t\tif (this.#fatalError) return Promise.reject(this.#fatalError);\n\t\tif (!Array.isArray(params)) return Promise.reject(new TypeError(\"params must be an array\"));\n\n\t\tconst timeout = options?.timeout ?? this.#statementTimeout;\n\t\tconst token = generateToken();\n\t\tconst onRow = options?.onRow ?? null;\n\n\t\tconst template = normalizeSQLTemplate(sql);\n\n\t\tlet formatted;\n\t\tif (params.length === 0 && template.paramCount === 0) {\n\t\t\tformatted = template.normalized;\n\t\t} else {\n\t\t\tformatted = interpolateFromTemplate(template, params);\n\t\t}\n\n\t\tif (scopeId) {\n\t\t\treturn this.#enqueueWriter(kind, formatted, timeout, token, onRow, scopeId);\n\t\t}\n\n\t\tif (this.#readerPool) {\n\t\t\tif (kind === \"stream\" || kind === \"query\") {\n\t\t\t\treturn this.#enqueueReader(kind, formatted, timeout, token, onRow);\n\t\t\t}\n\t\t\tif (kind === \"execute\" && classifySQL(template.normalized) === \"read\") {\n\t\t\t\treturn this.#enqueueReader(kind, formatted, timeout, token, onRow);\n\t\t\t}\n\t\t}\n\n\t\treturn this.#enqueueWriter(kind, formatted, timeout, token, onRow, null);\n\t}\n\n\t#enqueueWriter(kind, sql, timeout, token, onRow, scopeId) {\n\t\tthis.#metrics.incrementTasksTotal(kind);\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst task = {\n\t\t\t\tkind,\n\t\t\t\tsql,\n\t\t\t\ttimeout,\n\t\t\t\ttoken,\n\t\t\t\tonRow,\n\t\t\t\tscopeId,\n\t\t\t\tresolve,\n\t\t\t\treject,\n\t\t\t\tconsumerError: null,\n\t\t\t\tstderrText: \"\",\n\t\t\t\tsettled: false,\n\t\t\t\tstartTime: 0,\n\t\t\t\trowParser: null,\n\t\t\t\trows: kind === \"query\" ? [] : null,\n\t\t\t};\n\n\t\t\tif (kind === \"stream\") {\n\t\t\t\ttask.rowParser = setupStreamParser(task, this.#pipeline);\n\t\t\t}\n\n\t\t\tif (this.#txScope.isDeferred(scopeId)) {\n\t\t\t\tthis.#txScope.defer(task);\n\t\t\t} else {\n\t\t\t\tthis.#pipeline.enqueue(task);\n\t\t\t}\n\t\t});\n\t}\n\n\t#enqueueReader(kind, sql, timeout, token, onRow) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.#readerPool.enqueue({\n\t\t\t\tkind,\n\t\t\t\tsql,\n\t\t\t\ttimeout,\n\t\t\t\ttoken,\n\t\t\t\tonRow,\n\t\t\t\tresolve,\n\t\t\t\treject,\n\t\t\t});\n\t\t});\n\t}\n\n\t#handleProcessFailure(error) {\n\t\tconst failure = toError(error);\n\t\tthis.#processManager.kill();\n\t\tthis.#proc = null;\n\n\t\tthis.#pipeline.deactivate();\n\t\tthis.#pipeline.rejectAll(failure);\n\t\tthis.#txScope.rejectAll(failure);\n\n\t\tif (!this.#closed && this.#autoRestart) {\n\t\t\tthis.#metrics.incrementProcessRestarts();\n\t\t\tthis.#startProcess();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#fatalError = failure;\n\t\tthis.#closed = true;\n\t}\n}\n"],"names":["DEFAULT_STATEMENT_TIMEOUT","createTimeoutError","timeout","sql","Error","toError","value","String","CHAR_QUOTE","CHAR_BACKSLASH","CHAR_OPEN_BRACKET","CHAR_CLOSE_BRACKET","CHAR_OPEN_BRACE","CHAR_CLOSE_BRACE","CHAR_COMMA","CHAR_SPACE","CHAR_TAB","CHAR_LF","CHAR_CR","isWhitespaceCode","code","createJsonValueParser","onValue","chunk","consumeUntil","buffer","start","nesting","inString","escaped","index","raw","createRowStreamParser","onRow","started","elementStart","elementEnd","consumed","lookAhead","delimiter","TOKEN_COLUMN","DEFAULT_BATCH_SIZE","DEFAULT_MAX_INFLIGHT","setupStreamParser","task","valueParser","parser","rawRow","row","JSON","_type_of","error","Symbol","_buffer","_index","_done","_error","_pending","AsyncRowBuffer","push","resolve","end","undefined","err","reject","next","Promise","_return","VALID_TRANSACTION_MODES","createTransactionHandle","scopeId","executor","handle","params","options","Array","TypeError","isWindows","os","isExecutable","filePath","fs","getPathExts","ext","process","e","which","command","pathExts","path","fullPath","_iteratorError","file","envPath","pathDirs","_iteratorError1","dir","_iteratorError2","ext1","file1","file2","GRACEFUL_SHUTDOWN_TIMEOUT","_binary","_database","_proc","_initMode","_draining","_onDrain","ProcessManager","_ref","binary","database","initMode","onDrain","_which","setOnDrainCallback","fn","_proc_stdin","_proc_stdout","_proc_stderr","args","proc","spawn","write","data","stream","gracefulShutdown","timer","setTimeout","once","clearTimeout","kill","_counter","_PREFIX","_PID36","generateToken","_maxSize","_maxKeyLength","_maxValueLength","_map","LRUCache","maxSize","maxKeyLength","maxValueLength","Infinity","Map","Math","get","key","set","firstKey","clear","escapeValue","Date","interpolateFromTemplate","template","segments","paramCount","parts","i","CC_SINGLE_QUOTE","CC_DOUBLE_QUOTE","CC_DASH","CC_SLASH","CC_STAR","CC_NEWLINE","CC_QUESTION","CC_SEMICOLON","CC_SPACE","STATE_NORMAL","STATE_SINGLE_QUOTE","STATE_DOUBLE_QUOTE","STATE_LINE_COMMENT","STATE_BLOCK_COMMENT","_normDecoder","TextDecoder","_normCache","_normalize","len","needed","outCodes","Uint16Array","writePos","pendingSpace","state","questionPositions","nextCode","normalized","segStart","pos","normalizeSQL","cached","result","normalizeSQLTemplate","READ_ONLY_KINDS","Set","_classifyCache","classifySingle","stmt","trimmed","kind","classifySQL","stmts","s","INITIAL_CAPACITY","SHRINK_THRESHOLD","_items","_head","_tail","_size","_mask","grow","shrinkIfNeeded","Queue","enqueue","dequeue","remove","idx","j","curr","find","predicate","toArray","values","peek","prependAll","other","tmpItems","tmpMask","totalSize","newCap","newItems","writeIdx","i1","isEmpty","oldMask","buildPayload","token","skipNormalize","suffix","isTransactionControl","f","buildBatchPayload","batch","useWalBatch","t","task1","parts1","task2","TC_FIRST_CHAR","buildSentinelStr","isSentinelRaw","isSentinelRow","_value_","collectQueryRows","parsed","processStreamRows","settleTask","metrics","resetRowParser","_task_rowParser","duration","performance","finalizePendingTasks","tasks","settle","pumpQueue","prepareTaskTimeout","_processManager","_pendingQueue","_inflightTasks","_inflightHead","_pendingFinalizeTasks","_scheduledFinalize","_valueParser","_statementTimeout","_logger","_name","_batchSize","_maxInflight","_metrics","_sweepTimer","_sweepIntervalMs","startProcess","inflightCount","firstInflight","shiftInflight","handleParsedValue","scheduleFinalizeCheck","handleStderrChunk","scheduleSweep","handleTaskTimeout","settleTask1","rejectAll","TaskWorker","param","statementTimeout","logger","name","batchSize","maxInflight","sweepInterval","config","_config_onRow","_class_private_field_get_error","signal","now","payload","setImmediate","v1","_class_private_field_get_values_next_value","head","activeCount","all","queued","_workers","_rrIndex","ReaderPool","poolSize","RangeError","worker","sum","w","minLoad","candidates","load","_tasksTotal","_tasksSuccess","_tasksFailed","_tasksTimeout","_processRestarts","_executeCount","_queryCount","_streamCount","_totalDuration","_startTime","Metrics","incrementTasksTotal","incrementTasksSuccess","incrementTasksFailed","incrementTasksTimeout","incrementProcessRestarts","snapshot","elapsed","_deferredQueue","_activeScopeId","_scopeChain","TransactionScope","isDeferred","defer","enter","release","gate","previous","exit","restoreDeferred","targetQueue","_queue","_sharedValueParser","_onTaskTimeout","_active","PipelineEngine","processManager","onTaskTimeout","pump","feed","activate","deactivate","handleStdoutChunk","leftover","_this1","_closed","_autoRestart","_fatalError","_readerPool","_poolSize","_pipeline","_txScope","normalizeTimeout","enqueueWriter","enqueueReader","handleProcessFailure","SQLiteExecutor","autoRestart","_class_private_field_get_pendingStatements","execute","query","transaction","_options_mode","mode","tx","sid","close","Number","_options_timeout","_options_onRow","formatted","failure"],"mappings":"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"}
|