forge-sql-orm 2.1.14 → 2.1.16
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/README.md +294 -20
- package/dist/core/ForgeSQLORM.d.ts +16 -7
- package/dist/core/ForgeSQLORM.d.ts.map +1 -1
- package/dist/core/ForgeSQLORM.js +73 -15
- package/dist/core/ForgeSQLORM.js.map +1 -1
- package/dist/core/ForgeSQLQueryBuilder.d.ts +15 -7
- package/dist/core/ForgeSQLQueryBuilder.d.ts.map +1 -1
- package/dist/core/ForgeSQLQueryBuilder.js.map +1 -1
- package/dist/core/ForgeSQLSelectOperations.d.ts +2 -1
- package/dist/core/ForgeSQLSelectOperations.d.ts.map +1 -1
- package/dist/core/ForgeSQLSelectOperations.js.map +1 -1
- package/dist/core/Rovo.d.ts +40 -0
- package/dist/core/Rovo.d.ts.map +1 -1
- package/dist/core/Rovo.js +164 -138
- package/dist/core/Rovo.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/drizzle/extensions/additionalActions.d.ts.map +1 -1
- package/dist/lib/drizzle/extensions/additionalActions.js +72 -22
- package/dist/lib/drizzle/extensions/additionalActions.js.map +1 -1
- package/dist/utils/cacheTableUtils.d.ts +11 -0
- package/dist/utils/cacheTableUtils.d.ts.map +1 -0
- package/dist/utils/cacheTableUtils.js +450 -0
- package/dist/utils/cacheTableUtils.js.map +1 -0
- package/dist/utils/cacheUtils.d.ts.map +1 -1
- package/dist/utils/cacheUtils.js +3 -22
- package/dist/utils/cacheUtils.js.map +1 -1
- package/dist/utils/forgeDriver.d.ts +3 -2
- package/dist/utils/forgeDriver.d.ts.map +1 -1
- package/dist/utils/forgeDriver.js +24 -27
- package/dist/utils/forgeDriver.js.map +1 -1
- package/dist/utils/metadataContextUtils.d.ts +27 -1
- package/dist/utils/metadataContextUtils.d.ts.map +1 -1
- package/dist/utils/metadataContextUtils.js +237 -10
- package/dist/utils/metadataContextUtils.js.map +1 -1
- package/dist/utils/sqlUtils.d.ts +1 -0
- package/dist/utils/sqlUtils.d.ts.map +1 -1
- package/dist/utils/sqlUtils.js +217 -119
- package/dist/utils/sqlUtils.js.map +1 -1
- package/dist/webtriggers/applyMigrationsWebTrigger.js +1 -1
- package/dist/webtriggers/index.d.ts +1 -0
- package/dist/webtriggers/index.d.ts.map +1 -1
- package/dist/webtriggers/index.js +1 -0
- package/dist/webtriggers/index.js.map +1 -1
- package/dist/webtriggers/topSlowestStatementLastHourTrigger.d.ts +60 -0
- package/dist/webtriggers/topSlowestStatementLastHourTrigger.d.ts.map +1 -0
- package/dist/webtriggers/topSlowestStatementLastHourTrigger.js +55 -0
- package/dist/webtriggers/topSlowestStatementLastHourTrigger.js.map +1 -0
- package/package.json +11 -10
- package/src/core/ForgeSQLORM.ts +78 -14
- package/src/core/ForgeSQLQueryBuilder.ts +15 -5
- package/src/core/ForgeSQLSelectOperations.ts +2 -1
- package/src/core/Rovo.ts +209 -167
- package/src/index.ts +1 -3
- package/src/lib/drizzle/extensions/additionalActions.ts +98 -42
- package/src/utils/cacheTableUtils.ts +511 -0
- package/src/utils/cacheUtils.ts +3 -25
- package/src/utils/forgeDriver.ts +38 -29
- package/src/utils/metadataContextUtils.ts +290 -10
- package/src/utils/sqlUtils.ts +298 -142
- package/src/webtriggers/applyMigrationsWebTrigger.ts +1 -1
- package/src/webtriggers/index.ts +1 -0
- package/src/webtriggers/topSlowestStatementLastHourTrigger.ts +69 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cacheUtils.d.ts","sourceRoot":"","sources":["../../src/utils/cacheUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"cacheUtils.d.ts","sourceRoot":"","sources":["../../src/utils/cacheUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AA4ClE;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAK5C;AAmKD;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,CAAC,SAAS,aAAa,EACtD,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAoBf;AACD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBlF;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,KAAK,CAAA;CAAE,EAC7B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CA6CxB;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,KAAK,CAAA;CAAE,EAC7B,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CA8Cf"}
|
package/dist/utils/cacheUtils.js
CHANGED
|
@@ -44,6 +44,7 @@ const crypto = __importStar(require("node:crypto"));
|
|
|
44
44
|
const table_1 = require("drizzle-orm/table");
|
|
45
45
|
const kvs_1 = require("@forge/kvs");
|
|
46
46
|
const cacheContextUtils_1 = require("./cacheContextUtils");
|
|
47
|
+
const cacheTableUtils_1 = require("./cacheTableUtils");
|
|
47
48
|
// Constants for better maintainability
|
|
48
49
|
const CACHE_CONSTANTS = {
|
|
49
50
|
BATCH_SIZE: 25,
|
|
@@ -76,26 +77,6 @@ function nowPlusSeconds(secondsToAdd) {
|
|
|
76
77
|
const dt = luxon_1.DateTime.now().plus({ seconds: secondsToAdd });
|
|
77
78
|
return Math.floor(dt.toSeconds());
|
|
78
79
|
}
|
|
79
|
-
/**
|
|
80
|
-
* Extracts all table/column names between backticks from SQL query and returns them as comma-separated string.
|
|
81
|
-
*
|
|
82
|
-
* @param sql - SQL query string
|
|
83
|
-
* @returns Comma-separated string of unique backticked values
|
|
84
|
-
*/
|
|
85
|
-
function extractBacktickedValues(sql) {
|
|
86
|
-
const regex = /`([^`]+)`/g;
|
|
87
|
-
const matches = new Set();
|
|
88
|
-
let match;
|
|
89
|
-
while ((match = regex.exec(sql.toLowerCase())) !== null) {
|
|
90
|
-
if (!match[1].startsWith("a_")) {
|
|
91
|
-
matches.add(`\`${match[1]}\``);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
// Sort to ensure consistent order for the same input
|
|
95
|
-
return Array.from(matches)
|
|
96
|
-
.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: "base", numeric: true }))
|
|
97
|
-
.join(",");
|
|
98
|
-
}
|
|
99
80
|
/**
|
|
100
81
|
* Generates a hash key for a query based on its SQL and parameters.
|
|
101
82
|
*
|
|
@@ -320,7 +301,7 @@ async function getFromCache(query, options) {
|
|
|
320
301
|
const cacheResult = (await kvs_1.kvs.entity(options.cacheEntityName).get(key));
|
|
321
302
|
if (cacheResult &&
|
|
322
303
|
cacheResult[expirationName] >= getCurrentTime() &&
|
|
323
|
-
extractBacktickedValues(sqlQuery.sql) === cacheResult[entityQueryName]) {
|
|
304
|
+
(0, cacheTableUtils_1.extractBacktickedValues)(sqlQuery.sql, options) === cacheResult[entityQueryName]) {
|
|
324
305
|
if (options.logCache) {
|
|
325
306
|
// eslint-disable-next-line no-console
|
|
326
307
|
console.warn(`Get value from cache, cacheKey: ${key}`);
|
|
@@ -365,7 +346,7 @@ async function setCacheResult(query, options, results, cacheTtl) {
|
|
|
365
346
|
await kvs_1.kvs
|
|
366
347
|
.transact()
|
|
367
348
|
.set(key, {
|
|
368
|
-
[entityQueryName]: extractBacktickedValues(sqlQuery.sql),
|
|
349
|
+
[entityQueryName]: (0, cacheTableUtils_1.extractBacktickedValues)(sqlQuery.sql, options),
|
|
369
350
|
[expirationName]: nowPlusSeconds(cacheTtl),
|
|
370
351
|
[dataName]: JSON.stringify(results),
|
|
371
352
|
}, { entityName: options.cacheEntityName })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cacheUtils.js","sourceRoot":"","sources":["../../src/utils/cacheUtils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"cacheUtils.js","sourceRoot":"","sources":["../../src/utils/cacheUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,9 +50,10 @@ export declare function isUpdateQueryResponse(obj: unknown): obj is UpdateQueryR
|
|
|
50
50
|
/**
|
|
51
51
|
* Main Forge SQL driver function for Drizzle ORM integration.
|
|
52
52
|
* Handles DDL operations, execute operations (UPDATE/INSERT/DELETE), and select operations.
|
|
53
|
+
* Automatically saves query execution metadata to the context for performance monitoring.
|
|
53
54
|
*
|
|
54
55
|
* @param query - The SQL query to execute
|
|
55
|
-
* @param params - Query parameters
|
|
56
|
+
* @param params - Query parameters (may be undefined or empty array)
|
|
56
57
|
* @param method - Execution method ("all" for SELECT, "execute" for UPDATE/INSERT/DELETE)
|
|
57
58
|
* @returns Promise with query results compatible with Drizzle ORM
|
|
58
59
|
*
|
|
@@ -70,5 +71,5 @@ export declare function isUpdateQueryResponse(obj: unknown): obj is UpdateQueryR
|
|
|
70
71
|
* await forgeDriver("UPDATE users SET name = ? WHERE id = ?", ["John", 1], "execute");
|
|
71
72
|
* ```
|
|
72
73
|
*/
|
|
73
|
-
export declare const forgeDriver: (query: string, params: unknown[], method: QueryMethod) => Promise<ForgeDriverResult>;
|
|
74
|
+
export declare const forgeDriver: (query: string, params: unknown[] | undefined, method: QueryMethod) => Promise<ForgeDriverResult>;
|
|
74
75
|
//# sourceMappingURL=forgeDriver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forgeDriver.d.ts","sourceRoot":"","sources":["../../src/utils/forgeDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,mBAAmB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"forgeDriver.d.ts","sourceRoot":"","sources":["../../src/utils/forgeDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAStD;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB,EAAE,CAAC;CACL,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1D,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,SAAS,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,mBAAmB,CAO9E;AAiGD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,WAAW,GACtB,OAAO,MAAM,EACb,QAAQ,OAAO,EAAE,GAAG,SAAS,EAC7B,QAAQ,WAAW,KAClB,OAAO,CAAC,iBAAiB,CAsB3B,CAAC"}
|
|
@@ -6,6 +6,7 @@ const sql_1 = require("@forge/sql");
|
|
|
6
6
|
const metadataContextUtils_1 = require("./metadataContextUtils");
|
|
7
7
|
const requestTypeContextUtils_1 = require("./requestTypeContextUtils");
|
|
8
8
|
const sqlUtils_1 = require("./sqlUtils");
|
|
9
|
+
const sql_2 = require("@forge/sql/out/sql");
|
|
9
10
|
const timeoutMs = 10000;
|
|
10
11
|
const timeoutMessage = `Atlassian @forge/sql did not return a response within ${timeoutMs}ms (${timeoutMs / 1000} seconds), so the request is blocked. Possible causes: slow query, network issues, or exceeding Forge SQL limits.`;
|
|
11
12
|
/**
|
|
@@ -20,26 +21,18 @@ function isUpdateQueryResponse(obj) {
|
|
|
20
21
|
typeof obj.affectedRows === "number" &&
|
|
21
22
|
typeof obj.insertId === "number");
|
|
22
23
|
}
|
|
23
|
-
function inlineParams(sql, params) {
|
|
24
|
-
let i = 0;
|
|
25
|
-
return sql.replace(/\?/g, () => {
|
|
26
|
-
const val = params[i++];
|
|
27
|
-
if (val === null)
|
|
28
|
-
return "NULL";
|
|
29
|
-
if (typeof val === "number")
|
|
30
|
-
return val.toString();
|
|
31
|
-
return `'${String(val).replace(/'/g, "''")}'`;
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
24
|
/**
|
|
35
|
-
* Processes DDL query results and saves metadata.
|
|
25
|
+
* Processes DDL query results and saves metadata to the execution context.
|
|
36
26
|
*
|
|
27
|
+
* @param query - The SQL query string
|
|
28
|
+
* @param params - Query parameters
|
|
29
|
+
* @param method - Execution method ("all" or "execute")
|
|
37
30
|
* @param result - The DDL query result
|
|
38
31
|
* @returns Processed result for Drizzle ORM
|
|
39
32
|
*/
|
|
40
|
-
async function processDDLResult(method, result) {
|
|
33
|
+
async function processDDLResult(query, params, method, result) {
|
|
41
34
|
if (result.metadata) {
|
|
42
|
-
await (0, metadataContextUtils_1.saveMetaDataToContext)(result.metadata);
|
|
35
|
+
await (0, metadataContextUtils_1.saveMetaDataToContext)(query, params, result.metadata);
|
|
43
36
|
}
|
|
44
37
|
if (!result?.rows) {
|
|
45
38
|
return { rows: [] };
|
|
@@ -60,10 +53,10 @@ async function processDDLResult(method, result) {
|
|
|
60
53
|
return { rows: [] };
|
|
61
54
|
}
|
|
62
55
|
/**
|
|
63
|
-
* Processes execute method results (UPDATE, INSERT, DELETE).
|
|
56
|
+
* Processes execute method results (UPDATE, INSERT, DELETE) and saves metadata to the execution context.
|
|
64
57
|
*
|
|
65
|
-
* @param query - The SQL query
|
|
66
|
-
* @param params - Query parameters
|
|
58
|
+
* @param query - The SQL query string
|
|
59
|
+
* @param params - Query parameters (may be undefined)
|
|
67
60
|
* @returns Processed result for Drizzle ORM
|
|
68
61
|
*/
|
|
69
62
|
async function processExecuteMethod(query, params) {
|
|
@@ -72,17 +65,17 @@ async function processExecuteMethod(query, params) {
|
|
|
72
65
|
sqlStatement.bindParams(...params);
|
|
73
66
|
}
|
|
74
67
|
const result = await (0, sqlUtils_1.withTimeout)(sqlStatement.execute(), timeoutMessage, timeoutMs);
|
|
75
|
-
await (0, metadataContextUtils_1.saveMetaDataToContext)(result.metadata);
|
|
68
|
+
await (0, metadataContextUtils_1.saveMetaDataToContext)(query, params ?? [], result.metadata);
|
|
76
69
|
if (!result.rows) {
|
|
77
70
|
return { rows: [[]] };
|
|
78
71
|
}
|
|
79
72
|
return { rows: [result.rows] };
|
|
80
73
|
}
|
|
81
74
|
/**
|
|
82
|
-
* Processes all method results (SELECT queries).
|
|
75
|
+
* Processes all method results (SELECT queries) and saves metadata to the execution context.
|
|
83
76
|
*
|
|
84
|
-
* @param query - The SQL query
|
|
85
|
-
* @param params - Query parameters
|
|
77
|
+
* @param query - The SQL query string
|
|
78
|
+
* @param params - Query parameters (may be undefined)
|
|
86
79
|
* @returns Processed result for Drizzle ORM
|
|
87
80
|
*/
|
|
88
81
|
async function processAllMethod(query, params) {
|
|
@@ -91,7 +84,7 @@ async function processAllMethod(query, params) {
|
|
|
91
84
|
await sqlStatement.bindParams(...params);
|
|
92
85
|
}
|
|
93
86
|
const result = await (0, sqlUtils_1.withTimeout)(sqlStatement.execute(), timeoutMessage, timeoutMs);
|
|
94
|
-
await (0, metadataContextUtils_1.saveMetaDataToContext)(result.metadata);
|
|
87
|
+
await (0, metadataContextUtils_1.saveMetaDataToContext)(query, params ?? [], result.metadata);
|
|
95
88
|
if (!result.rows) {
|
|
96
89
|
return { rows: [] };
|
|
97
90
|
}
|
|
@@ -101,9 +94,10 @@ async function processAllMethod(query, params) {
|
|
|
101
94
|
/**
|
|
102
95
|
* Main Forge SQL driver function for Drizzle ORM integration.
|
|
103
96
|
* Handles DDL operations, execute operations (UPDATE/INSERT/DELETE), and select operations.
|
|
97
|
+
* Automatically saves query execution metadata to the context for performance monitoring.
|
|
104
98
|
*
|
|
105
99
|
* @param query - The SQL query to execute
|
|
106
|
-
* @param params - Query parameters
|
|
100
|
+
* @param params - Query parameters (may be undefined or empty array)
|
|
107
101
|
* @param method - Execution method ("all" for SELECT, "execute" for UPDATE/INSERT/DELETE)
|
|
108
102
|
* @returns Promise with query results compatible with Drizzle ORM
|
|
109
103
|
*
|
|
@@ -125,15 +119,18 @@ const forgeDriver = async (query, params, method) => {
|
|
|
125
119
|
const operationType = await (0, requestTypeContextUtils_1.getOperationType)();
|
|
126
120
|
// Handle DDL operations
|
|
127
121
|
if (operationType === "DDL") {
|
|
128
|
-
const result = await (0, sqlUtils_1.withTimeout)(sql_1.sql
|
|
129
|
-
|
|
122
|
+
const result = await (0, sqlUtils_1.withTimeout)(sql_1.sql
|
|
123
|
+
.prepare(query, sql_2.SQL_API_ENDPOINTS.EXECUTE_DDL)
|
|
124
|
+
.bindParams(params ?? [])
|
|
125
|
+
.execute(), timeoutMessage, timeoutMs);
|
|
126
|
+
return await processDDLResult(query, params ?? [], method, result);
|
|
130
127
|
}
|
|
131
128
|
// Handle execute method (UPDATE, INSERT, DELETE)
|
|
132
129
|
if (method === "execute") {
|
|
133
|
-
return await processExecuteMethod(query, params
|
|
130
|
+
return await processExecuteMethod(query, params);
|
|
134
131
|
}
|
|
135
132
|
// Handle all method (SELECT)
|
|
136
|
-
return await processAllMethod(query, params
|
|
133
|
+
return await processAllMethod(query, params);
|
|
137
134
|
};
|
|
138
135
|
exports.forgeDriver = forgeDriver;
|
|
139
136
|
//# sourceMappingURL=forgeDriver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forgeDriver.js","sourceRoot":"","sources":["../../src/utils/forgeDriver.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"forgeDriver.js","sourceRoot":"","sources":["../../src/utils/forgeDriver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,40 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
2
|
import { ForgeSQLMetadata } from "./forgeDriver";
|
|
3
3
|
import { ForgeSqlOperation } from "../core/ForgeSQLQueryBuilder";
|
|
4
|
+
type Statistic = {
|
|
5
|
+
query: string;
|
|
6
|
+
params: unknown[];
|
|
7
|
+
metadata: ForgeSQLMetadata;
|
|
8
|
+
};
|
|
9
|
+
export type QueryPlanMode = "TopSlowest" | "SummaryTable";
|
|
10
|
+
export type MetadataQueryOptions = {
|
|
11
|
+
mode?: QueryPlanMode;
|
|
12
|
+
summaryTableWindowTime?: number;
|
|
13
|
+
topQueries?: number;
|
|
14
|
+
showSlowestPlans?: boolean;
|
|
15
|
+
normalizeQuery?: boolean;
|
|
16
|
+
};
|
|
4
17
|
export type MetadataQueryContext = {
|
|
5
18
|
totalDbExecutionTime: number;
|
|
6
19
|
totalResponseSize: number;
|
|
7
20
|
beginTime: Date;
|
|
21
|
+
options?: MetadataQueryOptions;
|
|
22
|
+
statistics: Statistic[];
|
|
8
23
|
printQueriesWithPlan: () => Promise<void>;
|
|
9
24
|
forgeSQLORM: ForgeSqlOperation;
|
|
10
25
|
};
|
|
11
26
|
export declare const metadataQueryContext: AsyncLocalStorage<MetadataQueryContext>;
|
|
12
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Saves query metadata to the current context and sets up the printQueriesWithPlan function.
|
|
29
|
+
* @param stringQuery - The SQL query string
|
|
30
|
+
* @param params - Query parameters
|
|
31
|
+
* @param metadata - Query execution metadata
|
|
32
|
+
*/
|
|
33
|
+
export declare function saveMetaDataToContext(stringQuery: string, params: unknown[], metadata: ForgeSQLMetadata): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Gets the latest metadata from the current context.
|
|
36
|
+
* @returns The current metadata context or undefined if not in a context
|
|
37
|
+
*/
|
|
13
38
|
export declare function getLastestMetadata(): Promise<MetadataQueryContext | undefined>;
|
|
39
|
+
export {};
|
|
14
40
|
//# sourceMappingURL=metadataContextUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadataContextUtils.d.ts","sourceRoot":"","sources":["../../src/utils/metadataContextUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"metadataContextUtils.d.ts","sourceRoot":"","sources":["../../src/utils/metadataContextUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAOjE,KAAK,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,EAAE,CAAC;IAAC,QAAQ,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAElF,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,cAAc,CAAC;AAE1D,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,oBAAoB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,WAAW,EAAE,iBAAiB,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,oBAAoB,yCAAgD,CAAC;AAkOlF;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,OAAO,EAAE,EACjB,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,IAAI,CAAC,CAoCf;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAEpF"}
|
|
@@ -5,21 +5,248 @@ exports.saveMetaDataToContext = saveMetaDataToContext;
|
|
|
5
5
|
exports.getLastestMetadata = getLastestMetadata;
|
|
6
6
|
const node_async_hooks_1 = require("node:async_hooks");
|
|
7
7
|
const sqlUtils_1 = require("./sqlUtils");
|
|
8
|
+
const node_sql_parser_1 = require("node-sql-parser");
|
|
9
|
+
const DEFAULT_WINDOW_SIZE = 15 * 1000;
|
|
8
10
|
exports.metadataQueryContext = new node_async_hooks_1.AsyncLocalStorage();
|
|
9
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Creates default options for metadata query context.
|
|
13
|
+
* @returns Default options object
|
|
14
|
+
*/
|
|
15
|
+
function createDefaultOptions() {
|
|
16
|
+
return {
|
|
17
|
+
mode: "TopSlowest",
|
|
18
|
+
topQueries: 1,
|
|
19
|
+
summaryTableWindowTime: DEFAULT_WINDOW_SIZE,
|
|
20
|
+
showSlowestPlans: true,
|
|
21
|
+
normalizeQuery: true,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Merges provided options with defaults, using defaults only for undefined fields.
|
|
26
|
+
* @param options - Optional partial options to merge
|
|
27
|
+
* @returns Complete options object with all fields set
|
|
28
|
+
*/
|
|
29
|
+
function mergeOptionsWithDefaults(options) {
|
|
30
|
+
const defaults = createDefaultOptions();
|
|
31
|
+
return {
|
|
32
|
+
mode: options?.mode ?? defaults.mode,
|
|
33
|
+
topQueries: options?.topQueries ?? defaults.topQueries,
|
|
34
|
+
summaryTableWindowTime: options?.summaryTableWindowTime ?? defaults.summaryTableWindowTime,
|
|
35
|
+
showSlowestPlans: options?.showSlowestPlans ?? defaults.showSlowestPlans,
|
|
36
|
+
normalizeQuery: options?.normalizeQuery ?? defaults.normalizeQuery,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Normalizes SQL query using regex fallback by replacing parameter values with placeholders.
|
|
41
|
+
* Replaces string literals, numeric values, and boolean values with '?' for logging.
|
|
42
|
+
*
|
|
43
|
+
* Note: This is a fallback function used when node-sql-parser fails.
|
|
44
|
+
* It uses simple, safe regex patterns to avoid ReDoS (Regular Expression Denial of Service) vulnerabilities.
|
|
45
|
+
* For proper handling of escaped quotes and complex SQL, use the main normalizeSqlForLogging function
|
|
46
|
+
* which uses node-sql-parser.
|
|
47
|
+
*
|
|
48
|
+
* @param sql - SQL query string to normalize
|
|
49
|
+
* @returns Normalized SQL string with parameters replaced by '?'
|
|
50
|
+
*/
|
|
51
|
+
function normalizeSqlForLoggingRegex(sql) {
|
|
52
|
+
let normalized = sql;
|
|
53
|
+
// Replace string literals (single quotes) - using simple greedy match
|
|
54
|
+
// This avoids catastrophic backtracking by using a simple [^']* pattern
|
|
55
|
+
// Note: This does not handle SQL-style escaped quotes (doubled quotes: '')
|
|
56
|
+
// For proper handling, use the main normalizeSqlForLogging function with node-sql-parser
|
|
57
|
+
normalized = normalized.replace(/'[^']*'/g, "?");
|
|
58
|
+
// Replace string literals (double quotes) - using simple greedy match
|
|
59
|
+
// Same safety considerations as above
|
|
60
|
+
normalized = normalized.replace(/"[^"]*"/g, "?");
|
|
61
|
+
// Replace numeric literals - simplified pattern to avoid backtracking
|
|
62
|
+
// Match: optional minus, digits, optional decimal point and more digits
|
|
63
|
+
// Using word boundaries (\b) for safety - avoids complex lookahead/lookbehind
|
|
64
|
+
normalized = normalized.replace(/\b-?\d+\.?\d*\b/g, "?");
|
|
65
|
+
// Replace boolean literals - safe pattern with word boundaries
|
|
66
|
+
// Simple alternation with word boundaries - no nested quantifiers
|
|
67
|
+
normalized = normalized.replace(/\b(true|false)\b/gi, "?");
|
|
68
|
+
// Replace NULL values (but be careful not to replace in identifiers)
|
|
69
|
+
// Simple word boundary match - safe from backtracking
|
|
70
|
+
normalized = normalized.replace(/\bNULL\b/gi, "?");
|
|
71
|
+
return normalized;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Normalizes SQL query by replacing parameter values with placeholders.
|
|
75
|
+
* First attempts to use node-sql-parser for structure normalization, then applies regex for value replacement.
|
|
76
|
+
* Falls back to regex-based normalization if parsing fails.
|
|
77
|
+
* @param sql - SQL query string to normalize
|
|
78
|
+
* @returns Normalized SQL string with parameters replaced by '?'
|
|
79
|
+
*/
|
|
80
|
+
function normalizeSqlForLogging(sql) {
|
|
81
|
+
try {
|
|
82
|
+
const parser = new node_sql_parser_1.Parser();
|
|
83
|
+
const ast = parser.astify(sql.trim());
|
|
84
|
+
// Convert AST back to SQL (this normalizes structure and formatting)
|
|
85
|
+
const normalized = parser.sqlify(Array.isArray(ast) ? ast[0] : ast);
|
|
86
|
+
// Apply regex-based value replacement to the normalized SQL
|
|
87
|
+
// This handles the case where sqlify might preserve some literal values
|
|
88
|
+
let result = normalizeSqlForLoggingRegex(normalized.trim());
|
|
89
|
+
// Remove backticks added by sqlify for cleaner logging (optional - can be removed if backticks are preferred)
|
|
90
|
+
result = result.replace(/`/g, "");
|
|
91
|
+
return result;
|
|
92
|
+
//eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
// If parsing fails, fall back to regex-based normalization
|
|
96
|
+
return normalizeSqlForLoggingRegex(sql);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Formats row information (estRows, actRows) into a string.
|
|
101
|
+
* @param row - ExplainAnalyzeRow object
|
|
102
|
+
* @returns Formatted row info string or null if no row info available
|
|
103
|
+
*/
|
|
104
|
+
function formatRowInfo(row) {
|
|
105
|
+
const rowInfo = [];
|
|
106
|
+
if (row.estRows)
|
|
107
|
+
rowInfo.push(`estRows:${row.estRows}`);
|
|
108
|
+
if (row.actRows)
|
|
109
|
+
rowInfo.push(`actRows:${row.actRows}`);
|
|
110
|
+
return rowInfo.length > 0 ? `[${rowInfo.join(", ")}]` : null;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Formats resource information (memory, disk) into a string.
|
|
114
|
+
* @param row - ExplainAnalyzeRow object
|
|
115
|
+
* @returns Formatted resource info string or null if no resource info available
|
|
116
|
+
*/
|
|
117
|
+
function formatResourceInfo(row) {
|
|
118
|
+
const resourceInfo = [];
|
|
119
|
+
if (row.memory)
|
|
120
|
+
resourceInfo.push(`memory:${row.memory}`);
|
|
121
|
+
if (row.disk)
|
|
122
|
+
resourceInfo.push(`disk:${row.disk}`);
|
|
123
|
+
return resourceInfo.length > 0 ? `(${resourceInfo.join(", ")})` : null;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Formats a single execution plan row into a string.
|
|
127
|
+
* @param row - ExplainAnalyzeRow object
|
|
128
|
+
* @returns Formatted string representation of the row
|
|
129
|
+
*/
|
|
130
|
+
function formatPlanRow(row) {
|
|
131
|
+
const parts = [];
|
|
132
|
+
if (row.id)
|
|
133
|
+
parts.push(row.id);
|
|
134
|
+
if (row.task)
|
|
135
|
+
parts.push(`task:${row.task}`);
|
|
136
|
+
if (row.operatorInfo)
|
|
137
|
+
parts.push(row.operatorInfo);
|
|
138
|
+
const rowInfo = formatRowInfo(row);
|
|
139
|
+
if (rowInfo)
|
|
140
|
+
parts.push(rowInfo);
|
|
141
|
+
if (row.executionInfo)
|
|
142
|
+
parts.push(`execution info:${row.executionInfo}`);
|
|
143
|
+
const resourceInfo = formatResourceInfo(row);
|
|
144
|
+
if (resourceInfo)
|
|
145
|
+
parts.push(resourceInfo);
|
|
146
|
+
if (row.accessObject)
|
|
147
|
+
parts.push(`access object:${row.accessObject}`);
|
|
148
|
+
return parts.join(" | ");
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Formats an execution plan array into a readable string representation.
|
|
152
|
+
* @param planRows - Array of ExplainAnalyzeRow objects representing the execution plan
|
|
153
|
+
* @returns Formatted string representation of the execution plan
|
|
154
|
+
*/
|
|
155
|
+
function formatExplainPlan(planRows) {
|
|
156
|
+
if (!planRows || planRows.length === 0) {
|
|
157
|
+
return "No execution plan available";
|
|
158
|
+
}
|
|
159
|
+
return planRows.map(formatPlanRow).join("\n");
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Prints query plans using summary tables if mode is SummaryTable and within time window.
|
|
163
|
+
* @param context - The metadata query context
|
|
164
|
+
* @param options - The merged options with defaults
|
|
165
|
+
* @returns Promise that resolves when plans are printed
|
|
166
|
+
*/
|
|
167
|
+
async function printPlansUsingSummaryTables(context, options) {
|
|
168
|
+
const timeDiff = Date.now() - context.beginTime.getTime();
|
|
169
|
+
if (options.mode !== "SummaryTable") {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
if (timeDiff <= options.summaryTableWindowTime) {
|
|
173
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
174
|
+
const summaryTableDiffMs = Date.now() - context.beginTime.getTime();
|
|
175
|
+
await (0, sqlUtils_1.printQueriesWithPlan)(context.forgeSQLORM, summaryTableDiffMs);
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
// eslint-disable-next-line no-console
|
|
179
|
+
console.warn("Summary table window expired — showing query plans instead");
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Prints query plans for the top slowest queries.
|
|
184
|
+
* @param context - The metadata query context
|
|
185
|
+
* @param options - The merged options with defaults
|
|
186
|
+
* @returns Promise that resolves when plans are printed
|
|
187
|
+
*/
|
|
188
|
+
async function printTopQueriesPlans(context, options) {
|
|
189
|
+
const topQueries = context.statistics
|
|
190
|
+
.toSorted((a, b) => b.metadata.dbExecutionTime - a.metadata.dbExecutionTime)
|
|
191
|
+
.slice(0, options.topQueries);
|
|
192
|
+
for (const query of topQueries) {
|
|
193
|
+
const normalizedQuery = options.normalizeQuery
|
|
194
|
+
? normalizeSqlForLogging(query.query)
|
|
195
|
+
: query.query;
|
|
196
|
+
if (options.showSlowestPlans) {
|
|
197
|
+
const explainAnalyzeRows = await context.forgeSQLORM
|
|
198
|
+
.analyze()
|
|
199
|
+
.explainAnalyzeRaw(query.query, query.params);
|
|
200
|
+
const formattedPlan = formatExplainPlan(explainAnalyzeRows);
|
|
201
|
+
// eslint-disable-next-line no-console
|
|
202
|
+
console.warn(`SQL: ${normalizedQuery} | Time: ${query.metadata.dbExecutionTime} ms\n Plan:\n${formattedPlan}`);
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
// eslint-disable-next-line no-console
|
|
206
|
+
console.warn(`SQL: ${normalizedQuery} | Time: ${query.metadata.dbExecutionTime} ms`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Saves query metadata to the current context and sets up the printQueriesWithPlan function.
|
|
212
|
+
* @param stringQuery - The SQL query string
|
|
213
|
+
* @param params - Query parameters
|
|
214
|
+
* @param metadata - Query execution metadata
|
|
215
|
+
*/
|
|
216
|
+
async function saveMetaDataToContext(stringQuery, params, metadata) {
|
|
10
217
|
const context = exports.metadataQueryContext.getStore();
|
|
11
|
-
if (context) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
218
|
+
if (!context) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
// Initialize statistics array if needed
|
|
222
|
+
if (!context.statistics) {
|
|
223
|
+
context.statistics = [];
|
|
224
|
+
}
|
|
225
|
+
// Merge options with defaults
|
|
226
|
+
context.options = mergeOptionsWithDefaults(context.options);
|
|
227
|
+
// Add query statistics
|
|
228
|
+
context.statistics.push({ query: stringQuery, params, metadata });
|
|
229
|
+
// Set up printQueriesWithPlan function
|
|
230
|
+
context.printQueriesWithPlan = async () => {
|
|
231
|
+
const options = mergeOptionsWithDefaults(context.options);
|
|
232
|
+
// Try to use summary tables first if enabled
|
|
233
|
+
const usedSummaryTables = await printPlansUsingSummaryTables(context, options);
|
|
234
|
+
if (usedSummaryTables) {
|
|
235
|
+
return;
|
|
19
236
|
}
|
|
20
|
-
//
|
|
237
|
+
// Fall back to printing top queries plans
|
|
238
|
+
await printTopQueriesPlans(context, options);
|
|
239
|
+
};
|
|
240
|
+
// Update aggregated metrics
|
|
241
|
+
if (metadata) {
|
|
242
|
+
context.totalResponseSize += metadata.responseSize;
|
|
243
|
+
context.totalDbExecutionTime += metadata.dbExecutionTime;
|
|
21
244
|
}
|
|
22
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* Gets the latest metadata from the current context.
|
|
248
|
+
* @returns The current metadata context or undefined if not in a context
|
|
249
|
+
*/
|
|
23
250
|
async function getLastestMetadata() {
|
|
24
251
|
return exports.metadataQueryContext.getStore();
|
|
25
252
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadataContextUtils.js","sourceRoot":"","sources":["../../src/utils/metadataContextUtils.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"metadataContextUtils.js","sourceRoot":"","sources":["../../src/utils/metadataContextUtils.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/sqlUtils.d.ts
CHANGED
|
@@ -42,6 +42,7 @@ export declare const parseDateTime: (value: string | Date, format: string) => Da
|
|
|
42
42
|
* Helper function to validate and format a date-like value using Luxon DateTime.
|
|
43
43
|
* @param value - Date object, ISO/RFC2822/SQL/HTTP string, or timestamp (number|string).
|
|
44
44
|
* @param format - DateTime format string (Luxon format tokens).
|
|
45
|
+
* @param isTimeStamp - Whether to validate timestamp range
|
|
45
46
|
* @returns Formatted date string.
|
|
46
47
|
* @throws Error if value cannot be parsed as a valid date.
|
|
47
48
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlUtils.d.ts","sourceRoot":"","sources":["../../src/utils/sqlUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EAYV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAqB,MAAM,8BAA8B,CAAC;AAEhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAC;AAIpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACnC,8BAA8B;IAC9B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,yCAAyC;IACzC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,oCAAoC;IACpC,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,oCAAoC;IACpC,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,0CAA0C;IAC1C,iBAAiB,EAAE,uBAAuB,EAAE,CAAC;IAC7C,kCAAkC;IAClC,MAAM,EAAE,GAAG,EAAE,CAAC;CACf;AAUD;;;;;GAKG;AAEH,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,GAAG,IAAI,EAAE,QAAQ,MAAM,KAAG,IA+BpE,CAAC;
|
|
1
|
+
{"version":3,"file":"sqlUtils.d.ts","sourceRoot":"","sources":["../../src/utils/sqlUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EAYV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAqB,MAAM,8BAA8B,CAAC;AAEhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAC;AAIpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACnC,8BAA8B;IAC9B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,yCAAyC;IACzC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,oCAAoC;IACpC,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,oCAAoC;IACpC,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,0CAA0C;IAC1C,iBAAiB,EAAE,uBAAuB,EAAE,CAAC;IAC7C,kCAAkC;IAClC,MAAM,EAAE,GAAG,EAAE,CAAC;CACf;AAUD;;;;;GAKG;AAEH,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,GAAG,IAAI,EAAE,QAAQ,MAAM,KAAG,IA+BpE,CAAC;AAmEF;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAC7B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,OAAO,GACnB,MAAM,CAQR;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,aAAa,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CA6BvF;AAyMD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,YAAY,CAwBnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,CAAC,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC9C,MAAM,EAAE,CAkBV;AAED,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAuBhD,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,GAAG,EACf,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,cAAc,GACvB,GAAG,CAmBL;AACD,wBAAgB,wBAAwB,CAAC,UAAU,SAAS,cAAc,EACxE,MAAM,EAAE,UAAU,GACjB;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAA;CAAE,CAUtD;AAwGD,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,UAAU,EACpD,IAAI,EAAE,CAAC,EAAE,EACT,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAClC,CAAC,EAAE,CAUL;AAoCD,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAK/D;AAED,wBAAgB,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,iBAAiB,EAC9B,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,iBA6DjB;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,iBAAiB,EAC9B,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,qBAqDjB;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,CAAC,CAgBZ;AAED,wBAAgB,YAAY,CAC1B,SAAS,SAAS,cAAc,EAChC,QAAQ,SAAS,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,EAC7D,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,CAI5D"}
|