@memberjunction/core-entities 6.2.0-edge.4 → 6.2.0-edge.5

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.
Files changed (44) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/custom/ConversationWriteAccess.d.ts +5 -0
  3. package/dist/custom/ConversationWriteAccess.d.ts.map +1 -1
  4. package/dist/custom/ConversationWriteAccess.js +6 -6
  5. package/dist/custom/ConversationWriteAccess.js.map +1 -1
  6. package/dist/custom/MJConversationDetailEntityExtended.d.ts +46 -4
  7. package/dist/custom/MJConversationDetailEntityExtended.d.ts.map +1 -1
  8. package/dist/custom/MJConversationDetailEntityExtended.js +185 -28
  9. package/dist/custom/MJConversationDetailEntityExtended.js.map +1 -1
  10. package/dist/custom/MJThemeEntityExtended.d.ts +13 -0
  11. package/dist/custom/MJThemeEntityExtended.d.ts.map +1 -0
  12. package/dist/custom/MJThemeEntityExtended.js +37 -0
  13. package/dist/custom/MJThemeEntityExtended.js.map +1 -0
  14. package/dist/engines/InstanceConfigEngine.d.ts.map +1 -1
  15. package/dist/engines/InstanceConfigEngine.js +13 -3
  16. package/dist/engines/InstanceConfigEngine.js.map +1 -1
  17. package/dist/engines/PermissionEngine.d.ts +5 -4
  18. package/dist/engines/PermissionEngine.d.ts.map +1 -1
  19. package/dist/engines/PermissionEngine.js +7 -5
  20. package/dist/engines/PermissionEngine.js.map +1 -1
  21. package/dist/engines/QueryEngine.d.ts +81 -6
  22. package/dist/engines/QueryEngine.d.ts.map +1 -1
  23. package/dist/engines/QueryEngine.js +283 -4
  24. package/dist/engines/QueryEngine.js.map +1 -1
  25. package/dist/engines/UserInfoEngine.d.ts +48 -2
  26. package/dist/engines/UserInfoEngine.d.ts.map +1 -1
  27. package/dist/engines/UserInfoEngine.js +65 -8
  28. package/dist/engines/UserInfoEngine.js.map +1 -1
  29. package/dist/engines/conversations.d.ts +19 -1
  30. package/dist/engines/conversations.d.ts.map +1 -1
  31. package/dist/engines/conversations.js +125 -22
  32. package/dist/engines/conversations.js.map +1 -1
  33. package/dist/generated/entities/__mj.d.ts +1762 -44
  34. package/dist/generated/entities/__mj.d.ts.map +1 -1
  35. package/dist/generated/entities/__mj.js +2231 -18
  36. package/dist/generated/entities/__mj.js.map +1 -1
  37. package/dist/generated/remote_operations.d.ts +17 -5
  38. package/dist/generated/remote_operations.d.ts.map +1 -1
  39. package/dist/generated/remote_operations.js.map +1 -1
  40. package/dist/index.d.ts +1 -0
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +1 -0
  43. package/dist/index.js.map +1 -1
  44. package/package.json +6 -5
@@ -65,10 +65,10 @@ export const PERMISSION_DOMAIN_ICON_FALLBACK = 'fa-solid fa-lock';
65
65
  * );
