@memberjunction/metadata-sync 5.41.0 → 5.42.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/lib/database-reference-scanner.d.ts +30 -4
- package/dist/lib/database-reference-scanner.d.ts.map +1 -1
- package/dist/lib/database-reference-scanner.js +139 -61
- package/dist/lib/database-reference-scanner.js.map +1 -1
- package/dist/lib/deletion-auditor.d.ts +9 -0
- package/dist/lib/deletion-auditor.d.ts.map +1 -1
- package/dist/lib/deletion-auditor.js +88 -3
- package/dist/lib/deletion-auditor.js.map +1 -1
- package/dist/lib/provider-utils.d.ts.map +1 -1
- package/dist/lib/provider-utils.js +13 -1
- package/dist/lib/provider-utils.js.map +1 -1
- package/dist/plugins/index.d.ts +74 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +569 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/services/PushService.d.ts +20 -0
- package/dist/services/PushService.d.ts.map +1 -1
- package/dist/services/PushService.js +21 -0
- package/dist/services/PushService.js.map +1 -1
- package/package.json +26 -12
|
@@ -21,16 +21,46 @@ export interface DatabaseReference {
|
|
|
21
21
|
export declare class DatabaseReferenceScanner {
|
|
22
22
|
private metadata;
|
|
23
23
|
private contextUser;
|
|
24
|
+
/** Memoized entity-info lookups so repeated primary-key extraction stays O(1). */
|
|
25
|
+
private entityInfoCache;
|
|
24
26
|
constructor(metadata: Metadata, contextUser: UserInfo);
|
|
25
27
|
/**
|
|
26
28
|
* Scan database for records that reference records marked for deletion
|
|
27
29
|
*
|
|
30
|
+
* Queries are batched: all delete-target primary keys of a given entity are checked against
|
|
31
|
+
* each referencing foreign key in a single `IN (...)` query, rather than one query per
|
|
32
|
+
* (record × referencing field). Metadata membership is resolved via a pre-built key set
|
|
33
|
+
* instead of re-scanning every metadata record for each reference found.
|
|
34
|
+
*
|
|
28
35
|
* @param recordsToDelete Records that will be deleted
|
|
29
36
|
* @param reverseFKMap Map of entity -> entities that reference it
|
|
30
37
|
* @param allMetadataRecords All records from metadata (for checking if DB record exists in metadata)
|
|
31
38
|
* @returns Array of database references found
|
|
32
39
|
*/
|
|
33
40
|
scanForReferences(recordsToDelete: FlattenedRecord[], reverseFKMap: Map<string, ReverseFKInfo[]>, allMetadataRecords: FlattenedRecord[]): Promise<DatabaseReference[]>;
|
|
41
|
+
/**
|
|
42
|
+
* Run a single batched lookup for one referencing foreign key against a chunk of
|
|
43
|
+
* delete-target primary keys, appending any matches to {@link out}.
|
|
44
|
+
*/
|
|
45
|
+
private scanReferencingFieldBatch;
|
|
46
|
+
/**
|
|
47
|
+
* Group delete-target records by entity, collecting each entity's primary-key values and a
|
|
48
|
+
* normalized value -> CompositeKey map for mapping query results back to the original record.
|
|
49
|
+
*/
|
|
50
|
+
private groupRecordsByEntity;
|
|
51
|
+
/**
|
|
52
|
+
* Build a set of `entityName::normalizedKey` strings for every metadata record, enabling O(1)
|
|
53
|
+
* "does this record exist in metadata" checks.
|
|
54
|
+
*/
|
|
55
|
+
private buildMetadataKeySet;
|
|
56
|
+
/** Composite map/set key for an (entity, primary key) pair, normalized for case-insensitive match. */
|
|
57
|
+
private metadataKey;
|
|
58
|
+
/** Normalize an identifier for case-insensitive comparison (UUIDs differ in case across SQL Server / PostgreSQL). */
|
|
59
|
+
private normalizeId;
|
|
60
|
+
/** Split an array into chunks of at most `size`. */
|
|
61
|
+
private chunk;
|
|
62
|
+
/** Memoized entity lookup by name (avoids repeated O(N) scans of the entity list). */
|
|
63
|
+
private entityInfoByName;
|
|
34
64
|
/**
|
|
35
65
|
* Extract primary key from a flattened record
|
|
36
66
|
*/
|
|
@@ -39,10 +69,6 @@ export declare class DatabaseReferenceScanner {
|
|
|
39
69
|
* Get primary key from a simple record (plain object from RunView with ResultType: 'simple')
|
|
40
70
|
*/
|
|
41
71
|
private getPrimaryKeyFromSimpleRecord;
|
|
42
|
-
/**
|
|
43
|
-
* Check if a database record exists in metadata files
|
|
44
|
-
*/
|
|
45
|
-
private checkIfInMetadata;
|
|
46
72
|
/**
|
|
47
73
|
* Get orphaned references (database-only records not in metadata)
|
|
48
74
|
* These will prevent deletion unless handled
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database-reference-scanner.d.ts","sourceRoot":"","sources":["../../src/lib/database-reference-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAW,QAAQ,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"database-reference-scanner.d.ts","sourceRoot":"","sources":["../../src/lib/database-reference-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAW,QAAQ,EAAE,YAAY,EAAc,MAAM,sBAAsB,CAAC;AAC7F,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAS5D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,YAAY,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,YAAY,CAAC;IAC5B,gBAAgB,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;GAKG;AACH,qBAAa,wBAAwB;IAK7B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,WAAW;IALvB,kFAAkF;IAClF,OAAO,CAAC,eAAe,CAA6C;gBAGxD,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,QAAQ;IAGjC;;;;;;;;;;;;OAYG;IACG,iBAAiB,CACnB,eAAe,EAAE,eAAe,EAAE,EAClC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,EAC1C,kBAAkB,EAAE,eAAe,EAAE,GACtC,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAgC/B;;;OAGG;YACW,yBAAyB;IA2DvC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAgC5B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAW3B,sGAAsG;IACtG,OAAO,CAAC,WAAW;IAInB,qHAAqH;IACrH,OAAO,CAAC,WAAW;IAInB,oDAAoD;IACpD,OAAO,CAAC,KAAK;IAWb,sFAAsF;IACtF,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoCzB;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAoCrC;;;OAGG;IACH,qBAAqB,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,EAAE;IAI3E;;;OAGG;IACH,qBAAqB,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,EAAE;CAG9E"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { RunView, CompositeKey } from '@memberjunction/core';
|
|
2
|
+
/**
|
|
3
|
+
* Maximum number of primary-key values placed in a single batched `IN (...)` filter when scanning
|
|
4
|
+
* for database references. Keeps each generated query within SQL Server / provider size limits while
|
|
5
|
+
* still collapsing thousands of per-record lookups into a handful of queries.
|
|
6
|
+
*/
|
|
7
|
+
const REFERENCE_SCAN_CHUNK_SIZE = 1000;
|
|
2
8
|
/**
|
|
3
9
|
* Scans the database for existing records that reference records marked for deletion
|
|
4
10
|
* This helps identify:
|
|
@@ -9,10 +15,17 @@ export class DatabaseReferenceScanner {
|
|
|
9
15
|
constructor(metadata, contextUser) {
|
|
10
16
|
this.metadata = metadata;
|
|
11
17
|
this.contextUser = contextUser;
|
|
18
|
+
/** Memoized entity-info lookups so repeated primary-key extraction stays O(1). */
|
|
19
|
+
this.entityInfoCache = new Map();
|
|
12
20
|
}
|
|
13
21
|
/**
|
|
14
22
|
* Scan database for records that reference records marked for deletion
|
|
15
23
|
*
|
|
24
|
+
* Queries are batched: all delete-target primary keys of a given entity are checked against
|
|
25
|
+
* each referencing foreign key in a single `IN (...)` query, rather than one query per
|
|
26
|
+
* (record × referencing field). Metadata membership is resolved via a pre-built key set
|
|
27
|
+
* instead of re-scanning every metadata record for each reference found.
|
|
28
|
+
*
|
|
16
29
|
* @param recordsToDelete Records that will be deleted
|
|
17
30
|
* @param reverseFKMap Map of entity -> entities that reference it
|
|
18
31
|
* @param allMetadataRecords All records from metadata (for checking if DB record exists in metadata)
|
|
@@ -21,61 +34,142 @@ export class DatabaseReferenceScanner {
|
|
|
21
34
|
async scanForReferences(recordsToDelete, reverseFKMap, allMetadataRecords) {
|
|
22
35
|
const references = [];
|
|
23
36
|
const rv = new RunView();
|
|
24
|
-
|
|
25
|
-
|
|
37
|
+
// Pre-build O(1) membership of "(entity, key) exists somewhere in metadata".
|
|
38
|
+
const metadataKeys = this.buildMetadataKeySet(allMetadataRecords);
|
|
39
|
+
// Group delete targets by entity so all of an entity's primary keys can hit each
|
|
40
|
+
// referencing table in one batched query.
|
|
41
|
+
const groups = this.groupRecordsByEntity(recordsToDelete);
|
|
42
|
+
for (const [referencedEntity, group] of groups) {
|
|
43
|
+
const referencingEntities = reverseFKMap.get(referencedEntity) || [];
|
|
44
|
+
for (const refInfo of referencingEntities) {
|
|
45
|
+
for (const valueChunk of this.chunk(group.pkValues, REFERENCE_SCAN_CHUNK_SIZE)) {
|
|
46
|
+
await this.scanReferencingFieldBatch(rv, referencedEntity, refInfo, valueChunk, group.keyByValue, metadataKeys, references);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return references;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Run a single batched lookup for one referencing foreign key against a chunk of
|
|
54
|
+
* delete-target primary keys, appending any matches to {@link out}.
|
|
55
|
+
*/
|
|
56
|
+
async scanReferencingFieldBatch(rv, referencedEntity, refInfo, pkValues, keyByValue, metadataKeys, out) {
|
|
57
|
+
if (pkValues.length === 0) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
const inList = pkValues.map(v => `'${v.replace(/'/g, "''")}'`).join(', ');
|
|
62
|
+
const filter = `${refInfo.fieldName} IN (${inList})`;
|
|
63
|
+
const result = await rv.RunView({
|
|
64
|
+
EntityName: refInfo.entityName,
|
|
65
|
+
ExtraFilter: filter,
|
|
66
|
+
IgnoreMaxRows: true, // a single batched query can match far more rows than the entity's UserViewMaxRows cap
|
|
67
|
+
ResultType: 'simple' // More efficient - we don't need entity objects
|
|
68
|
+
}, this.contextUser);
|
|
69
|
+
if (!result.Success || !result.Results || result.Results.length === 0) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
for (const dbRecord of result.Results) {
|
|
73
|
+
const refPrimaryKey = this.getPrimaryKeyFromSimpleRecord(dbRecord, refInfo.entityName);
|
|
74
|
+
if (!refPrimaryKey) {
|
|
75
|
+
console.warn(`Cannot get primary key for ${refInfo.entityName} record`);
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
// Map the referencing FK value back to the exact CompositeKey of the deleted record.
|
|
79
|
+
const referencedRaw = dbRecord[refInfo.fieldName];
|
|
80
|
+
const referencedKey = referencedRaw != null
|
|
81
|
+
? keyByValue.get(this.normalizeId(referencedRaw.toString()))
|
|
82
|
+
: undefined;
|
|
83
|
+
out.push({
|
|
84
|
+
entityName: refInfo.entityName,
|
|
85
|
+
primaryKey: refPrimaryKey,
|
|
86
|
+
referencingField: refInfo.fieldName,
|
|
87
|
+
referencedEntity,
|
|
88
|
+
referencedKey: referencedKey ?? CompositeKey.FromID(referencedRaw != null ? referencedRaw.toString() : ''),
|
|
89
|
+
existsInMetadata: metadataKeys.has(this.metadataKey(refInfo.entityName, refPrimaryKey))
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.error(`Error scanning references from ${refInfo.entityName}.${refInfo.fieldName} ` +
|
|
95
|
+
`to ${referencedEntity}:`, error);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Group delete-target records by entity, collecting each entity's primary-key values and a
|
|
100
|
+
* normalized value -> CompositeKey map for mapping query results back to the original record.
|
|
101
|
+
*/
|
|
102
|
+
groupRecordsByEntity(records) {
|
|
103
|
+
const groups = new Map();
|
|
104
|
+
for (const record of records) {
|
|
26
105
|
const primaryKey = this.extractPrimaryKey(record);
|
|
27
106
|
if (!primaryKey) {
|
|
28
|
-
console.warn(`Cannot scan references for ${entityName}: no primary key found`);
|
|
107
|
+
console.warn(`Cannot scan references for ${record.entityName}: no primary key found`);
|
|
29
108
|
continue;
|
|
30
109
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
ExtraFilter: filter,
|
|
44
|
-
ResultType: 'simple' // More efficient - we don't need entity objects
|
|
45
|
-
}, this.contextUser);
|
|
46
|
-
if (result.Success && result.Results && result.Results.length > 0) {
|
|
47
|
-
// Found database records that reference this record
|
|
48
|
-
for (const dbRecord of result.Results) {
|
|
49
|
-
const refPrimaryKey = this.getPrimaryKeyFromSimpleRecord(dbRecord, refInfo.entityName);
|
|
50
|
-
if (!refPrimaryKey) {
|
|
51
|
-
console.warn(`Cannot get primary key for ${refInfo.entityName} record`);
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
references.push({
|
|
55
|
-
entityName: refInfo.entityName,
|
|
56
|
-
primaryKey: refPrimaryKey,
|
|
57
|
-
referencingField: refInfo.fieldName,
|
|
58
|
-
referencedEntity: entityName,
|
|
59
|
-
referencedKey: primaryKey,
|
|
60
|
-
existsInMetadata: this.checkIfInMetadata(refInfo.entityName, refPrimaryKey, allMetadataRecords // Check against ALL metadata, not just deletes
|
|
61
|
-
)
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
catch (error) {
|
|
67
|
-
console.error(`Error scanning references from ${refInfo.entityName}.${refInfo.fieldName} ` +
|
|
68
|
-
`to ${entityName}:`, error);
|
|
69
|
-
}
|
|
110
|
+
const pkValue = primaryKey.KeyValuePairs.length === 1
|
|
111
|
+
? primaryKey.KeyValuePairs[0].Value
|
|
112
|
+
: primaryKey.ToConcatenatedString();
|
|
113
|
+
let group = groups.get(record.entityName);
|
|
114
|
+
if (!group) {
|
|
115
|
+
group = { pkValues: [], keyByValue: new Map() };
|
|
116
|
+
groups.set(record.entityName, group);
|
|
117
|
+
}
|
|
118
|
+
const normalized = this.normalizeId(pkValue);
|
|
119
|
+
if (!group.keyByValue.has(normalized)) {
|
|
120
|
+
group.keyByValue.set(normalized, primaryKey);
|
|
121
|
+
group.pkValues.push(pkValue);
|
|
70
122
|
}
|
|
71
123
|
}
|
|
72
|
-
return
|
|
124
|
+
return groups;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Build a set of `entityName::normalizedKey` strings for every metadata record, enabling O(1)
|
|
128
|
+
* "does this record exist in metadata" checks.
|
|
129
|
+
*/
|
|
130
|
+
buildMetadataKeySet(records) {
|
|
131
|
+
const set = new Set();
|
|
132
|
+
for (const record of records) {
|
|
133
|
+
const pk = this.extractPrimaryKey(record);
|
|
134
|
+
if (pk) {
|
|
135
|
+
set.add(this.metadataKey(record.entityName, pk));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return set;
|
|
139
|
+
}
|
|
140
|
+
/** Composite map/set key for an (entity, primary key) pair, normalized for case-insensitive match. */
|
|
141
|
+
metadataKey(entityName, primaryKey) {
|
|
142
|
+
return `${entityName}::${this.normalizeId(primaryKey.ToConcatenatedString())}`;
|
|
143
|
+
}
|
|
144
|
+
/** Normalize an identifier for case-insensitive comparison (UUIDs differ in case across SQL Server / PostgreSQL). */
|
|
145
|
+
normalizeId(value) {
|
|
146
|
+
return value.trim().toUpperCase();
|
|
147
|
+
}
|
|
148
|
+
/** Split an array into chunks of at most `size`. */
|
|
149
|
+
chunk(items, size) {
|
|
150
|
+
if (items.length <= size) {
|
|
151
|
+
return items.length ? [items] : [];
|
|
152
|
+
}
|
|
153
|
+
const result = [];
|
|
154
|
+
for (let i = 0; i < items.length; i += size) {
|
|
155
|
+
result.push(items.slice(i, i + size));
|
|
156
|
+
}
|
|
157
|
+
return result;
|
|
158
|
+
}
|
|
159
|
+
/** Memoized entity lookup by name (avoids repeated O(N) scans of the entity list). */
|
|
160
|
+
entityInfoByName(entityName) {
|
|
161
|
+
if (this.entityInfoCache.has(entityName)) {
|
|
162
|
+
return this.entityInfoCache.get(entityName);
|
|
163
|
+
}
|
|
164
|
+
const info = this.metadata.Entities.find(e => e.Name === entityName);
|
|
165
|
+
this.entityInfoCache.set(entityName, info);
|
|
166
|
+
return info;
|
|
73
167
|
}
|
|
74
168
|
/**
|
|
75
169
|
* Extract primary key from a flattened record
|
|
76
170
|
*/
|
|
77
171
|
extractPrimaryKey(record) {
|
|
78
|
-
const entityInfo = this.
|
|
172
|
+
const entityInfo = this.entityInfoByName(record.entityName);
|
|
79
173
|
if (!entityInfo) {
|
|
80
174
|
return null;
|
|
81
175
|
}
|
|
@@ -107,7 +201,7 @@ export class DatabaseReferenceScanner {
|
|
|
107
201
|
* Get primary key from a simple record (plain object from RunView with ResultType: 'simple')
|
|
108
202
|
*/
|
|
109
203
|
getPrimaryKeyFromSimpleRecord(record, entityName) {
|
|
110
|
-
const entityInfo = this.
|
|
204
|
+
const entityInfo = this.entityInfoByName(entityName);
|
|
111
205
|
if (!entityInfo) {
|
|
112
206
|
return null;
|
|
113
207
|
}
|
|
@@ -135,22 +229,6 @@ export class DatabaseReferenceScanner {
|
|
|
135
229
|
}
|
|
136
230
|
return CompositeKey.FromKeyValuePairs(keyPairs);
|
|
137
231
|
}
|
|
138
|
-
/**
|
|
139
|
-
* Check if a database record exists in metadata files
|
|
140
|
-
*/
|
|
141
|
-
checkIfInMetadata(entityName, primaryKey, records) {
|
|
142
|
-
const keyString = primaryKey.ToConcatenatedString();
|
|
143
|
-
for (const record of records) {
|
|
144
|
-
if (record.entityName !== entityName) {
|
|
145
|
-
continue;
|
|
146
|
-
}
|
|
147
|
-
const recordKey = this.extractPrimaryKey(record);
|
|
148
|
-
if (recordKey && recordKey.ToConcatenatedString() === keyString) {
|
|
149
|
-
return true;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
return false;
|
|
153
|
-
}
|
|
154
232
|
/**
|
|
155
233
|
* Get orphaned references (database-only records not in metadata)
|
|
156
234
|
* These will prevent deletion unless handled
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database-reference-scanner.js","sourceRoot":"","sources":["../../src/lib/database-reference-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,OAAO,EAAY,YAAY,
|
|
1
|
+
{"version":3,"file":"database-reference-scanner.js","sourceRoot":"","sources":["../../src/lib/database-reference-scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,8 @@ export interface DeletionAudit {
|
|
|
22
22
|
export declare class DeletionAuditor {
|
|
23
23
|
private metadata;
|
|
24
24
|
private contextUser;
|
|
25
|
+
/** Maximum number of values placed in a single `IN (...)` clause when batching existence checks. */
|
|
26
|
+
private static readonly MAX_IN_CLAUSE;
|
|
25
27
|
constructor(metadata: Metadata, contextUser: UserInfo);
|
|
26
28
|
/**
|
|
27
29
|
* Perform comprehensive deletion audit across all metadata files
|
|
@@ -52,6 +54,13 @@ export declare class DeletionAuditor {
|
|
|
52
54
|
* Returns records separated into existing (need deletion) and already deleted
|
|
53
55
|
*/
|
|
54
56
|
private checkRecordExistence;
|
|
57
|
+
/**
|
|
58
|
+
* Batched existence check for single-primary-key entities. Resolves all keys with a small
|
|
59
|
+
* number of `IN (...)` queries instead of one round-trip per record.
|
|
60
|
+
*/
|
|
61
|
+
private checkSinglePkExistence;
|
|
62
|
+
/** Per-record existence fallback for composite-key or unknown entities. */
|
|
63
|
+
private checkExistencePerRecord;
|
|
55
64
|
/**
|
|
56
65
|
* Find orphaned references (database records not in metadata files)
|
|
57
66
|
* These will prevent deletion unless handled
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deletion-auditor.d.ts","sourceRoot":"","sources":["../../src/lib/deletion-auditor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"deletion-auditor.d.ts","sourceRoot":"","sources":["../../src/lib/deletion-auditor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAW,MAAM,sBAAsB,CAAC;AACnE,OAAO,EACH,eAAe,EACf,iBAAiB,EAEpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAA4B,MAAM,8BAA8B,CAAC;AAG3F;;GAEG;AACH,MAAM,WAAW,aAAa;IAE1B,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAG9C,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAG9C,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAG7C,sBAAsB,EAAE,iBAAiB,EAAE,CAAC;IAI5C,qBAAqB,EAAE,eAAe,EAAE,CAAC;IAGzC,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAGtD,cAAc,EAAE,eAAe,EAAE,EAAE,CAAC;IAGpC,oBAAoB,EAAE,MAAM,EAAE,EAAE,CAAC;IACjC,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;CAC3C;AAED;;;GAGG;AACH,qBAAa,eAAe;IAKpB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,WAAW;IALvB,oGAAoG;IACpG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAQ;gBAGjC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,QAAQ;IAGjC;;;;;;;;;;;;;OAaG;IACG,cAAc,CAAC,UAAU,EAAE,eAAe,EAAE,EAAE,YAAY,GAAE,OAAe,GAAG,OAAO,CAAC,aAAa,CAAC;IA8F1G;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAmC3B;;;OAGG;YACW,oBAAoB;IAqClC;;;OAGG;YACW,sBAAsB;IA2DpC,2EAA2E;YAC7D,uBAAuB;IAwBrC;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAqB9B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,4CAA4C;IAsEpD;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IA2ChC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IAKtC;;;OAGG;IACH,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;CAGtD"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { RunView } from '@memberjunction/core';
|
|
1
2
|
import { RecordDependencyAnalyzer } from './record-dependency-analyzer.js';
|
|
2
3
|
import { DatabaseReferenceScanner } from './database-reference-scanner.js';
|
|
3
4
|
import { EntityForeignKeyHelper } from './entity-foreign-key-helper.js';
|
|
@@ -7,6 +8,8 @@ import { SyncEngine } from './sync-engine.js';
|
|
|
7
8
|
* Identifies all records that need to be deleted, in what order, and potential issues
|
|
8
9
|
*/
|
|
9
10
|
export class DeletionAuditor {
|
|
11
|
+
/** Maximum number of values placed in a single `IN (...)` clause when batching existence checks. */
|
|
12
|
+
static { this.MAX_IN_CLAUSE = 1000; }
|
|
10
13
|
constructor(metadata, contextUser) {
|
|
11
14
|
this.metadata = metadata;
|
|
12
15
|
this.contextUser = contextUser;
|
|
@@ -135,11 +138,94 @@ export class DeletionAuditor {
|
|
|
135
138
|
async checkRecordExistence(records) {
|
|
136
139
|
const existingRecords = [];
|
|
137
140
|
const alreadyDeleted = new Map();
|
|
138
|
-
|
|
141
|
+
if (records.length === 0) {
|
|
142
|
+
return { existingRecords, alreadyDeleted };
|
|
143
|
+
}
|
|
144
|
+
// Group by entity so each entity's keys can be checked in batched IN(...) queries
|
|
145
|
+
// instead of one database round-trip per record.
|
|
146
|
+
const byEntity = new Map();
|
|
147
|
+
for (const record of records) {
|
|
148
|
+
const list = byEntity.get(record.entityName);
|
|
149
|
+
if (list) {
|
|
150
|
+
list.push(record);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
byEntity.set(record.entityName, [record]);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
for (const [entityName, entityRecords] of byEntity) {
|
|
157
|
+
const entityInfo = this.metadata.Entities.find(e => e.Name === entityName);
|
|
158
|
+
const primaryKeys = entityInfo?.PrimaryKeys ?? [];
|
|
159
|
+
if (entityInfo && primaryKeys.length === 1) {
|
|
160
|
+
await this.checkSinglePkExistence(entityName, primaryKeys[0].Name, entityRecords, existingRecords, alreadyDeleted);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
// Composite key or unknown entity: fall back to per-record existence checks.
|
|
164
|
+
await this.checkExistencePerRecord(entityRecords, existingRecords, alreadyDeleted);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return { existingRecords, alreadyDeleted };
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Batched existence check for single-primary-key entities. Resolves all keys with a small
|
|
171
|
+
* number of `IN (...)` queries instead of one round-trip per record.
|
|
172
|
+
*/
|
|
173
|
+
async checkSinglePkExistence(entityName, pkField, records, existingRecords, alreadyDeleted) {
|
|
174
|
+
const recordByKey = new Map();
|
|
175
|
+
for (const record of records) {
|
|
176
|
+
const value = record.record.primaryKey?.[pkField] ?? record.record.fields?.[pkField];
|
|
177
|
+
if (value == null) {
|
|
178
|
+
// Cannot determine the key — assume it still exists (safe: avoids skipping a real delete).
|
|
179
|
+
existingRecords.push(record);
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
recordByKey.set(value.toString().trim().toUpperCase(), record);
|
|
183
|
+
}
|
|
184
|
+
const existing = new Set();
|
|
185
|
+
const rv = new RunView();
|
|
186
|
+
const keys = Array.from(recordByKey.keys());
|
|
187
|
+
for (let i = 0; i < keys.length; i += DeletionAuditor.MAX_IN_CLAUSE) {
|
|
188
|
+
const chunk = keys.slice(i, i + DeletionAuditor.MAX_IN_CLAUSE);
|
|
189
|
+
const inList = chunk.map(v => `'${v.replace(/'/g, "''")}'`).join(', ');
|
|
190
|
+
try {
|
|
191
|
+
const result = await rv.RunView({
|
|
192
|
+
EntityName: entityName,
|
|
193
|
+
ExtraFilter: `${pkField} IN (${inList})`,
|
|
194
|
+
Fields: [pkField],
|
|
195
|
+
IgnoreMaxRows: true, // a full IN-chunk can equal/exceed the entity's UserViewMaxRows cap
|
|
196
|
+
ResultType: 'simple'
|
|
197
|
+
}, this.contextUser);
|
|
198
|
+
if (result.Success && result.Results) {
|
|
199
|
+
for (const row of result.Results) {
|
|
200
|
+
const v = row[pkField];
|
|
201
|
+
if (v != null) {
|
|
202
|
+
existing.add(v.toString().trim().toUpperCase());
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
// Query failed — assume this chunk's records exist (safe default).
|
|
208
|
+
chunk.forEach(v => existing.add(v));
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
chunk.forEach(v => existing.add(v));
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
for (const [key, record] of recordByKey) {
|
|
216
|
+
if (existing.has(key)) {
|
|
217
|
+
existingRecords.push(record);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
alreadyDeleted.set(record.id, record);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/** Per-record existence fallback for composite-key or unknown entities. */
|
|
225
|
+
async checkExistencePerRecord(records, existingRecords, alreadyDeleted) {
|
|
139
226
|
const syncEngine = new SyncEngine(this.contextUser);
|
|
140
227
|
for (const record of records) {
|
|
141
228
|
try {
|
|
142
|
-
// Check if record exists in database
|
|
143
229
|
const existingEntity = await syncEngine.loadEntity(record.entityName, record.record.primaryKey || {});
|
|
144
230
|
if (existingEntity) {
|
|
145
231
|
existingRecords.push(record);
|
|
@@ -153,7 +239,6 @@ export class DeletionAuditor {
|
|
|
153
239
|
existingRecords.push(record);
|
|
154
240
|
}
|
|
155
241
|
}
|
|
156
|
-
return { existingRecords, alreadyDeleted };
|
|
157
242
|
}
|
|
158
243
|
/**
|
|
159
244
|
* Find orphaned references (database records not in metadata files)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deletion-auditor.js","sourceRoot":"","sources":["../../src/lib/deletion-auditor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"deletion-auditor.js","sourceRoot":"","sources":["../../src/lib/deletion-auditor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-utils.d.ts","sourceRoot":"","sources":["../../src/lib/provider-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,EAAE,oBAAoB,EAAyB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAgB7F;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAkBxF;AAsGD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"provider-utils.d.ts","sourceRoot":"","sources":["../../src/lib/provider-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,EAAE,oBAAoB,EAAyB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAgB7F;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAkBxF;AAsGD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CA2BrD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,IAAI,QAAQ,CAqBxC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,IAAI,oBAAoB,GAAG,IAAI,CAE7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,WAAW,CAAC,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,MAAM,EAAE,EACzB,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAC5B,aAAa,CAAC,EAAE,MAAM,EAAE,EACxB,aAAa,CAAC,EAAE,MAAM,EAAE,GACvB,MAAM,EAAE,CAwGV"}
|
|
@@ -151,7 +151,19 @@ async function refreshUserCacheFromPG(pgPool, coreSchema) {
|
|
|
151
151
|
*/
|
|
152
152
|
export async function cleanupProvider() {
|
|
153
153
|
if (globalPool && globalPool.connected) {
|
|
154
|
-
|
|
154
|
+
// mssql pool.close() can hang indefinitely when a query is still in flight
|
|
155
|
+
// against the closing pool (e.g. a late async metadata load racing teardown).
|
|
156
|
+
// Race it against a short timeout so callers never block on teardown — the
|
|
157
|
+
// CLI force-exits afterward, which reaps any lingering socket.
|
|
158
|
+
await Promise.race([
|
|
159
|
+
globalPool.close(),
|
|
160
|
+
new Promise((resolve) => {
|
|
161
|
+
const t = setTimeout(resolve, 4000);
|
|
162
|
+
t.unref();
|
|
163
|
+
}),
|
|
164
|
+
]).catch(() => {
|
|
165
|
+
/* swallow — best-effort cleanup */
|
|
166
|
+
});
|
|
155
167
|
globalPool = null;
|
|
156
168
|
}
|
|
157
169
|
if (globalPgPool) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-utils.js","sourceRoot":"","sources":["../../src/lib/provider-utils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"provider-utils.js","sourceRoot":"","sources":["../../src/lib/provider-utils.ts"],"names":[],"mappings":"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"}
|