sqlite-executor 4.0.1 → 4.0.3
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/pipelineEngine.d.cts +2 -0
- package/dist/cjs/core/process.d.cts +16 -1
- package/dist/cjs/core/taskWorker.d.cts +6 -0
- package/dist/cjs/index.cjs +78 -17
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/core/pipelineEngine.d.mts +2 -0
- package/dist/esm/core/process.d.mts +16 -1
- package/dist/esm/core/taskWorker.d.mts +6 -0
- package/dist/esm/index.mjs +78 -17
- package/dist/esm/index.mjs.map +1 -1
- package/package.json +4 -4
package/dist/esm/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"esm/index.mjs","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/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_normBuf = new Uint16Array(needed * 2);\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;\nconst CHAR_LF = 10;\nconst CHAR_CR = 13;\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 * 支持流式分块输入,通过 readPos 记录上次扫描位置,避免多次分块间重复扫描已处理数据。\n * 在字符串内正确处理转义。\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\tbuffer: \"\",\n\t\tstart: -1,\n\t\treadPos: 0,\n\t\tnesting: 0,\n\t\tinString: false,\n\t\tescaped: false,\n\t\tfeed(chunk) {\n\t\t\tthis.buffer += chunk;\n\t\t\tlet consumeUntil = 0;\n\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\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\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\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\tcontinue;\n\t\t\t\t}\n\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\tif (code === CHAR_OPEN_BRACKET || code === CHAR_OPEN_BRACE) {\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\tthis.nesting--;\n\t\t\t\t\tif (this.nesting === 0) {\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\tif (consumeUntil > 0) {\n\t\t\t\tthis.buffer = this.buffer.slice(consumeUntil);\n\t\t\t\tthis.readPos = 0;\n\t\t\t} else {\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.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 * 数组元素必须是对象 `{...}` 或嵌套数组 `[...]` 才支持正确的嵌套计数。\n * feed() 返回剩余未处理的数据(即数组结束 `]` 之后的内容)。\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\tstarted: false,\n\t\tfinished: false,\n\t\tinString: false,\n\t\tescaped: false,\n\t\telementStart: -1,\n\t\telementEnd: -1,\n\t\tnesting: 0,\n\t\treadPos: 0,\n\t\tfeed(chunk) {\n\t\t\tif (this.finished) return chunk;\n\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\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\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\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\tif (this.elementStart === -1) {\n\t\t\t\t\tif (isWhitespaceCode(code) || code === CHAR_COMMA) {\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\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\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\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\tthis.elementEnd = index + 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.elementEnd !== -1) {\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\tonRow(this.buffer.slice(this.elementStart, this.elementEnd));\n\t\t\t\t\t\t\tthis.buffer = this.buffer.slice(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\tthis.finished = true;\n\t\t\t\t\t\t\t\tconst tail = this.buffer;\n\t\t\t\t\t\t\t\tthis.buffer = \"\";\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 = 0;\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}\n\n\t\t\t\tindex++;\n\t\t\t}\n\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.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","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#done = false;\n\t#error = null;\n\t#pending = null;\n\n\t/** 生产者侧:添加一行数据 */\n\tpush(row) {\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.#buffer.length > 0) {\n\t\t\treturn Promise.resolve({ value: this.#buffer.shift(), 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\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\n\t/**\n\t * @param {{ binary?: string, database?: string, initMode?: \"wal\" | \"none\" }} options\n\t */\n\tconstructor({ binary, database, initMode = \"wal\" } = {}) {\n\t\tthis.#binary = which(binary) ?? binary;\n\t\tthis.#database = database;\n\t\tthis.#initMode = initMode;\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 管道缓冲区满时(Windows 上仅 4KB,Unix 64KB),\n\t * Node.js 的 stream.write() 返回 false,但数据已进入其内部缓冲队列,\n\t * 等待 drain 事件后自动写入 OS 管道。我们只需记录 draining 状态,\n\t * 无需额外维护写缓冲 —— Node.js 会处理好排队。\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\n\t\tif (!stream.write(data) && !this.#draining) {\n\t\t\tthis.#draining = true;\n\t\t\tstream.once(\"drain\", () => {\n\t\t\t\tthis.#draining = false;\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\tthis.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\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\") return `'${value.replace(/'/g, \"''\")}'`;\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\" || sql.trim().length === 0) return \"write\";\n\n\t// Cache lookup: keyed by original SQL (template), not interpolated.\n\tconst cached = _classifyCache.get(sql);\n\tif (cached !== undefined) return cached;\n\n\tconst trimmed = sql.trim();\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 * 将一批任务合并为单个发送给 sqlite3 进程的载荷字符串。\n * 由 PipelineEngine 和 TaskWorker 共享,避免 25 行重复 payload 构建逻辑。\n *\n * 如果全是 execute 类型且数量 > 1,自动使用 WAL 批量优化:\n * 将多条 INSERT/UPDATE 用 BEGIN/COMMIT 包裹后再追加各自的 sentinel token。\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\");\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 * 检查解析出的 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\tclearTimeout(task.timer);\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 { ProcessManager } from \"./process.js\";\nimport { Queue } from \"./queue.js\";\nimport { createJsonValueParser, toError } from \"./parser.js\";\nimport { isSentinelRow, buildBatchPayload } from \"./protocol.js\";\nimport { createTimeoutError } from \"../utils/timeout.js\";\nimport { collectQueryRows, processStreamRows, settleTask } from \"./settleUtils.js\";\nimport { DEFAULT_BATCH_SIZE } 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#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, 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.#metrics = metrics;\n\t\tthis.#processManager = new ProcessManager({ binary, database, initMode });\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\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\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\tconst batch = [];\n\t\twhile (batch.length < this.#batchSize && !this.#pendingQueue.isEmpty()) {\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\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.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\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\t// 直接遍历 Set 而非展开为数组,避免百万级 SQL 下高频率的中间数组分配\n\t\t\tfor (const task of this.#pendingFinalizeTasks) {\n\t\t\t\tif (task.stderrText) {\n\t\t\t\t\tthis.#settleTask(task, new Error(task.stderrText.trim()), undefined);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (task.consumerError) {\n\t\t\t\t\tthis.#settleTask(task, task.consumerError, undefined);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (task.kind === \"query\") {\n\t\t\t\t\tthis.#settleTask(task, null, task.rows);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis.#settleTask(task, null, undefined);\n\t\t\t}\n\t\t\tthis.#pendingFinalizeTasks.clear();\n\t\t\tthis.#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\tif (this.#inflightTasks[0] !== task) return;\n\t\tthis.#metrics?.incrementTasksTimeout();\n\t\tthis.#rejectAll(createTimeoutError(task.timeout, task.sql));\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\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++;\n\t\tworker.enqueue(task);\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 { isSentinelRow, buildBatchPayload } from \"./protocol.js\";\nimport { collectQueryRows, processStreamRows, settleTask } from \"./settleUtils.js\";\nimport { DEFAULT_BATCH_SIZE } 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#onTaskTimeout;\n\t#active = false;\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(processManager, { metrics, statementTimeout, logger, batchSize = DEFAULT_BATCH_SIZE, onTaskTimeout }) {\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.#onTaskTimeout = onTaskTimeout ?? (() => {});\n\t\tthis.#sharedValueParser = createJsonValueParser((raw) => this.#handleParsedValue(raw));\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\n\t\tconst batch = [];\n\t\twhile (batch.length < this.#batchSize && !this.#queue.isEmpty()) {\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\ttask.timer = setTimeout(() => {\n\t\t\t\tif (this.#inflightTasks[0] !== task) return;\n\t\t\t\tthis.#onTaskTimeout(task);\n\t\t\t}, task.timeout);\n\t\t}\n\t\tthis.#inflightTasks.push(...batch);\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\tif (task.kind === \"stream\" && task.rowParser && !task.rowParser.finished) {\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\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\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\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\t// 直接遍历 Set 而非先展开为数组,避免百万级 SQL 下高频率的临时数组分配\n\t\t\tfor (const task of this.#pendingFinalizeTasks) {\n\t\t\t\tif (task.stderrText) {\n\t\t\t\t\tthis.#settleTask(task, new Error(task.stderrText.trim()), undefined);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (task.consumerError) {\n\t\t\t\t\tthis.#settleTask(task, task.consumerError, undefined);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (task.kind === \"query\") {\n\t\t\t\t\tthis.#settleTask(task, null, task.rows);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis.#settleTask(task, null, undefined);\n\t\t\t}\n\t\t\tthis.#pendingFinalizeTasks.clear();\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\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\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\";\nimport { createTimeoutError } from \"../utils/timeout.js\";\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({ binary = \"sqlite3\", database = \":memory:\", logger, statementTimeout = DEFAULT_STATEMENT_TIMEOUT, autoRestart = true, poolSize = 0, metrics } = {}) {\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: (task) => {\n\t\t\t\tthis.#metrics.incrementTasksTimeout();\n\t\t\t\tthis.#handleProcessFailure(\n\t\t\t\t\tcreateTimeoutError(task.timeout, task.sql),\n\t\t\t\t);\n\t\t\t},\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 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(\"stream\", sql, params, {\n\t\t\t...options,\n\t\t\tonRow: (row) => buffer.push(row),\n\t\t}, null).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\t}\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\ttimer: null,\n\t\t\t\tstartTime: 0,\n\t\t\t\trowParser: null,\n\t\t\t};\n\t\t\t// rows 仅 query 任务使用,execute/stream 不分配空数组以节省内存\n\t\t\tif (kind === \"query\") task.rows = [];\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","setupStreamParser","task","valueParser","parser","rawRow","row","JSON","_type_of","error","Symbol","_buffer","_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","ProcessManager","binary","database","initMode","_which","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","buildBatchPayload","batch","useWalBatch","t","task1","parts1","task2","isSentinelRow","_value_","collectQueryRows","parsed","_task_rows","processStreamRows","settleTask","metrics","resetRowParser","_task_rowParser","duration","performance","_processManager","_pendingQueue","_inflightTasks","_pendingFinalizeTasks","_scheduledFinalize","_valueParser","_statementTimeout","_logger","_name","_batchSize","_metrics","startProcess","pumpQueue","handleParsedValue","scheduleFinalizeCheck","handleStderrChunk","handleTaskTimeout","settleTask1","rejectAll","TaskWorker","param","statementTimeout","logger","name","batchSize","config","_config_onRow","_class_private_field_get_error","signal","now","payload","_task_timeout","setImmediate","_class_private_field_get_","all","queued","_workers","_rrIndex","ReaderPool","poolSize","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","PipelineEngine","processManager","onTaskTimeout","pump","feed","activate","deactivate","handleStdoutChunk","_class_private_field_get_values_next_value","_closed","_autoRestart","_fatalError","_readerPool","_poolSize","_pipeline","_txScope","normalizeTimeout","enqueueWriter","enqueueReader","handleProcessFailure","SQLiteExecutor","autoRestart","_class_private_field_get_pendingStatements","execute","query","transaction","fn","_options_mode","mode","tx","sid","close","Number","_options_timeout","_options_onRow","formatted","sqlNormalized","failure"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"esm/index.mjs","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/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_normBuf = new Uint16Array(needed * 2);\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;\nconst CHAR_LF = 10;\nconst CHAR_CR = 13;\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 * 支持流式分块输入,通过 readPos 记录上次扫描位置,避免多次分块间重复扫描已处理数据。\n * 在字符串内正确处理转义。\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\tbuffer: \"\",\n\t\tstart: -1,\n\t\treadPos: 0,\n\t\tnesting: 0,\n\t\tinString: false,\n\t\tescaped: false,\n\t\tfeed(chunk) {\n\t\t\tthis.buffer += chunk;\n\t\t\tlet consumeUntil = 0;\n\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\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\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\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\tcontinue;\n\t\t\t\t}\n\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\tif (code === CHAR_OPEN_BRACKET || code === CHAR_OPEN_BRACE) {\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\tthis.nesting--;\n\t\t\t\t\tif (this.nesting === 0) {\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\tif (consumeUntil > 0) {\n\t\t\t\tthis.buffer = this.buffer.slice(consumeUntil);\n\t\t\t\tthis.readPos = 0;\n\t\t\t} else {\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.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 * 数组元素必须是对象 `{...}` 或嵌套数组 `[...]` 才支持正确的嵌套计数。\n * feed() 返回剩余未处理的数据(即数组结束 `]` 之后的内容)。\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\tstarted: false,\n\t\tfinished: false,\n\t\tinString: false,\n\t\tescaped: false,\n\t\telementStart: -1,\n\t\telementEnd: -1,\n\t\tnesting: 0,\n\t\treadPos: 0,\n\t\tfeed(chunk) {\n\t\t\tif (this.finished) return chunk;\n\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\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\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\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\tif (this.elementStart === -1) {\n\t\t\t\t\tif (isWhitespaceCode(code) || code === CHAR_COMMA) {\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\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\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\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\tthis.elementEnd = index + 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.elementEnd !== -1) {\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\tonRow(this.buffer.slice(this.elementStart, this.elementEnd));\n\t\t\t\t\t\t\tthis.buffer = this.buffer.slice(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\tthis.finished = true;\n\t\t\t\t\t\t\t\tconst tail = this.buffer;\n\t\t\t\t\t\t\t\tthis.buffer = \"\";\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 = 0;\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}\n\n\t\t\t\tindex++;\n\t\t\t}\n\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.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#done = false;\n\t#error = null;\n\t#pending = null;\n\n\t/** 生产者侧:添加一行数据 */\n\tpush(row) {\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.#buffer.length > 0) {\n\t\t\treturn Promise.resolve({ value: this.#buffer.shift(), 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\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\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\") return `'${value.replace(/'/g, \"''\")}'`;\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\" || sql.trim().length === 0) return \"write\";\n\n\t// Cache lookup: keyed by original SQL (template), not interpolated.\n\tconst cached = _classifyCache.get(sql);\n\tif (cached !== undefined) return cached;\n\n\tconst trimmed = sql.trim();\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\tconst s = sql.trim().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 * 检查解析出的 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\tclearTimeout(task.timer);\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 { ProcessManager } from \"./process.js\";\nimport { Queue } from \"./queue.js\";\nimport { createJsonValueParser, toError } from \"./parser.js\";\nimport { isSentinelRow, buildBatchPayload } from \"./protocol.js\";\nimport { createTimeoutError } from \"../utils/timeout.js\";\nimport { collectQueryRows, processStreamRows, settleTask } from \"./settleUtils.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\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\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\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\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\t// 直接遍历 Set 而非展开为数组,避免百万级 SQL 下高频率的中间数组分配\n\t\t\tfor (const task of this.#pendingFinalizeTasks) {\n\t\t\t\tif (task.stderrText) {\n\t\t\t\t\tthis.#settleTask(task, new Error(task.stderrText.trim()), undefined);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (task.consumerError) {\n\t\t\t\t\tthis.#settleTask(task, task.consumerError, undefined);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (task.kind === \"query\") {\n\t\t\t\t\tthis.#settleTask(task, null, task.rows);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis.#settleTask(task, null, undefined);\n\t\t\t}\n\t\t\tthis.#pendingFinalizeTasks.clear();\n\t\t\tthis.#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\tif (task.settled) return;\n\t\ttask.timedout = true;\n\t\tclearTimeout(task.timer);\n\t\ttask.timer = null;\n\t\tthis.#metrics?.incrementTasksTimeout();\n\t\tthis.#settleTask(task, createTimeoutError(task.timeout, task.sql), 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\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++;\n\t\tworker.enqueue(task);\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 { isSentinelRow, buildBatchPayload } from \"./protocol.js\";\nimport { collectQueryRows, processStreamRows, settleTask } from \"./settleUtils.js\";\nimport { createTimeoutError } from \"../utils/timeout.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\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(processManager, { metrics, statementTimeout, logger, batchSize = DEFAULT_BATCH_SIZE, maxInflight = DEFAULT_MAX_INFLIGHT, onTaskTimeout }) {\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}\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 (\n\t\t\tbatch.length < this.#batchSize &&\n\t\t\t!this.#queue.isEmpty() &&\n\t\t\tthis.#inflightTasks.length + batch.length < this.#maxInflight\n\t\t) {\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\ttask.timer = setTimeout(() => this.#handleTaskTimeout(task), task.timeout);\n\t\t}\n\t\tthis.#inflightTasks.push(...batch);\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\tif (task.kind === \"stream\" && task.rowParser && !task.rowParser.finished) {\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\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\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\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\t// 直接遍历 Set 而非先展开为数组,避免百万级 SQL 下高频率的临时数组分配\n\t\t\tfor (const task of this.#pendingFinalizeTasks) {\n\t\t\t\tif (task.stderrText) {\n\t\t\t\t\tthis.#settleTask(task, new Error(task.stderrText.trim()), undefined);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (task.consumerError) {\n\t\t\t\t\tthis.#settleTask(task, task.consumerError, undefined);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (task.kind === \"query\") {\n\t\t\t\t\tthis.#settleTask(task, null, task.rows);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis.#settleTask(task, null, undefined);\n\t\t\t}\n\t\t\tthis.#pendingFinalizeTasks.clear();\n\t\t});\n\t}\n\n\t#handleTaskTimeout(task) {\n\t\tif (task.settled) return;\n\t\ttask.timedout = true;\n\t\tclearTimeout(task.timer);\n\t\tthis.#settleTask(task, createTimeoutError(task.timeout, task.sql), undefined);\n\t\tthis.#onTaskTimeout?.(task);\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\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\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({ binary = \"sqlite3\", database = \":memory:\", logger, statementTimeout = DEFAULT_STATEMENT_TIMEOUT, autoRestart = true, poolSize = 0, metrics } = {}) {\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: (task) => {\n\t\t\t\tthis.#metrics.incrementTasksTimeout();\n\t\t\t},\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 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(\"stream\", sql, params, {\n\t\t\t...options,\n\t\t\tonRow: (row) => buffer.push(row),\n\t\t}, null).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\t}\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\tconsumerError: null,\n\t\t\tstderrText: \"\",\n\t\t\tsettled: false,\n\t\t\ttimer: null,\n\t\t\t\tstartTime: 0,\n\t\t\t\trowParser: null,\n\t\t\t};\n\t\t\t// rows 仅 query 任务使用,execute/stream 不分配空数组以节省内存\n\t\t\tif (kind === \"query\") task.rows = [];\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","_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","isSentinelRow","_value_","collectQueryRows","parsed","_task_rows","processStreamRows","settleTask","metrics","resetRowParser","_task_rowParser","duration","performance","_processManager","_pendingQueue","_inflightTasks","_pendingFinalizeTasks","_scheduledFinalize","_valueParser","_statementTimeout","_logger","_name","_batchSize","_maxInflight","_metrics","startProcess","pumpQueue","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","_class_private_field_get_","all","queued","_workers","_rrIndex","ReaderPool","poolSize","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","PipelineEngine","processManager","onTaskTimeout","pump","feed","activate","deactivate","handleStdoutChunk","_class_private_field_get_values_next_value","_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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"}
|