66
66
  * ```
67
67
  *
68
- * Priority 15 so it configures after default-priority engines (e.g., UserInfoEngine at 10);
69
- * providers lazy-resolve their backing engines on first use, so even if a backing engine
70
- * has not been configured yet at provider construction time, permission checks still work
71
- * once the backing engine comes online.
68
+ * Runs at the default startup priority (100) alongside `UserInfoEngine`, `ApplicationManager`,
69
+ * and `DashboardEngine` so its `MJ: Permission Domains` `RunView` coalesces into the main
70
+ * synchronous startup batch rather than forcing a solo round-trip. Providers lazy-resolve
71
+ * their backing engines on first use, so configure order within the priority group does not matter.
72
72
  */
73
73
  let PermissionEngine = class PermissionEngine extends BaseEngine {
74
74
  constructor() {
@@ -89,6 +89,8 @@ let PermissionEngine = class PermissionEngine extends BaseEngine {
89
89
  },
90
90
  ];
91
91
  await super.Load(configs, provider, forceRefresh, contextUser);
92
+ }
93
+ async AdditionalLoading() {
92
94
  this.instantiateProviders();
93
95
  }
94
96
  /**
@@ -345,7 +347,7 @@ let PermissionEngine = class PermissionEngine extends BaseEngine {
345
347
  }
346
348
  };
347
349
  PermissionEngine = __decorate([
348
- RegisterForStartup({ priority: 15, severity: 'warn', description: 'PermissionEngine — unified permission provider registry' })
350
+ RegisterForStartup({ severity: 'warn', description: 'PermissionEngine — unified permission provider registry' })
349
351
  ], PermissionEngine);
350
352
  export { PermissionEngine };
351
353
  //# sourceMappingURL=PermissionEngine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionEngine.js","sourceRoot":"","sources":["../../src/engines/PermissionEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PermissionEngine.js","sourceRoot":"","sources":["../../src/engines/PermissionEngine.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,6 @@
1
- import { BaseEngine, IMetadataProvider, UserInfo } from "@memberjunction/core";
1
+ import { BaseEngine, BaseEnginePropertyConfig, BaseEntity, BaseEntityEvent, DatabasePlatform, EngineDataChangeEvent, IMetadataProvider, QueryDefinitionSignature, UserInfo } from "@memberjunction/core";
2
2
  import { MJQueryCategoryEntity, MJQueryFieldEntity, MJQueryParameterEntity, MJQueryEntityEntity, MJQueryPermissionEntity, MJQueryDependencyEntity, MJQuerySQLEntity, MJSQLDialectEntity } from "../generated/entity_subclasses.js";
3
3
  import { MJQueryEntityExtended } from "../custom/MJQueryEntityExtended.js";
4
- /**
5
- * Caching of metadata for queries and related data, with auto-refresh on entity changes.
6
- * Returns `MJQueryEntityExtended` instances which include child-relationship getters
7
- * (QueryFields, QueryParameters, etc.) and business logic (UserCanRun, CategoryPath, etc.).
8
- */
9
4
  export declare class QueryEngine extends BaseEngine<QueryEngine> {
10
5
  /**
11
6
  * Returns the global instance of the class. This is a singleton class, so there is only one instance of it in the application.
@@ -66,5 +61,85 @@ export declare class QueryEngine extends BaseEngine<QueryEngine> {
66
61
  GetQueriesByCategory(categoryId: string): MJQueryEntityExtended[];
67
62
  /** Find a category by name (case-insensitive) */
68
63
  FindCategory(name: string): MJQueryCategoryEntity | undefined;
64
+ /** Definition signatures by `queryID|platform`, cleared whenever a definition property changes. */
65
+ private _definitionMemo;
66
+ /** Lookup indexes for computing signatures, built on first use after the memo was cleared. */
67
+ private _definitionIndexes;
68
+ /** Saves seen starting with a result-affecting column dirty; see {@link trackDefinitionEdit}. */
69
+ private _resultAffectingSaves;
70
+ /** Pending slot invalidations by lowercased query ID; see {@link scheduleSlotInvalidation}. */
71
+ private _pendingSlotInvalidations;
72
+ /**
73
+ * How long, in milliseconds, a query must go without a result-affecting save on this process
74
+ * before its cached results are deleted. One edit saves the query, then its parameters, fields,
75
+ * entities and dependencies, then the query again, over several seconds; waiting for the burst
76
+ * to settle deletes the slots once instead of once per save.
77
+ */
78
+ protected get DefinitionEditSettleMs(): number;
79
+ /**
80
+ * The signature of what a query's results are computed from on `platform`: a hash of the SQL
81
+ * that runs there (`GetPlatformSQL`), the columns that change how it runs (`UsesTemplate`,
82
+ * `ExternalDataSourceID`, `IsMaterialized`, `SQLDialectID`), its `CacheValidationSQL`, its
83
+ * parameters' names, types, required flags and validation filters, and, recursively, the signatures of the queries it composes (a cycle
84
+ * is hashed as a marker rather than followed). Descriptive columns, parameter default values
85
+ * (informational only), field rows, permissions and cache settings are not part of it.
86
+ *
87
+ * The stamp is the newest `__mj_UpdatedAt` across the same rows. Computed once per query and
88
+ * platform, and again only after this engine's query data changes.
89
+ *
90
+ * @returns The signature, or undefined when the engine does not hold the query
91
+ */
92
+ GetDefinitionSignature(queryID: string, platform: DatabasePlatform): QueryDefinitionSignature | undefined;
93
+ /**
94
+ * The memoized signature, computing it (and any composed query's) on a miss. A signature whose
95
+ * computation met a cycle is not memoized: its value depends on where the walk entered the
96
+ * cycle, and two processes must agree on every query's hash.
97
+ */
98
+ private definitionSignature;
99
+ /** The hashed text of one query's own definition, without its composed queries. */
100
+ private definitionParts;
101
+ /** Dependency rows in a stable order, so the hash does not depend on load order. */
102
+ private static sortedDependencies;
103
+ /** Builds (once per memo generation) the lookups signature computation reads. */
104
+ private definitionIndexes;
105
+ /** Forgets every computed signature, so the next request recomputes from current data. */
106
+ private clearDefinitionMemo;
107
+ protected NotifyDataChange(config: BaseEnginePropertyConfig, data: unknown[], changeType?: EngineDataChangeEvent['changeType'], affectedEntity?: BaseEntity): void;
108
+ protected emitPropertyChange(propertyName: string): void;
109
+ /** Milliseconds since the epoch for a row timestamp, or 0 when absent or unreadable. */
110
+ private static timestampMs;
111
+ /**
112
+ * A 53-bit hash of `text` as hex (cyrb53). Plain JavaScript, so a browser and a server hash the
113
+ * same text to the same value.
114
+ */
115
+ private static hashText;
116
+ /**
117
+ * Notes result-affecting edits made in this process before the base class applies the event.
118
+ * Only local saves and deletes count: every server's engine also hears about the edit, through
119
+ * the shared cache, but only the server that made it deletes the slots, so a fleet does not
120
+ * delete the same slots once per server while the others refill them.
121
+ */
122
+ protected HandleIndividualBaseEntityEvent(event: BaseEntityEvent): Promise<boolean>;
123
+ /**
124
+ * Follows one save or delete of a query definition row. A save is judged when it starts, while
125
+ * the record still knows which columns are dirty, and acted on when it succeeds. A delete
126
+ * always counts. The slots of the affected query and of every query that composes it are then
127
+ * deleted once the edit settles (see {@link DefinitionEditSettleMs}). Deleting them is
128
+ * housekeeping: a read under the new definition already misses them (see
129
+ * {@link GetDefinitionSignature}).
130
+ */
131
+ private trackDefinitionEdit;
132
+ /** True for a create, or an update with any of `columns` dirty. */
133
+ private static isResultAffectingSave;
134
+ /** The query a definition row belongs to: the row itself for a query, else its QueryID. */
135
+ private static editedQueryID;
136
+ /** Schedules slot deletion for `queryID` and every query that composes it, directly or not. */
137
+ private invalidateAfterEdit;
138
+ /** `queryID` plus every query that reaches it through composition. Cycles end the walk. */
139
+ private queryAndDependents;
140
+ /** (Re)starts the settle timer for one query's slot deletion. */
141
+ private scheduleSlotInvalidation;
142
+ /** Deletes one query's cached results. Never throws. */
143
+ private invalidateQuerySlots;
69
144
  }
70
145
  //# sourceMappingURL=QueryEngine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"QueryEngine.d.ts","sourceRoot":"","sources":["../../src/engines/QueryEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA4B,iBAAiB,EAAsB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE7H,OAAO,EACH,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAExE;;;;GAIG;AACH,qBACa,WAAY,SAAQ,UAAU,CAAC,WAAW,CAAC;IACpD;;;OAGG;IACH,WAAkB,QAAQ,IAAI,WAAW,CAExC;IAED,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,YAAY,CAA4B;IAEnC,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IAkBhG,gCAAgC;IAChC,IAAW,OAAO,IAAI,qBAAqB,EAAE,CAE5C;IAED,2BAA2B;IAC3B,IAAW,UAAU,IAAI,qBAAqB,EAAE,CAE/C;IAED,2EAA2E;IAC3E,IAAW,eAAe,IAAI,qBAAqB,EAAE,CAEpD;IAED,kCAAkC;IAClC,IAAW,MAAM,IAAI,kBAAkB,EAAE,CAExC;IAED,uEAAuE;IACvE,IAAW,WAAW,IAAI,kBAAkB,EAAE,CAE7C;IAED,sCAAsC;IACtC,IAAW,UAAU,IAAI,sBAAsB,EAAE,CAEhD;IAED,2EAA2E;IAC3E,IAAW,eAAe,IAAI,sBAAsB,EAAE,CAErD;IAED,gDAAgD;IAChD,IAAW,aAAa,IAAI,mBAAmB,EAAE,CAEhD;IAED,mCAAmC;IACnC,IAAW,WAAW,IAAI,uBAAuB,EAAE,CAElD;IAED,4EAA4E;IAC5E,IAAW,gBAAgB,IAAI,uBAAuB,EAAE,CAEvD;IAED,4DAA4D;IAC5D,IAAW,YAAY,IAAI,uBAAuB,EAAE,CAEnD;IAED,6EAA6E;IAC7E,IAAW,iBAAiB,IAAI,uBAAuB,EAAE,CAExD;IAED,6CAA6C;IAC7C,IAAW,SAAS,IAAI,gBAAgB,EAAE,CAEzC;IAED,kCAAkC;IAClC,IAAW,WAAW,IAAI,kBAAkB,EAAE,CAE7C;IAID,sDAAsD;IACtD,IAAW,eAAe,IAAI,qBAAqB,EAAE,CAEpD;IAED,6BAA6B;IACtB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAMnE,4DAA4D;IACrD,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAW5F,qDAAqD;IAC9C,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,EAAE;IAI5D,yDAAyD;IAClD,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB,EAAE;IAIpE,sDAAsD;IAC/C,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB,EAAE;IAItE,uDAAuD;IAChD,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,qBAAqB,EAAE;IAIxE,iDAAiD;IAC1C,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;CAKvE"}
1
+ {"version":3,"file":"QueryEngine.d.ts","sourceRoot":"","sources":["../../src/engines/QueryEngine.ts"],"names":[],"mappings":"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"}
@@ -4,14 +4,29 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { BaseEngine, RegisterForStartup } from "@memberjunction/core";
8
- import { UUIDsEqual } from "@memberjunction/global";
7
+ var QueryEngine_1;
8
+ import { BaseEngine, LocalCacheManager, LogError, LogStatusEx, RegisterForStartup } from "@memberjunction/core";
9
+ import { GroupByUUID, IndexByUUID, UUIDsEqual } from "@memberjunction/global";
9
10
  /**
10
11
  * Caching of metadata for queries and related data, with auto-refresh on entity changes.
11
12
  * Returns `MJQueryEntityExtended` instances which include child-relationship getters
12
13
  * (QueryFields, QueryParameters, etc.) and business logic (UserCanRun, CategoryPath, etc.).
13
14
  */
14
- let QueryEngine = class QueryEngine extends BaseEngine {
15
+ /**
16
+ * Per entity, the columns whose change can change a query's results. `'all'` means any change.
17
+ * Name and CategoryID are in the cache key rather than in the definition hash: editing them leaves
18
+ * the old slots unreachable, so they are reclaimed too. A parameter's DefaultValue is not here:
19
+ * it is informational, never applied when the query runs (`QueryParameterProcessor`).
20
+ */
21
+ const RESULT_AFFECTING_COLUMNS = {
22
+ 'mj: queries': ['SQL', 'SQLDialectID', 'UsesTemplate', 'ExternalDataSourceID', 'IsMaterialized', 'CacheValidationSQL', 'Name', 'CategoryID'],
23
+ 'mj: query sqls': 'all',
24
+ 'mj: query parameters': ['QueryID', 'Name', 'Type', 'IsRequired', 'ValidationFilters'],
25
+ 'mj: query dependencies': 'all',
26
+ };
27
+ /** Engine properties a query definition is computed from. A change to any of them clears the memo. */
28
+ const DEFINITION_PROPERTIES = new Set(['_queries', '_parameters', '_dependencies', '_querySQLs', '_sqlDialects']);
29
+ let QueryEngine = QueryEngine_1 = class QueryEngine extends BaseEngine {
15
30
  constructor() {
16
31
  super(...arguments);
17
32
  this._queries = [];
@@ -23,6 +38,15 @@ let QueryEngine = class QueryEngine extends BaseEngine {
23
38
  this._dependencies = [];
24
39
  this._querySQLs = [];
25
40
  this._sqlDialects = [];
41
+ // --- Query definition signatures ---
42
+ /** Definition signatures by `queryID|platform`, cleared whenever a definition property changes. */
43
+ this._definitionMemo = new Map();
44
+ /** Lookup indexes for computing signatures, built on first use after the memo was cleared. */
45
+ this._definitionIndexes = null;
46
+ /** Saves seen starting with a result-affecting column dirty; see {@link trackDefinitionEdit}. */
47
+ this._resultAffectingSaves = new WeakSet();
48
+ /** Pending slot invalidations by lowercased query ID; see {@link scheduleSlotInvalidation}. */
49
+ this._pendingSlotInvalidations = new Map();
26
50
  }
27
51
  /**
28
52
  * Returns the global instance of the class. This is a singleton class, so there is only one instance of it in the application.
@@ -152,8 +176,263 @@ let QueryEngine = class QueryEngine extends BaseEngine {
152
176
  const lower = name.trim().toLowerCase();
153
177
  return this._categories.find(c => c.Name.trim().toLowerCase() === lower);
154
178
  }
179
+ /**
180
+ * How long, in milliseconds, a query must go without a result-affecting save on this process
181
+ * before its cached results are deleted. One edit saves the query, then its parameters, fields,
182
+ * entities and dependencies, then the query again, over several seconds; waiting for the burst
183
+ * to settle deletes the slots once instead of once per save.
184
+ */
185
+ get DefinitionEditSettleMs() {
186
+ return 3000;
187
+ }
188
+ /**
189
+ * The signature of what a query's results are computed from on `platform`: a hash of the SQL
190
+ * that runs there (`GetPlatformSQL`), the columns that change how it runs (`UsesTemplate`,
191
+ * `ExternalDataSourceID`, `IsMaterialized`, `SQLDialectID`), its `CacheValidationSQL`, its
192
+ * parameters' names, types, required flags and validation filters, and, recursively, the signatures of the queries it composes (a cycle
193
+ * is hashed as a marker rather than followed). Descriptive columns, parameter default values
194
+ * (informational only), field rows, permissions and cache settings are not part of it.
195
+ *
196
+ * The stamp is the newest `__mj_UpdatedAt` across the same rows. Computed once per query and
197
+ * platform, and again only after this engine's query data changes.
198
+ *
199
+ * @returns The signature, or undefined when the engine does not hold the query
200
+ */
201
+ GetDefinitionSignature(queryID, platform) {
202
+ if (!queryID)
203
+ return undefined;
204
+ return this.definitionSignature(queryID, platform, new Set())?.Signature;
205
+ }
206
+ /**
207
+ * The memoized signature, computing it (and any composed query's) on a miss. A signature whose
208
+ * computation met a cycle is not memoized: its value depends on where the walk entered the
209
+ * cycle, and two processes must agree on every query's hash.
210
+ */
211
+ definitionSignature(queryID, platform, visiting) {
212
+ const key = `${queryID.trim().toLowerCase()}|${platform}`;
213
+ const memo = this._definitionMemo.get(key);
214
+ if (memo)
215
+ return { Signature: memo, Cyclic: false };
216
+ const indexes = this.definitionIndexes();
217
+ const query = indexes.QueriesByID.Get(queryID);
218
+ if (!query)
219
+ return undefined;
220
+ visiting.add(key);
221
+ const parts = this.definitionParts(query, platform, indexes);
222
+ let newest = QueryEngine_1.timestampMs(query.__mj_UpdatedAt);
223
+ for (const row of [...(indexes.ParametersByQuery.Get(query.ID) ?? []), ...(indexes.QuerySQLsByQuery.Get(query.ID) ?? [])]) {
224
+ newest = Math.max(newest, QueryEngine_1.timestampMs(row.__mj_UpdatedAt));
225
+ }
226
+ let cyclic = false;
227
+ for (const dependency of QueryEngine_1.sortedDependencies(indexes.DependenciesByQuery.Get(query.ID))) {
228
+ newest = Math.max(newest, QueryEngine_1.timestampMs(dependency.__mj_UpdatedAt));
229
+ const dependencyID = dependency.DependsOnQueryID.toLowerCase();
230
+ if (visiting.has(`${dependencyID}|${platform}`)) {
231
+ cyclic = true;
232
+ parts.push(`dep:${dependencyID}:cycle`);
233
+ continue;
234
+ }
235
+ const composed = this.definitionSignature(dependency.DependsOnQueryID, platform, visiting);
236
+ cyclic = cyclic || composed?.Cyclic === true;
237
+ parts.push(`dep:${dependencyID}:${composed?.Signature.Hash ?? 'missing'}`);
238
+ newest = Math.max(newest, QueryEngine_1.timestampMs(composed?.Signature.Stamp));
239
+ }
240
+ visiting.delete(key);
241
+ const signature = {
242
+ QueryID: query.ID,
243
+ Hash: QueryEngine_1.hashText(parts.join('\u0001')),
244
+ Stamp: newest > 0 ? new Date(newest).toISOString() : undefined,
245
+ };
246
+ if (!cyclic) {
247
+ this._definitionMemo.set(key, signature);
248
+ }
249
+ return { Signature: signature, Cyclic: cyclic };
250
+ }
251
+ /** The hashed text of one query's own definition, without its composed queries. */
252
+ definitionParts(query, platform, indexes) {
253
+ const parts = [
254
+ `sql:${query.GetPlatformSQL(platform) ?? ''}`,
255
+ `dialect:${(query.SQLDialectID ?? '').toLowerCase()}`,
256
+ `template:${query.UsesTemplate ? 1 : 0}`,
257
+ `external:${(query.ExternalDataSourceID ?? '').toLowerCase()}`,
258
+ `materialized:${query.IsMaterialized ? 1 : 0}`,
259
+ `validation:${query.CacheValidationSQL ?? ''}`,
260
+ ];
261
+ const parameters = [...(indexes.ParametersByQuery.Get(query.ID) ?? [])]
262
+ .sort((a, b) => a.Name.toLowerCase().localeCompare(b.Name.toLowerCase()));
263
+ for (const p of parameters) {
264
+ parts.push(`param:${p.Name.toLowerCase()}\u0002${p.Type}\u0002${p.IsRequired ? 1 : 0}\u0002${p.ValidationFilters ?? ''}`);
265
+ }
266
+ return parts;
267
+ }
268
+ /** Dependency rows in a stable order, so the hash does not depend on load order. */
269
+ static sortedDependencies(rows) {
270
+ return [...(rows ?? [])].sort((a, b) => a.DependsOnQueryID.toLowerCase().localeCompare(b.DependsOnQueryID.toLowerCase()));
271
+ }
272
+ /** Builds (once per memo generation) the lookups signature computation reads. */
273
+ definitionIndexes() {
274
+ if (!this._definitionIndexes) {
275
+ this._definitionIndexes = {
276
+ QueriesByID: IndexByUUID(this.Queries),
277
+ ParametersByQuery: GroupByUUID(this.Parameters, p => p.QueryID),
278
+ DependenciesByQuery: GroupByUUID(this.Dependencies, d => d.QueryID),
279
+ DependentsByQuery: GroupByUUID(this.Dependencies, d => d.DependsOnQueryID),
280
+ QuerySQLsByQuery: GroupByUUID(this.QuerySQLs, q => q.QueryID),
281
+ };
282
+ }
283
+ return this._definitionIndexes;
284
+ }
285
+ /** Forgets every computed signature, so the next request recomputes from current data. */
286
+ clearDefinitionMemo(propertyName) {
287
+ if (DEFINITION_PROPERTIES.has(propertyName)) {
288
+ this._definitionMemo.clear();
289
+ this._definitionIndexes = null;
290
+ }
291
+ }
292
+ NotifyDataChange(config, data, changeType = 'refresh', affectedEntity) {
293
+ this.clearDefinitionMemo(config.PropertyName);
294
+ super.NotifyDataChange(config, data, changeType, affectedEntity);
295
+ }
296
+ emitPropertyChange(propertyName) {
297
+ this.clearDefinitionMemo(propertyName);
298
+ super.emitPropertyChange(propertyName);
299
+ }
300
+ /** Milliseconds since the epoch for a row timestamp, or 0 when absent or unreadable. */
301
+ static timestampMs(value) {
302
+ if (value == null)
303
+ return 0;
304
+ const ms = value instanceof Date ? value.getTime() : Date.parse(value);
305
+ return Number.isNaN(ms) ? 0 : ms;
306
+ }
307
+ /**
308
+ * A 53-bit hash of `text` as hex (cyrb53). Plain JavaScript, so a browser and a server hash the
309
+ * same text to the same value.
310
+ */
311
+ static hashText(text) {
312
+ let h1 = 0xdeadbeef;
313
+ let h2 = 0x41c6ce57;
314
+ for (let i = 0; i < text.length; i++) {
315
+ const ch = text.charCodeAt(i);
316
+ h1 = Math.imul(h1 ^ ch, 2654435761);
317
+ h2 = Math.imul(h2 ^ ch, 1597334677);
318
+ }
319
+ h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);
320
+ h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);
321
+ return (4294967296 * (2097151 & h2) + (h1 >>> 0)).toString(16);
322
+ }
323
+ // --- Deleting cached results after an edit ---
324
+ /**
325
+ * Notes result-affecting edits made in this process before the base class applies the event.
326
+ * Only local saves and deletes count: every server's engine also hears about the edit, through
327
+ * the shared cache, but only the server that made it deletes the slots, so a fleet does not
328
+ * delete the same slots once per server while the others refill them.
329
+ */
330
+ async HandleIndividualBaseEntityEvent(event) {
331
+ try {
332
+ this.trackDefinitionEdit(event);
333
+ }
334
+ catch (e) {
335
+ LogError(`QueryEngine: tracking a query edit failed: ${e instanceof Error ? e.message : String(e)}`);
336
+ }
337
+ return super.HandleIndividualBaseEntityEvent(event);
338
+ }
339
+ /**
340
+ * Follows one save or delete of a query definition row. A save is judged when it starts, while
341
+ * the record still knows which columns are dirty, and acted on when it succeeds. A delete
342
+ * always counts. The slots of the affected query and of every query that composes it are then
343
+ * deleted once the edit settles (see {@link DefinitionEditSettleMs}). Deleting them is
344
+ * housekeeping: a read under the new definition already misses them (see
345
+ * {@link GetDefinitionSignature}).
346
+ */
347
+ trackDefinitionEdit(event) {
348
+ const entity = event.baseEntity;
349
+ const columns = entity ? RESULT_AFFECTING_COLUMNS[entity.EntityInfo.Name.trim().toLowerCase()] : undefined;
350
+ if (!entity || !columns)
351
+ return;
352
+ if (event.type === 'save_started') {
353
+ if (QueryEngine_1.isResultAffectingSave(entity, columns)) {
354
+ this._resultAffectingSaves.add(entity);
355
+ }
356
+ return;
357
+ }
358
+ if (event.type === 'save' && this._resultAffectingSaves.has(entity)) {
359
+ this._resultAffectingSaves.delete(entity);
360
+ this.invalidateAfterEdit(QueryEngine_1.editedQueryID(entity, undefined));
361
+ }
362
+ else if (event.type === 'delete') {
363
+ const payload = event.payload;
364
+ this.invalidateAfterEdit(QueryEngine_1.editedQueryID(entity, payload?.OldValues));
365
+ }
366
+ }
367
+ /** True for a create, or an update with any of `columns` dirty. */
368
+ static isResultAffectingSave(entity, columns) {
369
+ if (!entity.IsSaved || columns === 'all')
370
+ return true;
371
+ return columns.some(name => entity.GetFieldByName(name)?.Dirty === true);
372
+ }
373
+ /** The query a definition row belongs to: the row itself for a query, else its QueryID. */
374
+ static editedQueryID(entity, deletedValues) {
375
+ const isQuery = entity.EntityInfo.Name.trim().toLowerCase() === 'mj: queries';
376
+ const field = isQuery ? 'ID' : 'QueryID';
377
+ const value = deletedValues?.[field] ?? entity.GetFieldByName(field)?.Value;
378
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
379
+ }
380
+ /** Schedules slot deletion for `queryID` and every query that composes it, directly or not. */
381
+ invalidateAfterEdit(queryID) {
382
+ if (!queryID)
383
+ return;
384
+ for (const id of this.queryAndDependents(queryID)) {
385
+ this.scheduleSlotInvalidation(id);
386
+ }
387
+ }
388
+ /** `queryID` plus every query that reaches it through composition. Cycles end the walk. */
389
+ queryAndDependents(queryID) {
390
+ const dependents = this.definitionIndexes().DependentsByQuery;
391
+ const seen = new Set();
392
+ const result = [];
393
+ const pending = [queryID];
394
+ while (pending.length > 0) {
395
+ const id = pending.pop();
396
+ const key = id.trim().toLowerCase();
397
+ if (seen.has(key))
398
+ continue;
399
+ seen.add(key);
400
+ result.push(id);
401
+ for (const row of dependents.Get(id) ?? []) {
402
+ pending.push(row.QueryID);
403
+ }
404
+ }
405
+ return result;
406
+ }
407
+ /** (Re)starts the settle timer for one query's slot deletion. */
408
+ scheduleSlotInvalidation(queryID) {
409
+ const key = queryID.trim().toLowerCase();
410
+ const existing = this._pendingSlotInvalidations.get(key);
411
+ if (existing)
412
+ clearTimeout(existing);
413
+ const timer = setTimeout(() => {
414
+ this._pendingSlotInvalidations.delete(key);
415
+ void this.invalidateQuerySlots(queryID);
416
+ }, this.DefinitionEditSettleMs);
417
+ // A pending deletion must not keep a short-lived process (a CLI run) alive.
418
+ timer.unref?.();
419
+ this._pendingSlotInvalidations.set(key, timer);
420
+ }
421
+ /** Deletes one query's cached results. Never throws. */
422
+ async invalidateQuerySlots(queryID) {
423
+ try {
424
+ const cache = LocalCacheManager.Instance;
425
+ if (!cache.IsInitialized)
426
+ return;
427
+ const removed = await cache.InvalidateRunQueryResultsForQuery(queryID);
428
+ LogStatusEx({ message: `QueryEngine: deleted ${removed} cached result slot(s) of query ${queryID} after its definition changed`, verboseOnly: true });
429
+ }
430
+ catch (e) {
431
+ LogError(`QueryEngine: deleting cached results of query ${queryID} failed: ${e instanceof Error ? e.message : String(e)}`);
432
+ }
433
+ }
155
434
  };
156
- QueryEngine = __decorate([
435
+ QueryEngine = QueryEngine_1 = __decorate([
157
436
  RegisterForStartup()
158
437
  ], QueryEngine);
159
438
  export { QueryEngine };
@@ -1 +1 @@
1
- {"version":3,"file":"QueryEngine.js","sourceRoot":"","sources":["../../src/engines/QueryEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QueryEngine.js","sourceRoot":"","sources":["../../src/engines/QueryEngine.ts"],"names":[],"mappings":"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"}