sqlite-executor 4.0.9 → 4.0.11
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/index.cjs +121 -38
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/utils/timeout.d.cts +5 -4
- package/dist/esm/index.mjs +121 -38
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/utils/timeout.d.mts +5 -4
- package/package.json +1 -1
|
@@ -5,8 +5,9 @@ export const DEFAULT_STATEMENT_TIMEOUT: 30000;
|
|
|
5
5
|
* 创建包含 SQL 上下文的超时错误。
|
|
6
6
|
* 注意:sql 应已由调用方完成规范化,本函数不再内部调用 normalizeSQL。
|
|
7
7
|
*
|
|
8
|
-
* @param timeout
|
|
9
|
-
* @param sql
|
|
10
|
-
* @
|
|
8
|
+
* @param timeout - 超时时间(毫秒)
|
|
9
|
+
* @param sql - 超时发生时正在执行的 SQL 语句(已规范化)
|
|
10
|
+
* @param startTime - 任务开始时的 performance.now() 值(可选);提供后会生成人类可读的时间信息
|
|
11
|
+
* @returns 包含超时时间、时间信息和 SQL 的 Error 实例
|
|
11
12
|
*/
|
|
12
|
-
export function createTimeoutError(timeout: number, sql: string): Error;
|
|
13
|
+
export function createTimeoutError(timeout: number, sql: string, startTime?: number): Error;
|
package/dist/esm/index.mjs
CHANGED
|
@@ -4,7 +4,30 @@ import * as __WEBPACK_EXTERNAL_MODULE_node_fs_5ea92f0c__ from "node:fs";
|
|
|
4
4
|
import * as __WEBPACK_EXTERNAL_MODULE_node_path_c5b9b54f__ from "node:path";
|
|
5
5
|
import * as __WEBPACK_EXTERNAL_MODULE_node_os_74b4b876__ from "node:os";
|
|
6
6
|
var DEFAULT_STATEMENT_TIMEOUT = 30000;
|
|
7
|
-
function
|
|
7
|
+
function formatDateTime(date) {
|
|
8
|
+
var y = date.getFullYear();
|
|
9
|
+
var M = String(date.getMonth() + 1).padStart(2, "0");
|
|
10
|
+
var d = String(date.getDate()).padStart(2, "0");
|
|
11
|
+
var h = String(date.getHours()).padStart(2, "0");
|
|
12
|
+
var m = String(date.getMinutes()).padStart(2, "0");
|
|
13
|
+
var s = String(date.getSeconds()).padStart(2, "0");
|
|
14
|
+
var ms = String(date.getMilliseconds()).padStart(3, "0");
|
|
15
|
+
return "".concat(y, "-").concat(M, "-").concat(d, " ").concat(h, ":").concat(m, ":").concat(s, ".").concat(ms);
|
|
16
|
+
}
|
|
17
|
+
function formatDuration(ms) {
|
|
18
|
+
if (ms < 1000) return "".concat(ms, "ms");
|
|
19
|
+
if (ms < 60000) return "".concat((ms / 1000).toFixed(1), "s");
|
|
20
|
+
var mins = Math.floor(ms / 60000);
|
|
21
|
+
var secs = (ms % 60000 / 1000).toFixed(1);
|
|
22
|
+
return "".concat(mins, "m ").concat(secs, "s");
|
|
23
|
+
}
|
|
24
|
+
function createTimeoutError(timeout, sql, startTime) {
|
|
25
|
+
if (void 0 !== startTime) {
|
|
26
|
+
var elapsed = Math.max(0, performance.now() - startTime);
|
|
27
|
+
var startDate = new Date(Date.now() - elapsed);
|
|
28
|
+
var deadlineDate = new Date(startDate.getTime() + timeout);
|
|
29
|
+
return new Error("SQLite statement timed out after ".concat(formatDuration(timeout), " ") + "(start: ".concat(formatDateTime(startDate), ", ") + "deadline: ".concat(formatDateTime(deadlineDate), "): ").concat(sql));
|
|
30
|
+
}
|
|
8
31
|
return new Error("SQLite statement timed out after ".concat(timeout, "ms: ").concat(sql));
|
|
9
32
|
}
|
|
10
33
|
function toError(value) {
|
|
@@ -173,6 +196,43 @@ function createRowStreamParser(onRow) {
|
|
|
173
196
|
index++;
|
|
174
197
|
continue;
|
|
175
198
|
}
|
|
199
|
+
if (-1 !== elementEnd) {
|
|
200
|
+
if (isWhitespaceCode(code)) {
|
|
201
|
+
index++;
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
if (code === CHAR_COMMA || code === CHAR_CLOSE_BRACKET) {
|
|
205
|
+
onRow(buffer.slice(elementStart, elementEnd));
|
|
206
|
+
consumed = index + 1;
|
|
207
|
+
elementStart = -1;
|
|
208
|
+
elementEnd = -1;
|
|
209
|
+
nesting = 0;
|
|
210
|
+
if (code === CHAR_CLOSE_BRACKET) {
|
|
211
|
+
this.finished = true;
|
|
212
|
+
this.buffer = "";
|
|
213
|
+
this.started = false;
|
|
214
|
+
this.inString = false;
|
|
215
|
+
this.escaped = false;
|
|
216
|
+
this.elementStart = -1;
|
|
217
|
+
this.elementEnd = -1;
|
|
218
|
+
this.nesting = 0;
|
|
219
|
+
this._consumed = 0;
|
|
220
|
+
this.readPos = 0;
|
|
221
|
+
return buffer.slice(consumed);
|
|
222
|
+
}
|
|
223
|
+
index = consumed;
|
|
224
|
+
if (consumed > 65536) {
|
|
225
|
+
buffer = buffer.slice(consumed);
|
|
226
|
+
this.buffer = buffer;
|
|
227
|
+
this._consumed = 0;
|
|
228
|
+
index = 0;
|
|
229
|
+
consumed = 0;
|
|
230
|
+
}
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
index++;
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
176
236
|
if (code === CHAR_QUOTE) {
|
|
177
237
|
inString = true;
|
|
178
238
|
index++;
|
|
@@ -187,42 +247,6 @@ function createRowStreamParser(onRow) {
|
|
|
187
247
|
nesting--;
|
|
188
248
|
if (0 === nesting) elementEnd = index + 1;
|
|
189
249
|
}
|
|
190
|
-
if (-1 !== elementEnd) {
|
|
191
|
-
var lookAhead = index + 1;
|
|
192
|
-
while(lookAhead < buffer.length && isWhitespaceCode(buffer.charCodeAt(lookAhead)))lookAhead++;
|
|
193
|
-
if (lookAhead < buffer.length) {
|
|
194
|
-
var delimiter = buffer.charCodeAt(lookAhead);
|
|
195
|
-
if (delimiter === CHAR_COMMA || delimiter === CHAR_CLOSE_BRACKET) {
|
|
196
|
-
onRow(buffer.slice(elementStart, elementEnd));
|
|
197
|
-
consumed = lookAhead + 1;
|
|
198
|
-
elementStart = -1;
|
|
199
|
-
elementEnd = -1;
|
|
200
|
-
nesting = 0;
|
|
201
|
-
if (delimiter === CHAR_CLOSE_BRACKET) {
|
|
202
|
-
this.finished = true;
|
|
203
|
-
this.buffer = "";
|
|
204
|
-
this.started = false;
|
|
205
|
-
this.inString = false;
|
|
206
|
-
this.escaped = false;
|
|
207
|
-
this.elementStart = -1;
|
|
208
|
-
this.elementEnd = -1;
|
|
209
|
-
this.nesting = 0;
|
|
210
|
-
this._consumed = 0;
|
|
211
|
-
this.readPos = 0;
|
|
212
|
-
return buffer.slice(consumed);
|
|
213
|
-
}
|
|
214
|
-
index = consumed;
|
|
215
|
-
if (consumed > 65536) {
|
|
216
|
-
buffer = buffer.slice(consumed);
|
|
217
|
-
this.buffer = buffer;
|
|
218
|
-
this._consumed = 0;
|
|
219
|
-
index = 0;
|
|
220
|
-
consumed = 0;
|
|
221
|
-
}
|
|
222
|
-
continue;
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
250
|
index++;
|
|
227
251
|
}
|
|
228
252
|
this.started = started;
|
|
@@ -2209,7 +2233,7 @@ function prepareTaskTimeout(task, metrics) {
|
|
|
2209
2233
|
if (task.settled) return null;
|
|
2210
2234
|
task.timedout = true;
|
|
2211
2235
|
null == metrics || metrics.incrementTasksTimeout();
|
|
2212
|
-
return createTimeoutError(task.timeout, task.sql);
|
|
2236
|
+
return createTimeoutError(task.timeout, task.sql, task.startTime);
|
|
2213
2237
|
}
|
|
2214
2238
|
function createSweeper(param) {
|
|
2215
2239
|
var inflight = param.inflight, sweepIntervalMs = param.sweepIntervalMs, handleTaskTimeout = param.handleTaskTimeout;
|
|
@@ -2242,6 +2266,7 @@ function createFinalizeScheduler(param) {
|
|
|
2242
2266
|
var scheduled = false;
|
|
2243
2267
|
var immediate = null;
|
|
2244
2268
|
var cancelled = false;
|
|
2269
|
+
var delayedZeroRowQueries = new WeakSet();
|
|
2245
2270
|
var cancel = function() {
|
|
2246
2271
|
cancelled = true;
|
|
2247
2272
|
if (immediate) {
|
|
@@ -2257,8 +2282,66 @@ function createFinalizeScheduler(param) {
|
|
|
2257
2282
|
immediate = setImmediate(function() {
|
|
2258
2283
|
immediate = null;
|
|
2259
2284
|
if (cancelled) return;
|
|
2285
|
+
var delayedTasks = [];
|
|
2286
|
+
var hasQueryRows = Array.from(pendingFinalizeTasks).some(function(task) {
|
|
2287
|
+
return "query" === task.kind && task.rows.length > 0;
|
|
2288
|
+
});
|
|
2289
|
+
if (!(null == pendingStderr ? void 0 : pendingStderr.length) && hasQueryRows) {
|
|
2290
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
2291
|
+
try {
|
|
2292
|
+
for(var _iterator = pendingFinalizeTasks[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
2293
|
+
var task = _step.value;
|
|
2294
|
+
if ("query" === task.kind && 0 === task.rows.length && !task.stderrText && !task.consumerError && !delayedZeroRowQueries.has(task)) {
|
|
2295
|
+
delayedZeroRowQueries.add(task);
|
|
2296
|
+
delayedTasks.push(task);
|
|
2297
|
+
}
|
|
2298
|
+
}
|
|
2299
|
+
} catch (err) {
|
|
2300
|
+
_didIteratorError = true;
|
|
2301
|
+
_iteratorError = err;
|
|
2302
|
+
} finally{
|
|
2303
|
+
try {
|
|
2304
|
+
if (!_iteratorNormalCompletion && null != _iterator["return"]) _iterator["return"]();
|
|
2305
|
+
} finally{
|
|
2306
|
+
if (_didIteratorError) throw _iteratorError;
|
|
2307
|
+
}
|
|
2308
|
+
}
|
|
2309
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;
|
|
2310
|
+
try {
|
|
2311
|
+
for(var _iterator1 = delayedTasks[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
|
|
2312
|
+
var task1 = _step1.value;
|
|
2313
|
+
pendingFinalizeTasks["delete"](task1);
|
|
2314
|
+
}
|
|
2315
|
+
} catch (err) {
|
|
2316
|
+
_didIteratorError1 = true;
|
|
2317
|
+
_iteratorError1 = err;
|
|
2318
|
+
} finally{
|
|
2319
|
+
try {
|
|
2320
|
+
if (!_iteratorNormalCompletion1 && null != _iterator1["return"]) _iterator1["return"]();
|
|
2321
|
+
} finally{
|
|
2322
|
+
if (_didIteratorError1) throw _iteratorError1;
|
|
2323
|
+
}
|
|
2324
|
+
}
|
|
2325
|
+
}
|
|
2260
2326
|
finalizePendingTasks(pendingFinalizeTasks, settle, pumpQueue, pendingStderr, inflight);
|
|
2327
|
+
var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;
|
|
2328
|
+
try {
|
|
2329
|
+
for(var _iterator2 = delayedTasks[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true){
|
|
2330
|
+
var task2 = _step2.value;
|
|
2331
|
+
pendingFinalizeTasks.add(task2);
|
|
2332
|
+
}
|
|
2333
|
+
} catch (err) {
|
|
2334
|
+
_didIteratorError2 = true;
|
|
2335
|
+
_iteratorError2 = err;
|
|
2336
|
+
} finally{
|
|
2337
|
+
try {
|
|
2338
|
+
if (!_iteratorNormalCompletion2 && null != _iterator2["return"]) _iterator2["return"]();
|
|
2339
|
+
} finally{
|
|
2340
|
+
if (_didIteratorError2) throw _iteratorError2;
|
|
2341
|
+
}
|
|
2342
|
+
}
|
|
2261
2343
|
scheduled = false;
|
|
2344
|
+
if (delayedTasks.length > 0) check();
|
|
2262
2345
|
});
|
|
2263
2346
|
};
|
|
2264
2347
|
check.cancel = cancel;
|