@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.
@@ -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 parameters.
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, any>, config: QueryCacheConfig): QueryCacheEntry | null;
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, any>, results: any[], config: QueryCacheConfig): void;
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;AAGvE;;;;GAIG;AACH,qBAAa,UAAU;IACnB,OAAO,CAAC,KAAK,CAAsC;IACnD,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;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW;IAQnB;;;;;;;;OAQG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,gBAAgB,GAAG,eAAe,GAAG,IAAI;IA+BnG;;;;;;;;OAQG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI;IA6BjG;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAmB7B;;;;;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;CAmB3B"}
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 parameters.
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
- * @param queryId - The unique query identifier
28
- * @param params - The query parameters
29
- * @returns A stable cache key string
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
- getCacheKey(queryId, params) {
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
- LogStatus(`Cleared ${keysToDelete.length} cache entries for query ${queryId}`);
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
- const expiryTime = entry.timestamp + (entry.ttlMinutes * 60 * 1000);
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":"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"}
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"}