@memberjunction/core 5.11.0 → 5.12.0
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/generic/QueryCache.d.ts +41 -7
- package/dist/generic/QueryCache.d.ts.map +1 -1
- package/dist/generic/QueryCache.js +146 -12
- package/dist/generic/QueryCache.js.map +1 -1
- package/dist/generic/QueryCacheManager.d.ts +105 -0
- package/dist/generic/QueryCacheManager.d.ts.map +1 -0
- package/dist/generic/QueryCacheManager.js +314 -0
- package/dist/generic/QueryCacheManager.js.map +1 -0
- package/dist/generic/interfaces.d.ts +10 -0
- package/dist/generic/interfaces.d.ts.map +1 -1
- package/dist/generic/interfaces.js.map +1 -1
- package/dist/generic/queryCompositionEngine.d.ts +7 -0
- package/dist/generic/queryCompositionEngine.d.ts.map +1 -1
- package/dist/generic/queryCompositionEngine.js +41 -5
- package/dist/generic/queryCompositionEngine.js.map +1 -1
- package/dist/generic/queryInfoInterfaces.d.ts +6 -0
- package/dist/generic/queryInfoInterfaces.d.ts.map +1 -1
- package/dist/generic/queryPagingEngine.d.ts +110 -0
- package/dist/generic/queryPagingEngine.d.ts.map +1 -0
- package/dist/generic/queryPagingEngine.js +335 -0
- package/dist/generic/queryPagingEngine.js.map +1 -0
- package/dist/generic/runQuery.d.ts +8 -0
- package/dist/generic/runQuery.d.ts.map +1 -1
- package/dist/generic/runQuery.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -3,9 +3,15 @@ import { QueryCacheConfig, QueryCacheEntry } from './QueryCacheConfig.js';
|
|
|
3
3
|
* LRU (Least Recently Used) cache implementation for query results with TTL support.
|
|
4
4
|
* This cache provides efficient storage and retrieval of query results with automatic
|
|
5
5
|
* expiration based on time-to-live settings and size limits.
|
|
6
|
+
*
|
|
7
|
+
* Supports three caching modes:
|
|
8
|
+
* - **Full-result cache**: stores complete (unpaginated) results via `get()`/`set()`
|
|
9
|
+
* - **Paged cache**: stores individual pages via `GetPaged()`/`SetPaged()` with page-aware keys
|
|
10
|
+
* - **Count cache**: stores TotalRowCount separately via `GetTotalRowCount()`/`SetTotalRowCount()`
|
|
6
11
|
*/
|
|
7
12
|
export declare class QueryCache {
|
|
8
13
|
private cache;
|
|
14
|
+
private countCache;
|
|
9
15
|
private accessOrder;
|
|
10
16
|
private readonly DEFAULT_MAX_SIZE;
|
|
11
17
|
private readonly DEFAULT_TTL_MINUTES;
|
|
@@ -14,14 +20,24 @@ export declare class QueryCache {
|
|
|
14
20
|
*/
|
|
15
21
|
private stats;
|
|
16
22
|
/**
|
|
17
|
-
* Generate a deterministic cache key from query ID and
|
|
23
|
+
* Generate a deterministic cache key from query ID, parameters, and optional paging dimensions.
|
|
18
24
|
* The key is created by sorting parameter keys and creating a stable JSON representation.
|
|
19
|
-
*
|
|
20
|
-
* @param queryId - The unique query identifier
|
|
21
|
-
* @param params - The query parameters
|
|
22
|
-
* @returns A stable cache key string
|
|
25
|
+
* When paging dimensions are provided, they are appended to distinguish pages.
|
|
23
26
|
*/
|
|
24
27
|
private getCacheKey;
|
|
28
|
+
/**
|
|
29
|
+
* Generate a deterministic cache key for a count query (no paging dimensions).
|
|
30
|
+
*/
|
|
31
|
+
private getCountCacheKey;
|
|
32
|
+
/**
|
|
33
|
+
* Generate a deterministic cache key for an ad-hoc SQL query using FNV-1a hash.
|
|
34
|
+
* Returns a string prefixed with `adhoc:` followed by the hash.
|
|
35
|
+
*/
|
|
36
|
+
static GenerateAdhocCacheKey(sql: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* FNV-1a 32-bit hash — fast, deterministic, good distribution for cache keys.
|
|
39
|
+
*/
|
|
40
|
+
private static fnv1aHash;
|
|
25
41
|
/**
|
|
26
42
|
* Get cached results if available and not expired.
|
|
27
43
|
* Updates access order for LRU tracking and increments hit counter.
|
|
@@ -31,7 +47,7 @@ export declare class QueryCache {
|
|
|
31
47
|
* @param config - Cache configuration settings
|
|
32
48
|
* @returns The cached entry if valid, null otherwise
|
|
33
49
|
*/
|
|
34
|
-
get(queryId: string, params: Record<string,
|
|
50
|
+
get(queryId: string, params: Record<string, unknown>, config: QueryCacheConfig): QueryCacheEntry | null;
|
|
35
51
|
/**
|
|
36
52
|
* Cache query results with TTL and LRU eviction.
|
|
37
53
|
* Evicts least recently used entries when at capacity.
|
|
@@ -41,7 +57,25 @@ export declare class QueryCache {
|
|
|
41
57
|
* @param results - The query results to cache
|
|
42
58
|
* @param config - Cache configuration settings
|
|
43
59
|
*/
|
|
44
|
-
set(queryId: string, params: Record<string,
|
|
60
|
+
set(queryId: string, params: Record<string, unknown>, results: unknown[], config: QueryCacheConfig): void;
|
|
61
|
+
/**
|
|
62
|
+
* Get cached results for a specific page of a paged query.
|
|
63
|
+
* The cache key includes startRow and maxRows to distinguish pages.
|
|
64
|
+
*/
|
|
65
|
+
GetPaged(queryId: string, params: Record<string, unknown>, startRow: number, maxRows: number, config: QueryCacheConfig): QueryCacheEntry | null;
|
|
66
|
+
/**
|
|
67
|
+
* Cache results for a specific page of a paged query.
|
|
68
|
+
*/
|
|
69
|
+
SetPaged(queryId: string, params: Record<string, unknown>, startRow: number, maxRows: number, results: unknown[], config: QueryCacheConfig): void;
|
|
70
|
+
/**
|
|
71
|
+
* Get a cached TotalRowCount for a query + params combination.
|
|
72
|
+
* Returns null if not cached or expired.
|
|
73
|
+
*/
|
|
74
|
+
GetTotalRowCount(queryId: string, params: Record<string, unknown>, config: QueryCacheConfig): number | null;
|
|
75
|
+
/**
|
|
76
|
+
* Cache a TotalRowCount for a query + params combination.
|
|
77
|
+
*/
|
|
78
|
+
SetTotalRowCount(queryId: string, params: Record<string, unknown>, count: number, config: QueryCacheConfig): void;
|
|
45
79
|
/**
|
|
46
80
|
* Clear cache for specific query or all queries.
|
|
47
81
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryCache.d.ts","sourceRoot":"","sources":["../../src/generic/QueryCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"QueryCache.d.ts","sourceRoot":"","sources":["../../src/generic/QueryCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAYvE;;;;;;;;;GASG;AACH,qBAAa,UAAU;IACnB,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,UAAU,CAAsC;IACxD,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAM;IAE1C;;OAEG;IACH,OAAO,CAAC,KAAK,CAKX;IAEF;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAYnB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;;OAGG;IACH,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIjD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IASxB;;;;;;;;OAQG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,gBAAgB,GAAG,eAAe,GAAG,IAAI;IA+BvG;;;;;;;;OAQG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAiCzG;;;OAGG;IACH,QAAQ,CACJ,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,gBAAgB,GACzB,eAAe,GAAG,IAAI;IA0BzB;;OAEG;IACH,QAAQ,CACJ,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAAE,EAClB,MAAM,EAAE,gBAAgB,GACzB,IAAI;IA8BP;;;OAGG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI;IAe3G;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAWjH;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IA2B7B;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAO7B;;;;OAIG;IACH,QAAQ,IAAI;QACR,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACvB;IAcD;;;;;OAKG;IACH,cAAc,IAAI,MAAM;CAyB3B"}
|
|
@@ -3,10 +3,16 @@ import { LogStatus } from './logging.js';
|
|
|
3
3
|
* LRU (Least Recently Used) cache implementation for query results with TTL support.
|
|
4
4
|
* This cache provides efficient storage and retrieval of query results with automatic
|
|
5
5
|
* expiration based on time-to-live settings and size limits.
|
|
6
|
+
*
|
|
7
|
+
* Supports three caching modes:
|
|
8
|
+
* - **Full-result cache**: stores complete (unpaginated) results via `get()`/`set()`
|
|
9
|
+
* - **Paged cache**: stores individual pages via `GetPaged()`/`SetPaged()` with page-aware keys
|
|
10
|
+
* - **Count cache**: stores TotalRowCount separately via `GetTotalRowCount()`/`SetTotalRowCount()`
|
|
6
11
|
*/
|
|
7
12
|
export class QueryCache {
|
|
8
13
|
constructor() {
|
|
9
14
|
this.cache = new Map();
|
|
15
|
+
this.countCache = new Map();
|
|
10
16
|
this.accessOrder = [];
|
|
11
17
|
this.DEFAULT_MAX_SIZE = 1000;
|
|
12
18
|
this.DEFAULT_TTL_MINUTES = 60;
|
|
@@ -21,19 +27,48 @@ export class QueryCache {
|
|
|
21
27
|
};
|
|
22
28
|
}
|
|
23
29
|
/**
|
|
24
|
-
* Generate a deterministic cache key from query ID and
|
|
30
|
+
* Generate a deterministic cache key from query ID, parameters, and optional paging dimensions.
|
|
25
31
|
* The key is created by sorting parameter keys and creating a stable JSON representation.
|
|
26
|
-
*
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
* When paging dimensions are provided, they are appended to distinguish pages.
|
|
33
|
+
*/
|
|
34
|
+
getCacheKey(queryId, params, startRow, maxRows) {
|
|
35
|
+
const sortedParams = Object.keys(params).sort().reduce((acc, key) => {
|
|
36
|
+
acc[key] = params[key];
|
|
37
|
+
return acc;
|
|
38
|
+
}, {});
|
|
39
|
+
const base = `${queryId}:${JSON.stringify(sortedParams)}`;
|
|
40
|
+
if (startRow != null && maxRows != null) {
|
|
41
|
+
return `${base}:page:${startRow}:${maxRows}`;
|
|
42
|
+
}
|
|
43
|
+
return base;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Generate a deterministic cache key for a count query (no paging dimensions).
|
|
30
47
|
*/
|
|
31
|
-
|
|
48
|
+
getCountCacheKey(queryId, params) {
|
|
32
49
|
const sortedParams = Object.keys(params).sort().reduce((acc, key) => {
|
|
33
50
|
acc[key] = params[key];
|
|
34
51
|
return acc;
|
|
35
52
|
}, {});
|
|
36
|
-
return `${queryId}:${JSON.stringify(sortedParams)}`;
|
|
53
|
+
return `${queryId}:count:${JSON.stringify(sortedParams)}`;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Generate a deterministic cache key for an ad-hoc SQL query using FNV-1a hash.
|
|
57
|
+
* Returns a string prefixed with `adhoc:` followed by the hash.
|
|
58
|
+
*/
|
|
59
|
+
static GenerateAdhocCacheKey(sql) {
|
|
60
|
+
return `adhoc:${QueryCache.fnv1aHash(sql)}`;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* FNV-1a 32-bit hash — fast, deterministic, good distribution for cache keys.
|
|
64
|
+
*/
|
|
65
|
+
static fnv1aHash(input) {
|
|
66
|
+
let hash = 0x811c9dc5; // FNV offset basis
|
|
67
|
+
for (let i = 0; i < input.length; i++) {
|
|
68
|
+
hash ^= input.charCodeAt(i);
|
|
69
|
+
hash = (hash * 0x01000193) >>> 0; // FNV prime, keep as uint32
|
|
70
|
+
}
|
|
71
|
+
return hash.toString(16);
|
|
37
72
|
}
|
|
38
73
|
/**
|
|
39
74
|
* Get cached results if available and not expired.
|
|
@@ -103,6 +138,94 @@ export class QueryCache {
|
|
|
103
138
|
this.cache.set(key, entry);
|
|
104
139
|
this.updateAccessOrder(key);
|
|
105
140
|
}
|
|
141
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
142
|
+
// Paged cache methods
|
|
143
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
144
|
+
/**
|
|
145
|
+
* Get cached results for a specific page of a paged query.
|
|
146
|
+
* The cache key includes startRow and maxRows to distinguish pages.
|
|
147
|
+
*/
|
|
148
|
+
GetPaged(queryId, params, startRow, maxRows, config) {
|
|
149
|
+
if (!config.enabled)
|
|
150
|
+
return null;
|
|
151
|
+
const key = this.getCacheKey(queryId, params, startRow, maxRows);
|
|
152
|
+
const entry = this.cache.get(key);
|
|
153
|
+
if (!entry) {
|
|
154
|
+
this.stats.misses++;
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
const now = Date.now();
|
|
158
|
+
if (now > entry.timestamp + (entry.ttlMinutes * 60 * 1000)) {
|
|
159
|
+
this.cache.delete(key);
|
|
160
|
+
this.removeFromAccessOrder(key);
|
|
161
|
+
this.stats.expirations++;
|
|
162
|
+
this.stats.misses++;
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
this.updateAccessOrder(key);
|
|
166
|
+
entry.hitCount++;
|
|
167
|
+
this.stats.hits++;
|
|
168
|
+
return entry;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Cache results for a specific page of a paged query.
|
|
172
|
+
*/
|
|
173
|
+
SetPaged(queryId, params, startRow, maxRows, results, config) {
|
|
174
|
+
if (!config.enabled)
|
|
175
|
+
return;
|
|
176
|
+
const key = this.getCacheKey(queryId, params, startRow, maxRows);
|
|
177
|
+
const maxSize = config.maxCacheSize || this.DEFAULT_MAX_SIZE;
|
|
178
|
+
if (this.cache.size >= maxSize && !this.cache.has(key)) {
|
|
179
|
+
const lruKey = this.accessOrder.shift();
|
|
180
|
+
if (lruKey) {
|
|
181
|
+
this.cache.delete(lruKey);
|
|
182
|
+
this.stats.evictions++;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
this.cache.set(key, {
|
|
186
|
+
queryId,
|
|
187
|
+
parameters: params,
|
|
188
|
+
results,
|
|
189
|
+
timestamp: Date.now(),
|
|
190
|
+
ttlMinutes: config.ttlMinutes || this.DEFAULT_TTL_MINUTES,
|
|
191
|
+
hitCount: 0,
|
|
192
|
+
});
|
|
193
|
+
this.updateAccessOrder(key);
|
|
194
|
+
}
|
|
195
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
196
|
+
// TotalRowCount cache (separate from main LRU to avoid count entries
|
|
197
|
+
// evicting data pages)
|
|
198
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
199
|
+
/**
|
|
200
|
+
* Get a cached TotalRowCount for a query + params combination.
|
|
201
|
+
* Returns null if not cached or expired.
|
|
202
|
+
*/
|
|
203
|
+
GetTotalRowCount(queryId, params, config) {
|
|
204
|
+
if (!config.enabled)
|
|
205
|
+
return null;
|
|
206
|
+
const key = this.getCountCacheKey(queryId, params);
|
|
207
|
+
const entry = this.countCache.get(key);
|
|
208
|
+
if (!entry)
|
|
209
|
+
return null;
|
|
210
|
+
if (Date.now() > entry.timestamp + (entry.ttlMinutes * 60 * 1000)) {
|
|
211
|
+
this.countCache.delete(key);
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
return entry.count;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Cache a TotalRowCount for a query + params combination.
|
|
218
|
+
*/
|
|
219
|
+
SetTotalRowCount(queryId, params, count, config) {
|
|
220
|
+
if (!config.enabled)
|
|
221
|
+
return;
|
|
222
|
+
const key = this.getCountCacheKey(queryId, params);
|
|
223
|
+
this.countCache.set(key, {
|
|
224
|
+
count,
|
|
225
|
+
timestamp: Date.now(),
|
|
226
|
+
ttlMinutes: config.ttlMinutes || this.DEFAULT_TTL_MINUTES,
|
|
227
|
+
});
|
|
228
|
+
}
|
|
106
229
|
/**
|
|
107
230
|
* Clear cache for specific query or all queries.
|
|
108
231
|
*
|
|
@@ -110,21 +233,27 @@ export class QueryCache {
|
|
|
110
233
|
*/
|
|
111
234
|
clear(queryId) {
|
|
112
235
|
if (queryId) {
|
|
113
|
-
// Clear all entries for specific query
|
|
236
|
+
// Clear all data entries for specific query
|
|
114
237
|
const keysToDelete = Array.from(this.cache.keys())
|
|
115
238
|
.filter(key => key.startsWith(`${queryId}:`));
|
|
116
239
|
keysToDelete.forEach(key => {
|
|
117
240
|
this.cache.delete(key);
|
|
118
241
|
this.removeFromAccessOrder(key);
|
|
119
242
|
});
|
|
120
|
-
|
|
243
|
+
// Clear count entries for specific query
|
|
244
|
+
const countKeysToDelete = Array.from(this.countCache.keys())
|
|
245
|
+
.filter(key => key.startsWith(`${queryId}:`));
|
|
246
|
+
countKeysToDelete.forEach(key => this.countCache.delete(key));
|
|
247
|
+
LogStatus(`Cleared ${keysToDelete.length} data + ${countKeysToDelete.length} count cache entries for query ${queryId}`);
|
|
121
248
|
}
|
|
122
249
|
else {
|
|
123
250
|
// Clear entire cache
|
|
124
251
|
const size = this.cache.size;
|
|
252
|
+
const countSize = this.countCache.size;
|
|
125
253
|
this.cache.clear();
|
|
254
|
+
this.countCache.clear();
|
|
126
255
|
this.accessOrder = [];
|
|
127
|
-
LogStatus(`Cleared entire query cache (${size} entries)`);
|
|
256
|
+
LogStatus(`Cleared entire query cache (${size} data + ${countSize} count entries)`);
|
|
128
257
|
}
|
|
129
258
|
}
|
|
130
259
|
/**
|
|
@@ -178,13 +307,18 @@ export class QueryCache {
|
|
|
178
307
|
const now = Date.now();
|
|
179
308
|
let cleaned = 0;
|
|
180
309
|
for (const [key, entry] of this.cache.entries()) {
|
|
181
|
-
|
|
182
|
-
if (now > expiryTime) {
|
|
310
|
+
if (now > entry.timestamp + (entry.ttlMinutes * 60 * 1000)) {
|
|
183
311
|
this.cache.delete(key);
|
|
184
312
|
this.removeFromAccessOrder(key);
|
|
185
313
|
cleaned++;
|
|
186
314
|
}
|
|
187
315
|
}
|
|
316
|
+
for (const [key, entry] of this.countCache.entries()) {
|
|
317
|
+
if (now > entry.timestamp + (entry.ttlMinutes * 60 * 1000)) {
|
|
318
|
+
this.countCache.delete(key);
|
|
319
|
+
cleaned++;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
188
322
|
if (cleaned > 0) {
|
|
189
323
|
LogStatus(`Cleaned up ${cleaned} expired cache entries`);
|
|
190
324
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryCache.js","sourceRoot":"","sources":["../../src/generic/QueryCache.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"QueryCache.js","sourceRoot":"","sources":["../../src/generic/QueryCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { QueryInfo } from './queryInfo.js';
|
|
2
|
+
/**
|
|
3
|
+
* Wrapper around LocalCacheManager that translates query-specific caching concerns
|
|
4
|
+
* (paging, count, ad-hoc keys, dependency invalidation, entity-change awareness)
|
|
5
|
+
* into LocalCacheManager's generic RunQueryCache methods.
|
|
6
|
+
*
|
|
7
|
+
* Replaces the standalone QueryCache class so that query result caching participates
|
|
8
|
+
* in LCM's unified eviction, TTL, statistics, and optional Redis persistence.
|
|
9
|
+
*
|
|
10
|
+
* ## IMPORTANT — Caching is intentionally BYPASSED for now
|
|
11
|
+
*
|
|
12
|
+
* All Get/Set methods are wired up but short-circuit to no-ops. The reason:
|
|
13
|
+
*
|
|
14
|
+
* Query results cannot be reliably invalidated today. Unlike RunView caching (which
|
|
15
|
+
* tracks individual entities and can invalidate on any row-level mutation), queries
|
|
16
|
+
* are arbitrary SQL that may join, filter, or aggregate across many tables. The
|
|
17
|
+
* `QueryEntity` table maps queries to the entities they reference, but those mappings
|
|
18
|
+
* are LLM-discovered and not guaranteed to be complete. A TTL-only strategy risks
|
|
19
|
+
* serving stale data when the underlying rows change before the TTL expires.
|
|
20
|
+
*
|
|
21
|
+
* The full caching implementation is preserved below so that when we have a reliable
|
|
22
|
+
* invalidation strategy (e.g., entity mutation hooks that can confidently evict all
|
|
23
|
+
* affected query caches with complete QueryEntity coverage), we can enable caching
|
|
24
|
+
* by removing the early returns at the top of each method. Until then, every query
|
|
25
|
+
* execution hits the database to guarantee fresh results.
|
|
26
|
+
*/
|
|
27
|
+
export declare class QueryCacheManager {
|
|
28
|
+
private _connectionPrefix;
|
|
29
|
+
/** Tracks cache timestamps per fingerprint for computing CacheTTLRemaining */
|
|
30
|
+
private _cacheTimestamps;
|
|
31
|
+
/** Reverse index: normalized entity name → set of fingerprints that depend on it */
|
|
32
|
+
private _queryEntityIndex;
|
|
33
|
+
constructor(connectionPrefix: string);
|
|
34
|
+
private get LCM();
|
|
35
|
+
private Fingerprint;
|
|
36
|
+
private PagedFingerprint;
|
|
37
|
+
private CountFingerprint;
|
|
38
|
+
private AdhocFingerprint;
|
|
39
|
+
/**
|
|
40
|
+
* Retrieves cached full (unpaginated) results for a saved query.
|
|
41
|
+
* Returns null on miss or if caching is disabled.
|
|
42
|
+
*/
|
|
43
|
+
Get(query: QueryInfo, params: Record<string, unknown>): Promise<{
|
|
44
|
+
results: unknown[];
|
|
45
|
+
ttlRemainingMs: number;
|
|
46
|
+
} | null>;
|
|
47
|
+
/**
|
|
48
|
+
* Stores full (unpaginated) query results in the cache.
|
|
49
|
+
*/
|
|
50
|
+
Set(query: QueryInfo, params: Record<string, unknown>, results: unknown[]): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Retrieves cached results for a specific page of a paged query.
|
|
53
|
+
*/
|
|
54
|
+
GetPaged(query: QueryInfo, params: Record<string, unknown>, startRow: number, maxRows: number): Promise<{
|
|
55
|
+
results: unknown[];
|
|
56
|
+
ttlRemainingMs: number;
|
|
57
|
+
} | null>;
|
|
58
|
+
/**
|
|
59
|
+
* Stores results for a specific page in the cache.
|
|
60
|
+
*/
|
|
61
|
+
SetPaged(query: QueryInfo, params: Record<string, unknown>, startRow: number, maxRows: number, results: unknown[]): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Retrieves a cached TotalRowCount for a query + params combination.
|
|
64
|
+
*/
|
|
65
|
+
GetTotalRowCount(query: QueryInfo, params: Record<string, unknown>): Promise<number | null>;
|
|
66
|
+
/**
|
|
67
|
+
* Stores a TotalRowCount value in the cache, encoded as a single-row result.
|
|
68
|
+
*/
|
|
69
|
+
SetTotalRowCount(query: QueryInfo, params: Record<string, unknown>, count: number): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Retrieves cached results for an ad-hoc SQL query.
|
|
72
|
+
*/
|
|
73
|
+
GetAdhoc(sql: string, ttlMinutes: number): Promise<{
|
|
74
|
+
results: unknown[];
|
|
75
|
+
} | null>;
|
|
76
|
+
/**
|
|
77
|
+
* Stores ad-hoc SQL query results in the cache.
|
|
78
|
+
*/
|
|
79
|
+
SetAdhoc(sql: string, ttlMinutes: number, results: unknown[]): Promise<void>;
|
|
80
|
+
/**
|
|
81
|
+
* Invalidates all cache entries (full, paged, count) for a single query by name.
|
|
82
|
+
*/
|
|
83
|
+
InvalidateQuery(queryName: string): Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* Invalidates cache entries for a query and all queries that transitively depend on it.
|
|
86
|
+
*/
|
|
87
|
+
InvalidateWithDependents(query: QueryInfo, visited?: Set<string>): Promise<void>;
|
|
88
|
+
/**
|
|
89
|
+
* Called when an entity changes (save/delete). Invalidates all query cache entries
|
|
90
|
+
* that depend on the changed entity via QueryEntity mappings.
|
|
91
|
+
*
|
|
92
|
+
* While caching is bypassed the reverse index will always be empty, so this is
|
|
93
|
+
* effectively a no-op. Kept wired up so enabling caching requires no caller changes.
|
|
94
|
+
*/
|
|
95
|
+
HandleEntityChange(entityName: string): Promise<void>;
|
|
96
|
+
private RegisterEntityDependencies;
|
|
97
|
+
private GetTransitiveEntityDependencies;
|
|
98
|
+
private FindQueryById;
|
|
99
|
+
private computeTTLRemaining;
|
|
100
|
+
/**
|
|
101
|
+
* FNV-1a 32-bit hash — fast, deterministic, good distribution for cache keys.
|
|
102
|
+
*/
|
|
103
|
+
private static Fnv1aHash;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=QueryCacheManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryCacheManager.d.ts","sourceRoot":"","sources":["../../src/generic/QueryCacheManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAKxC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,iBAAiB,CAAS;IAElC,8EAA8E;IAC9E,OAAO,CAAC,gBAAgB,CAAkC;IAE1D,oFAAoF;IACpF,OAAO,CAAC,iBAAiB,CAAuC;gBAEpD,gBAAgB,EAAE,MAAM;IAIpC,OAAO,KAAK,GAAG,GAEd;IAID,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,gBAAgB;IAMxB;;;OAGG;IACG,GAAG,CACL,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClD,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAgBjE;;OAEG;IACG,GAAG,CACL,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,GACtE,OAAO,CAAC,IAAI,CAAC;IAuBhB;;OAEG;IACG,QAAQ,CACV,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjD,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAClC,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAgBjE;;OAEG;IACG,QAAQ,CACV,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjD,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GACtD,OAAO,CAAC,IAAI,CAAC;IAuBhB;;OAEG;IACG,gBAAgB,CAClB,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAgBzB;;OAEG;IACG,gBAAgB,CAClB,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,GACjE,OAAO,CAAC,IAAI,CAAC;IAqBhB;;OAEG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAavF;;OAEG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBlF;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvD;;OAEG;IACG,wBAAwB,CAC1B,KAAK,EAAE,SAAS,EAChB,OAAO,cAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC;IAqBhB;;;;;;OAMG;IACG,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB3D,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,+BAA+B;IAkCvC,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,mBAAmB;IAM3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;CAQ3B"}
|