forge-sql-orm 2.1.12 → 2.1.13
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 +662 -548
- package/dist/core/ForgeSQLAnalyseOperations.d.ts.map +1 -1
- package/dist/core/ForgeSQLAnalyseOperations.js +257 -0
- package/dist/core/ForgeSQLAnalyseOperations.js.map +1 -0
- package/dist/core/ForgeSQLCacheOperations.js +172 -0
- package/dist/core/ForgeSQLCacheOperations.js.map +1 -0
- package/dist/core/ForgeSQLCrudOperations.js +349 -0
- package/dist/core/ForgeSQLCrudOperations.js.map +1 -0
- package/dist/core/ForgeSQLORM.js +1191 -0
- package/dist/core/ForgeSQLORM.js.map +1 -0
- package/dist/core/ForgeSQLQueryBuilder.js +77 -0
- package/dist/core/ForgeSQLQueryBuilder.js.map +1 -0
- package/dist/core/ForgeSQLSelectOperations.js +81 -0
- package/dist/core/ForgeSQLSelectOperations.js.map +1 -0
- package/dist/core/SystemTables.js +258 -0
- package/dist/core/SystemTables.js.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/drizzle/extensions/additionalActions.d.ts.map +1 -1
- package/dist/lib/drizzle/extensions/additionalActions.js +527 -0
- package/dist/lib/drizzle/extensions/additionalActions.js.map +1 -0
- package/dist/utils/cacheContextUtils.d.ts.map +1 -1
- package/dist/utils/cacheContextUtils.js +198 -0
- package/dist/utils/cacheContextUtils.js.map +1 -0
- package/dist/utils/cacheUtils.d.ts.map +1 -1
- package/dist/utils/cacheUtils.js +383 -0
- package/dist/utils/cacheUtils.js.map +1 -0
- package/dist/utils/forgeDriver.d.ts.map +1 -1
- package/dist/utils/forgeDriver.js +139 -0
- package/dist/utils/forgeDriver.js.map +1 -0
- package/dist/utils/forgeDriverProxy.js +68 -0
- package/dist/utils/forgeDriverProxy.js.map +1 -0
- package/dist/utils/metadataContextUtils.js +28 -0
- package/dist/utils/metadataContextUtils.js.map +1 -0
- package/dist/utils/requestTypeContextUtils.js +10 -0
- package/dist/utils/requestTypeContextUtils.js.map +1 -0
- package/dist/utils/sqlHints.js +52 -0
- package/dist/utils/sqlHints.js.map +1 -0
- package/dist/utils/sqlUtils.d.ts.map +1 -1
- package/dist/utils/sqlUtils.js +590 -0
- package/dist/utils/sqlUtils.js.map +1 -0
- package/dist/webtriggers/applyMigrationsWebTrigger.js +77 -0
- package/dist/webtriggers/applyMigrationsWebTrigger.js.map +1 -0
- package/dist/webtriggers/clearCacheSchedulerTrigger.js +83 -0
- package/dist/webtriggers/clearCacheSchedulerTrigger.js.map +1 -0
- package/dist/webtriggers/dropMigrationWebTrigger.js +54 -0
- package/dist/webtriggers/dropMigrationWebTrigger.js.map +1 -0
- package/dist/webtriggers/dropTablesMigrationWebTrigger.js +54 -0
- package/dist/webtriggers/dropTablesMigrationWebTrigger.js.map +1 -0
- package/dist/webtriggers/fetchSchemaWebTrigger.js +82 -0
- package/dist/webtriggers/fetchSchemaWebTrigger.js.map +1 -0
- package/dist/webtriggers/index.js +40 -0
- package/dist/webtriggers/index.js.map +1 -0
- package/dist/webtriggers/slowQuerySchedulerTrigger.js +80 -0
- package/dist/webtriggers/slowQuerySchedulerTrigger.js.map +1 -0
- package/package.json +28 -23
- package/src/core/ForgeSQLAnalyseOperations.ts +3 -2
- package/src/lib/drizzle/extensions/additionalActions.ts +11 -0
- package/src/utils/cacheContextUtils.ts +9 -6
- package/src/utils/cacheUtils.ts +6 -4
- package/src/utils/forgeDriver.ts +3 -7
- package/src/utils/sqlUtils.ts +33 -34
- package/dist/ForgeSQLORM.js +0 -3922
- package/dist/ForgeSQLORM.js.map +0 -1
- package/dist/ForgeSQLORM.mjs +0 -3905
- package/dist/ForgeSQLORM.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ForgeSQLAnalyseOperations.d.ts","sourceRoot":"","sources":["../../src/core/ForgeSQLAnalyseOperations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EACL,4BAA4B,EAC5B,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAoBvD;;GAEG;AACH,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,6BAA6B,EAAE,MAAM,CAAC;IACtC,wBAAwB,EAAE,MAAM,CAAC;IACjC,uBAAuB,EAAE,MAAM,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gCAAgC,EAAE,MAAM,CAAC;IACzC,gCAAgC,EAAE,MAAM,CAAC;IACzC,6BAA6B,EAAE,MAAM,CAAC;IACtC,6BAA6B,EAAE,MAAM,CAAC;IACtC,iCAAiC,EAAE,MAAM,CAAC;IAC1C,iCAAiC,EAAE,MAAM,CAAC;IAC1C,4BAA4B,EAAE,MAAM,CAAC;IACrC,4BAA4B,EAAE,MAAM,CAAC;IACrC,2BAA2B,EAAE,MAAM,CAAC;IACpC,2BAA2B,EAAE,MAAM,CAAC;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;IAChC,uBAAuB,EAAE,MAAM,CAAC;IAChC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,yBAAyB,EAAE,MAAM,CAAC;IAClC,yBAAyB,EAAE,MAAM,CAAC;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,kCAAkC,EAAE,MAAM,CAAC;CAC5C;AAED;;;GAGG;AACH,qBAAa,wBAAyB,YAAW,qBAAqB;IACpE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoB;IAEpD;;;OAGG;gBACS,eAAe,EAAE,iBAAiB;IAK9C;;;;;OAKG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAiBpF;;;;OAIG;IACG,OAAO,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,KAAK,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAK1E;;;;;OAKG;IACG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAiB3F;;;;OAIG;IACG,cAAc,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,KAAK,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAKjF;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,EAAE;
|
|
1
|
+
{"version":3,"file":"ForgeSQLAnalyseOperations.d.ts","sourceRoot":"","sources":["../../src/core/ForgeSQLAnalyseOperations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ForgeSQLAnalyseOperation = void 0;
|
|
4
|
+
const table_1 = require("drizzle-orm/table");
|
|
5
|
+
const luxon_1 = require("luxon");
|
|
6
|
+
/**
|
|
7
|
+
* Class implementing SQL analysis operations for ForgeSQL ORM.
|
|
8
|
+
* Provides methods for analyzing query performance, execution plans, and slow queries.
|
|
9
|
+
*/
|
|
10
|
+
class ForgeSQLAnalyseOperation {
|
|
11
|
+
forgeOperations;
|
|
12
|
+
/**
|
|
13
|
+
* Creates a new instance of ForgeSQLAnalizeOperation.
|
|
14
|
+
* @param {ForgeSqlOperation} forgeOperations - The ForgeSQL operations instance
|
|
15
|
+
*/
|
|
16
|
+
constructor(forgeOperations) {
|
|
17
|
+
this.forgeOperations = forgeOperations;
|
|
18
|
+
this.mapToCamelCaseClusterStatement = this.mapToCamelCaseClusterStatement.bind(this);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Executes EXPLAIN on a raw SQL query.
|
|
22
|
+
* @param {string} query - The SQL query to analyze
|
|
23
|
+
* @param {unknown[]} bindParams - The query parameters
|
|
24
|
+
* @returns {Promise<ExplainAnalyzeRow[]>} The execution plan analysis results
|
|
25
|
+
*/
|
|
26
|
+
async explainRaw(query, bindParams) {
|
|
27
|
+
const results = await this.forgeOperations
|
|
28
|
+
.fetch()
|
|
29
|
+
.executeRawSQL(`EXPLAIN ${query}`, bindParams);
|
|
30
|
+
return results.map((row) => ({
|
|
31
|
+
id: row.id,
|
|
32
|
+
estRows: row.estRows,
|
|
33
|
+
actRows: row.actRows,
|
|
34
|
+
task: row.task,
|
|
35
|
+
accessObject: row["access object"],
|
|
36
|
+
executionInfo: row["execution info"],
|
|
37
|
+
operatorInfo: row["operator info"],
|
|
38
|
+
memory: row.memory,
|
|
39
|
+
disk: row.disk,
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Executes EXPLAIN on a Drizzle query.
|
|
44
|
+
* @param {{ toSQL: () => Query }} query - The Drizzle query to analyze
|
|
45
|
+
* @returns {Promise<ExplainAnalyzeRow[]>} The execution plan analysis results
|
|
46
|
+
*/
|
|
47
|
+
async explain(query) {
|
|
48
|
+
const { sql, params } = query.toSQL();
|
|
49
|
+
return this.explainRaw(sql, params);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Executes EXPLAIN ANALYZE on a raw SQL query.
|
|
53
|
+
* @param {string} query - The SQL query to analyze
|
|
54
|
+
* @param {unknown[]} bindParams - The query parameters
|
|
55
|
+
* @returns {Promise<ExplainAnalyzeRow[]>} The execution plan analysis results
|
|
56
|
+
*/
|
|
57
|
+
async explainAnalyzeRaw(query, bindParams) {
|
|
58
|
+
const results = await this.forgeOperations
|
|
59
|
+
.fetch()
|
|
60
|
+
.executeRawSQL(`EXPLAIN ANALYZE ${query}`, bindParams);
|
|
61
|
+
return results.map((row) => ({
|
|
62
|
+
id: row.id,
|
|
63
|
+
estRows: row.estRows,
|
|
64
|
+
actRows: row.actRows,
|
|
65
|
+
task: row.task,
|
|
66
|
+
accessObject: row["access object"],
|
|
67
|
+
executionInfo: row["execution info"],
|
|
68
|
+
operatorInfo: row["operator info"],
|
|
69
|
+
memory: row.memory,
|
|
70
|
+
disk: row.disk,
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Executes EXPLAIN ANALYZE on a Drizzle query.
|
|
75
|
+
* @param {{ toSQL: () => Query }} query - The Drizzle query to analyze
|
|
76
|
+
* @returns {Promise<ExplainAnalyzeRow[]>} The execution plan analysis results
|
|
77
|
+
*/
|
|
78
|
+
async explainAnalyze(query) {
|
|
79
|
+
const { sql, params } = query.toSQL();
|
|
80
|
+
return this.explainAnalyzeRaw(sql, params);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Decodes a query execution plan from its string representation.
|
|
84
|
+
* @param {string} input - The raw execution plan string
|
|
85
|
+
* @returns {ExplainAnalyzeRow[]} The decoded execution plan rows
|
|
86
|
+
*/
|
|
87
|
+
decodedPlan(input) {
|
|
88
|
+
if (!input) {
|
|
89
|
+
return [];
|
|
90
|
+
}
|
|
91
|
+
const lines = input.trim().split("\n");
|
|
92
|
+
if (lines.length < 2)
|
|
93
|
+
return [];
|
|
94
|
+
const headersRaw = lines[0]
|
|
95
|
+
.split("\t")
|
|
96
|
+
.map((h) => h.trim())
|
|
97
|
+
.filter(Boolean);
|
|
98
|
+
const headers = headersRaw.map((h) => {
|
|
99
|
+
return h
|
|
100
|
+
.replace(/\s+/g, " ")
|
|
101
|
+
.replace(/[-\s]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ""))
|
|
102
|
+
.replace(/^./, (s) => s.toLowerCase());
|
|
103
|
+
});
|
|
104
|
+
return lines.slice(1).map((line) => {
|
|
105
|
+
const values = line
|
|
106
|
+
.split("\t")
|
|
107
|
+
.map((s) => s.trim())
|
|
108
|
+
.filter(Boolean);
|
|
109
|
+
const row = {};
|
|
110
|
+
for (const key of headers) {
|
|
111
|
+
const i = headers.indexOf(key);
|
|
112
|
+
row[key] = values[i] ?? "";
|
|
113
|
+
}
|
|
114
|
+
return row;
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Normalizes a raw slow query row into a more structured format.
|
|
119
|
+
* @param {SlowQueryRaw} row - The raw slow query data
|
|
120
|
+
* @returns {SlowQueryNormalized} The normalized slow query data
|
|
121
|
+
*/
|
|
122
|
+
normalizeSlowQuery(row) {
|
|
123
|
+
return {
|
|
124
|
+
time: row.Time,
|
|
125
|
+
txnStartTs: row.Txn_start_ts,
|
|
126
|
+
user: row.User,
|
|
127
|
+
host: row.Host,
|
|
128
|
+
connId: row.Conn_ID,
|
|
129
|
+
db: row.DB,
|
|
130
|
+
query: row.Query,
|
|
131
|
+
digest: row.Digest,
|
|
132
|
+
queryTime: row.Query_time,
|
|
133
|
+
compileTime: row.Compile_time,
|
|
134
|
+
optimizeTime: row.Optimize_time,
|
|
135
|
+
processTime: row.Process_time,
|
|
136
|
+
waitTime: row.Wait_time,
|
|
137
|
+
parseTime: row.Parse_time,
|
|
138
|
+
rewriteTime: row.Rewrite_time,
|
|
139
|
+
copTime: row.Cop_time,
|
|
140
|
+
copProcAvg: row.Cop_proc_avg,
|
|
141
|
+
copProcMax: row.Cop_proc_max,
|
|
142
|
+
copProcP90: row.Cop_proc_p90,
|
|
143
|
+
copProcAddr: row.Cop_proc_addr,
|
|
144
|
+
copWaitAvg: row.Cop_wait_avg,
|
|
145
|
+
copWaitMax: row.Cop_wait_max,
|
|
146
|
+
copWaitP90: row.Cop_wait_p90,
|
|
147
|
+
copWaitAddr: row.Cop_wait_addr,
|
|
148
|
+
memMax: row.Mem_max,
|
|
149
|
+
diskMax: row.Disk_max,
|
|
150
|
+
totalKeys: row.Total_keys,
|
|
151
|
+
processKeys: row.Process_keys,
|
|
152
|
+
requestCount: row.Request_count,
|
|
153
|
+
kvTotal: row.KV_total,
|
|
154
|
+
pdTotal: row.PD_total,
|
|
155
|
+
resultRows: row.Result_rows,
|
|
156
|
+
rocksdbBlockCacheHitCount: row.Rocksdb_block_cache_hit_count,
|
|
157
|
+
rocksdbBlockReadCount: row.Rocksdb_block_read_count,
|
|
158
|
+
rocksdbBlockReadByte: row.Rocksdb_block_read_byte,
|
|
159
|
+
plan: row.Plan,
|
|
160
|
+
binaryPlan: row.Binary_plan,
|
|
161
|
+
planDigest: row.Plan_digest,
|
|
162
|
+
parsedPlan: this.decodedPlan(row.Plan),
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Builds a SQL query for retrieving cluster statement history.
|
|
167
|
+
* @param {string[]} tables - The tables to analyze
|
|
168
|
+
* @param {Date} [from] - The start date for the analysis
|
|
169
|
+
* @param {Date} [to] - The end date for the analysis
|
|
170
|
+
* @returns {string} The SQL query for cluster statement history
|
|
171
|
+
*/
|
|
172
|
+
buildClusterStatementQuery(tables, from, to) {
|
|
173
|
+
const formatDateTime = (date) => luxon_1.DateTime.fromJSDate(date).toFormat("yyyy-LL-dd'T'HH:mm:ss.SSS");
|
|
174
|
+
const tableConditions = tables
|
|
175
|
+
.map((table) => `TABLE_NAMES LIKE CONCAT(SCHEMA_NAME, '.', '%', '${table}', '%')`)
|
|
176
|
+
.join(" OR ");
|
|
177
|
+
const timeConditions = [];
|
|
178
|
+
if (from) {
|
|
179
|
+
timeConditions.push(`SUMMARY_BEGIN_TIME >= '${formatDateTime(from)}'`);
|
|
180
|
+
}
|
|
181
|
+
if (to) {
|
|
182
|
+
timeConditions.push(`SUMMARY_END_TIME <= '${formatDateTime(to)}'`);
|
|
183
|
+
}
|
|
184
|
+
let whereClauses;
|
|
185
|
+
if (tableConditions?.length) {
|
|
186
|
+
whereClauses = [tableConditions ? `(${tableConditions})` : "", ...timeConditions];
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
whereClauses = timeConditions;
|
|
190
|
+
}
|
|
191
|
+
return `
|
|
192
|
+
SELECT *
|
|
193
|
+
FROM (
|
|
194
|
+
SELECT * FROM INFORMATION_SCHEMA.CLUSTER_STATEMENTS_SUMMARY
|
|
195
|
+
UNION ALL
|
|
196
|
+
SELECT * FROM INFORMATION_SCHEMA.CLUSTER_STATEMENTS_SUMMARY_HISTORY
|
|
197
|
+
) AS combined
|
|
198
|
+
${whereClauses?.length > 0 ? `WHERE ${whereClauses.join(" AND ")}` : ""}
|
|
199
|
+
`;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Retrieves and analyzes slow queries from the database.
|
|
203
|
+
* @returns {Promise<SlowQueryNormalized[]>} The normalized slow query data
|
|
204
|
+
*/
|
|
205
|
+
// CLUSTER_SLOW_QUERY STATISTICS
|
|
206
|
+
async analyzeSlowQueries() {
|
|
207
|
+
const results = await this.forgeOperations.fetch().executeRawSQL(`
|
|
208
|
+
SELECT *
|
|
209
|
+
FROM information_schema.slow_query
|
|
210
|
+
ORDER BY time DESC
|
|
211
|
+
`);
|
|
212
|
+
return results.map((row) => this.normalizeSlowQuery(row));
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Converts a cluster statement row to camelCase format.
|
|
216
|
+
* @param {Record<string, any>} input - The input row data
|
|
217
|
+
* @returns {ClusterStatementRowCamelCase} The converted row data
|
|
218
|
+
*/
|
|
219
|
+
mapToCamelCaseClusterStatement(input) {
|
|
220
|
+
if (!input) {
|
|
221
|
+
return {};
|
|
222
|
+
}
|
|
223
|
+
const result = {};
|
|
224
|
+
result.parsedPlan = this.decodedPlan(input["PLAN"] ?? "");
|
|
225
|
+
for (const key in input) {
|
|
226
|
+
const camelKey = key.toLowerCase().replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
227
|
+
result[camelKey] = input[key];
|
|
228
|
+
}
|
|
229
|
+
return result;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Analyzes query history for specific tables using raw table names.
|
|
233
|
+
* @param {string[]} tables - The table names to analyze
|
|
234
|
+
* @param {Date} [fromDate] - The start date for the analysis
|
|
235
|
+
* @param {Date} [toDate] - The end date for the analysis
|
|
236
|
+
* @returns {Promise<ClusterStatementRowCamelCase[]>} The analyzed query history
|
|
237
|
+
*/
|
|
238
|
+
async analyzeQueriesHistoryRaw(tables, fromDate, toDate) {
|
|
239
|
+
const results = await this.forgeOperations
|
|
240
|
+
.fetch()
|
|
241
|
+
.executeRawSQL(this.buildClusterStatementQuery(tables ?? [], fromDate, toDate));
|
|
242
|
+
return results.map((r) => this.mapToCamelCaseClusterStatement(r));
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Analyzes query history for specific tables using Drizzle table objects.
|
|
246
|
+
* @param {AnyMySqlTable[]} tables - The Drizzle table objects to analyze
|
|
247
|
+
* @param {Date} [fromDate] - The start date for the analysis
|
|
248
|
+
* @param {Date} [toDate] - The end date for the analysis
|
|
249
|
+
* @returns {Promise<ClusterStatementRowCamelCase[]>} The analyzed query history
|
|
250
|
+
*/
|
|
251
|
+
async analyzeQueriesHistory(tables, fromDate, toDate) {
|
|
252
|
+
const tableNames = tables?.map((table) => (0, table_1.getTableName)(table)) ?? [];
|
|
253
|
+
return this.analyzeQueriesHistoryRaw(tableNames, fromDate, toDate);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
exports.ForgeSQLAnalyseOperation = ForgeSQLAnalyseOperation;
|
|
257
|
+
//# sourceMappingURL=ForgeSQLAnalyseOperations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ForgeSQLAnalyseOperations.js","sourceRoot":"","sources":["../../src/core/ForgeSQLAnalyseOperations.ts"],"names":[],"mappings":";;;AASA,6CAAiD;AACjD,iCAAiC;AA+KjC;;;GAGG;AACH,MAAa,wBAAwB;IAClB,eAAe,CAAoB;IAEpD;;;OAGG;IACH,YAAY,eAAkC;QAC5C,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvF,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,UAAqB;QACnD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe;aACvC,KAAK,EAAE;aACP,aAAa,CAAiB,WAAW,KAAK,EAAE,EAAE,UAA2B,CAAC,CAAC;QAClF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3B,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,YAAY,EAAE,GAAG,CAAC,eAAe,CAAC;YAClC,aAAa,EAAE,GAAG,CAAC,gBAAgB,CAAC;YACpC,YAAY,EAAE,GAAG,CAAC,eAAe,CAAC;YAClC,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,IAAI,EAAE,GAAG,CAAC,IAAI;SACf,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,KAA6B;QACzC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,iBAAiB,CAAC,KAAa,EAAE,UAAqB;QAC1D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe;aACvC,KAAK,EAAE;aACP,aAAa,CAAiB,mBAAmB,KAAK,EAAE,EAAE,UAA2B,CAAC,CAAC;QAC1F,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3B,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,YAAY,EAAE,GAAG,CAAC,eAAe,CAAC;YAClC,aAAa,EAAE,GAAG,CAAC,gBAAgB,CAAC;YACpC,YAAY,EAAE,GAAG,CAAC,eAAe,CAAC;YAClC,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,IAAI,EAAE,GAAG,CAAC,IAAI;SACf,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,cAAc,CAAC,KAA6B;QAChD,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,KAAa;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QAEhC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC;aACxB,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC,CAAC;QACnB,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACnC,OAAO,CAAC;iBACL,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;iBACpB,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBAC5D,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,IAAI;iBAChB,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBACpB,MAAM,CAAC,OAAO,CAAC,CAAC;YACnB,MAAM,GAAG,GAA2B,EAAE,CAAC;YACvC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC/B,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7B,CAAC;YACD,OAAO,GAAmC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,GAAiB;QAClC,OAAO;YACL,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,UAAU,EAAE,GAAG,CAAC,YAAY;YAC5B,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,MAAM,EAAE,GAAG,CAAC,OAAO;YACnB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,WAAW,EAAE,GAAG,CAAC,YAAY;YAC7B,YAAY,EAAE,GAAG,CAAC,aAAa;YAC/B,WAAW,EAAE,GAAG,CAAC,YAAY;YAC7B,QAAQ,EAAE,GAAG,CAAC,SAAS;YACvB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,WAAW,EAAE,GAAG,CAAC,YAAY;YAC7B,OAAO,EAAE,GAAG,CAAC,QAAQ;YACrB,UAAU,EAAE,GAAG,CAAC,YAAY;YAC5B,UAAU,EAAE,GAAG,CAAC,YAAY;YAC5B,UAAU,EAAE,GAAG,CAAC,YAAY;YAC5B,WAAW,EAAE,GAAG,CAAC,aAAa;YAC9B,UAAU,EAAE,GAAG,CAAC,YAAY;YAC5B,UAAU,EAAE,GAAG,CAAC,YAAY;YAC5B,UAAU,EAAE,GAAG,CAAC,YAAY;YAC5B,WAAW,EAAE,GAAG,CAAC,aAAa;YAC9B,MAAM,EAAE,GAAG,CAAC,OAAO;YACnB,OAAO,EAAE,GAAG,CAAC,QAAQ;YACrB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,WAAW,EAAE,GAAG,CAAC,YAAY;YAC7B,YAAY,EAAE,GAAG,CAAC,aAAa;YAC/B,OAAO,EAAE,GAAG,CAAC,QAAQ;YACrB,OAAO,EAAE,GAAG,CAAC,QAAQ;YACrB,UAAU,EAAE,GAAG,CAAC,WAAW;YAC3B,yBAAyB,EAAE,GAAG,CAAC,6BAA6B;YAC5D,qBAAqB,EAAE,GAAG,CAAC,wBAAwB;YACnD,oBAAoB,EAAE,GAAG,CAAC,uBAAuB;YACjD,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,UAAU,EAAE,GAAG,CAAC,WAAW;YAC3B,UAAU,EAAE,GAAG,CAAC,WAAW;YAC3B,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;SACvC,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,0BAA0B,CAAC,MAAgB,EAAE,IAAW,EAAE,EAAS;QACjE,MAAM,cAAc,GAAG,CAAC,IAAU,EAAU,EAAE,CAC5C,gBAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC;QAElE,MAAM,eAAe,GAAG,MAAM;aAC3B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mDAAmD,KAAK,SAAS,CAAC;aACjF,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,IAAI,IAAI,EAAE,CAAC;YACT,cAAc,CAAC,IAAI,CAAC,0BAA0B,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,EAAE,EAAE,CAAC;YACP,cAAc,CAAC,IAAI,CAAC,wBAAwB,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,YAAY,CAAC;QACjB,IAAI,eAAe,EAAE,MAAM,EAAE,CAAC;YAC5B,YAAY,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,eAAe,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,cAAc,CAAC,CAAC;QACpF,CAAC;aAAM,CAAC;YACN,YAAY,GAAG,cAAc,CAAC;QAChC,CAAC;QAED,OAAO;;;;;;;QAOH,YAAY,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;KACxE,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,iCAAiC;IACjC,KAAK,CAAC,kBAAkB;QACtB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,aAAa,CAAe;;;;KAI9E,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACH,8BAA8B,CAAC,KAA0B;QACvD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAkC,CAAC;QAC5C,CAAC;QAED,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1D,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7F,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,MAAsC,CAAC;IAChD,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,wBAAwB,CAC5B,MAAgB,EAChB,QAAe,EACf,MAAa;QAEb,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe;aACvC,KAAK,EAAE;aACP,aAAa,CACZ,IAAI,CAAC,0BAA0B,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAChE,CAAC;QACJ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,qBAAqB,CACzB,MAAuB,EACvB,QAAe,EACf,MAAa;QAEb,MAAM,UAAU,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,oBAAY,EAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrE,CAAC;CACF;AAlRD,4DAkRC"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ForgeSQLCacheOperations = void 0;
|
|
4
|
+
const cacheUtils_1 = require("../utils/cacheUtils");
|
|
5
|
+
const table_1 = require("drizzle-orm/table");
|
|
6
|
+
/**
|
|
7
|
+
* Implementation of cache operations for ForgeSQL ORM.
|
|
8
|
+
* Provides methods for cacheable database operations with automatic cache management.
|
|
9
|
+
*
|
|
10
|
+
* ⚠️ **IMPORTANT**: All modification methods in this class use optimistic locking/versioning
|
|
11
|
+
* through `modifyWithVersioning()` internally. This ensures data consistency and prevents
|
|
12
|
+
* concurrent modification conflicts.
|
|
13
|
+
*/
|
|
14
|
+
class ForgeSQLCacheOperations {
|
|
15
|
+
options;
|
|
16
|
+
forgeOperations;
|
|
17
|
+
/**
|
|
18
|
+
* Creates a new instance of ForgeSQLCacheOperations.
|
|
19
|
+
*
|
|
20
|
+
* @param options - Configuration options for the ORM
|
|
21
|
+
* @param forgeOperations - The ForgeSQL operations instance
|
|
22
|
+
*/
|
|
23
|
+
constructor(options, forgeOperations) {
|
|
24
|
+
this.options = options;
|
|
25
|
+
this.forgeOperations = forgeOperations;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Evicts cache for multiple tables using Drizzle table objects.
|
|
29
|
+
*
|
|
30
|
+
* @param tables - Array of Drizzle table objects to clear cache for
|
|
31
|
+
* @returns Promise that resolves when cache eviction is complete
|
|
32
|
+
* @throws Error if cacheEntityName is not configured
|
|
33
|
+
*/
|
|
34
|
+
async evictCacheEntities(tables) {
|
|
35
|
+
if (!this.options.cacheEntityName) {
|
|
36
|
+
throw new Error("cacheEntityName is not configured");
|
|
37
|
+
}
|
|
38
|
+
await this.evictCache(tables.map((t) => (0, table_1.getTableName)(t)));
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Evicts cache for multiple tables by their names.
|
|
42
|
+
*
|
|
43
|
+
* @param tables - Array of table names to clear cache for
|
|
44
|
+
* @returns Promise that resolves when cache eviction is complete
|
|
45
|
+
* @throws Error if cacheEntityName is not configured
|
|
46
|
+
*/
|
|
47
|
+
async evictCache(tables) {
|
|
48
|
+
if (!this.options.cacheEntityName) {
|
|
49
|
+
throw new Error("cacheEntityName is not configured");
|
|
50
|
+
}
|
|
51
|
+
await (0, cacheUtils_1.clearTablesCache)(tables, this.options);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Inserts records with optimistic locking/versioning and automatically evicts cache.
|
|
55
|
+
*
|
|
56
|
+
* This method uses `modifyWithVersioning().insert()` internally, providing:
|
|
57
|
+
* - Automatic version field initialization
|
|
58
|
+
* - Optimistic locking support
|
|
59
|
+
* - Cache eviction after successful operation
|
|
60
|
+
*
|
|
61
|
+
* @param schema - The table schema
|
|
62
|
+
* @param models - Array of entities to insert
|
|
63
|
+
* @param updateIfExists - Whether to update existing records
|
|
64
|
+
* @returns Promise that resolves to the number of inserted rows
|
|
65
|
+
* @throws Error if cacheEntityName is not configured
|
|
66
|
+
* @throws Error if optimistic locking check fails
|
|
67
|
+
*/
|
|
68
|
+
async insert(schema, models, updateIfExists) {
|
|
69
|
+
this.validateCacheConfiguration();
|
|
70
|
+
const number = await this.forgeOperations
|
|
71
|
+
.modifyWithVersioning()
|
|
72
|
+
.insert(schema, models, updateIfExists);
|
|
73
|
+
await (0, cacheUtils_1.clearCache)(schema, this.options);
|
|
74
|
+
return number;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Deletes a record by ID with optimistic locking/versioning and automatically evicts cache.
|
|
78
|
+
*
|
|
79
|
+
* This method uses `modifyWithVersioning().deleteById()` internally, providing:
|
|
80
|
+
* - Optimistic locking checks before deletion
|
|
81
|
+
* - Version field validation
|
|
82
|
+
* - Cache eviction after successful operation
|
|
83
|
+
*
|
|
84
|
+
* @param id - The ID of the record to delete
|
|
85
|
+
* @param schema - The table schema
|
|
86
|
+
* @returns Promise that resolves to the number of affected rows
|
|
87
|
+
* @throws Error if cacheEntityName is not configured
|
|
88
|
+
* @throws Error if optimistic locking check fails
|
|
89
|
+
*/
|
|
90
|
+
async deleteById(id, schema) {
|
|
91
|
+
this.validateCacheConfiguration();
|
|
92
|
+
const number = await this.forgeOperations.modifyWithVersioning().deleteById(id, schema);
|
|
93
|
+
await (0, cacheUtils_1.clearCache)(schema, this.options);
|
|
94
|
+
return number;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Updates a record by ID with optimistic locking/versioning and automatically evicts cache.
|
|
98
|
+
*
|
|
99
|
+
* This method uses `modifyWithVersioning().updateById()` internally, providing:
|
|
100
|
+
* - Optimistic locking checks before update
|
|
101
|
+
* - Version field incrementation
|
|
102
|
+
* - Cache eviction after successful operation
|
|
103
|
+
*
|
|
104
|
+
* @param entity - The entity with updated values (must include primary key)
|
|
105
|
+
* @param schema - The table schema
|
|
106
|
+
* @returns Promise that resolves to the number of affected rows
|
|
107
|
+
* @throws Error if cacheEntityName is not configured
|
|
108
|
+
* @throws Error if optimistic locking check fails
|
|
109
|
+
*/
|
|
110
|
+
async updateById(entity, schema) {
|
|
111
|
+
this.validateCacheConfiguration();
|
|
112
|
+
const number = await this.forgeOperations.modifyWithVersioning().updateById(entity, schema);
|
|
113
|
+
await (0, cacheUtils_1.clearCache)(schema, this.options);
|
|
114
|
+
return number;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Updates fields based on conditions with optimistic locking/versioning and automatically evicts cache.
|
|
118
|
+
*
|
|
119
|
+
* This method uses `modifyWithVersioning().updateFields()` internally, providing:
|
|
120
|
+
* - Optimistic locking support (if version field is configured)
|
|
121
|
+
* - Version field validation and incrementation
|
|
122
|
+
* - Cache eviction after successful operation
|
|
123
|
+
*
|
|
124
|
+
* @param updateData - The data to update
|
|
125
|
+
* @param schema - The table schema
|
|
126
|
+
* @param where - Optional WHERE conditions
|
|
127
|
+
* @returns Promise that resolves to the number of affected rows
|
|
128
|
+
* @throws Error if cacheEntityName is not configured
|
|
129
|
+
* @throws Error if optimistic locking check fails
|
|
130
|
+
*/
|
|
131
|
+
async updateFields(updateData, schema, where) {
|
|
132
|
+
this.validateCacheConfiguration();
|
|
133
|
+
const number = await this.forgeOperations
|
|
134
|
+
.modifyWithVersioning()
|
|
135
|
+
.updateFields(updateData, schema, where);
|
|
136
|
+
await (0, cacheUtils_1.clearCache)(schema, this.options);
|
|
137
|
+
return number;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Executes a query with caching support.
|
|
141
|
+
* First checks cache, if not found executes query and stores result in cache.
|
|
142
|
+
*
|
|
143
|
+
* @param query - The Drizzle query to execute
|
|
144
|
+
* @param cacheTtl - Optional cache TTL override
|
|
145
|
+
* @returns Promise that resolves to the query results
|
|
146
|
+
* @throws Error if cacheEntityName is not configured
|
|
147
|
+
*/
|
|
148
|
+
async executeQuery(query, cacheTtl) {
|
|
149
|
+
this.validateCacheConfiguration();
|
|
150
|
+
const sqlQuery = query;
|
|
151
|
+
const cacheResult = await (0, cacheUtils_1.getFromCache)(sqlQuery, this.options);
|
|
152
|
+
if (cacheResult) {
|
|
153
|
+
return cacheResult;
|
|
154
|
+
}
|
|
155
|
+
const results = await query;
|
|
156
|
+
await (0, cacheUtils_1.setCacheResult)(sqlQuery, this.options, results, cacheTtl ?? this.options.cacheTTL ?? 60);
|
|
157
|
+
return results;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Validates that cache configuration is properly set up.
|
|
161
|
+
*
|
|
162
|
+
* @throws Error if cacheEntityName is not configured
|
|
163
|
+
* @private
|
|
164
|
+
*/
|
|
165
|
+
validateCacheConfiguration() {
|
|
166
|
+
if (!this.options.cacheEntityName) {
|
|
167
|
+
throw new Error("cacheEntityName is not configured");
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
exports.ForgeSQLCacheOperations = ForgeSQLCacheOperations;
|
|
172
|
+
//# sourceMappingURL=ForgeSQLCacheOperations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ForgeSQLCacheOperations.js","sourceRoot":"","sources":["../../src/core/ForgeSQLCacheOperations.ts"],"names":[],"mappings":"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"}
|