prostgles-server 4.2.611 → 4.2.613
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/Audit/AuditTable.d.ts +12 -1
- package/dist/Audit/AuditTable.d.ts.map +1 -1
- package/dist/Audit/AuditTable.js +12 -1
- package/dist/Audit/AuditTable.js.map +1 -1
- package/dist/Audit/AuditTypes.d.ts +1 -2
- package/dist/Audit/AuditTypes.d.ts.map +1 -1
- package/dist/Audit/getAuditTriggerConfig.d.ts.map +1 -1
- package/dist/Audit/getAuditTriggerConfig.js +12 -4
- package/dist/Audit/getAuditTriggerConfig.js.map +1 -1
- package/dist/Audit/parseAuditConfig.d.ts.map +1 -1
- package/dist/Audit/parseAuditConfig.js +0 -4
- package/dist/Audit/parseAuditConfig.js.map +1 -1
- package/dist/DboBuilder/DboBuilder.d.ts +1 -1
- package/dist/DboBuilder/DboBuilder.d.ts.map +1 -1
- package/dist/DboBuilder/DboBuilder.js +1 -1
- package/dist/DboBuilder/DboBuilder.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts +1 -1
- package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts.map +1 -1
- package/dist/DboBuilder/joins/getInferredJoins.d.ts +4 -0
- package/dist/DboBuilder/joins/getInferredJoins.d.ts.map +1 -0
- package/dist/DboBuilder/joins/getInferredJoins.js +55 -0
- package/dist/DboBuilder/joins/getInferredJoins.js.map +1 -0
- package/dist/DboBuilder/joins/prepareShortestJoinPaths.d.ts +12 -0
- package/dist/DboBuilder/joins/prepareShortestJoinPaths.d.ts.map +1 -0
- package/dist/DboBuilder/joins/prepareShortestJoinPaths.js +165 -0
- package/dist/DboBuilder/joins/prepareShortestJoinPaths.js.map +1 -0
- package/dist/DboBuilder/joins/prepareShortestJoinPaths.spec.d.ts.map +1 -0
- package/dist/DboBuilder/joins/prepareShortestJoinPaths.spec.js +67 -0
- package/dist/DboBuilder/joins/prepareShortestJoinPaths.spec.js.map +1 -0
- package/dist/DboBuilder/joins/shortestPath.d.ts.map +1 -0
- package/dist/{shortestPath.js → DboBuilder/joins/shortestPath.js} +11 -11
- package/dist/DboBuilder/joins/shortestPath.js.map +1 -0
- package/dist/ProstglesTypes.d.ts +4 -3
- package/dist/ProstglesTypes.d.ts.map +1 -1
- package/dist/TableConfig/TableRowFromColumnDefinitions.d.ts +8 -0
- package/dist/TableConfig/TableRowFromColumnDefinitions.d.ts.map +1 -1
- package/dist/utils/utils.d.ts +1 -0
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +8 -3
- package/dist/utils/utils.js.map +1 -1
- package/lib/Audit/AuditTable.ts +12 -1
- package/lib/Audit/AuditTypes.ts +1 -2
- package/lib/Audit/getAuditTriggerConfig.ts +12 -4
- package/lib/Audit/parseAuditConfig.ts +0 -4
- package/lib/DboBuilder/DboBuilder.ts +13 -10
- package/lib/DboBuilder/ViewHandler/ViewHandler.ts +1 -1
- package/lib/DboBuilder/joins/getInferredJoins.ts +59 -0
- package/lib/DboBuilder/joins/prepareShortestJoinPaths.spec.ts +72 -0
- package/lib/DboBuilder/joins/prepareShortestJoinPaths.ts +205 -0
- package/lib/{shortestPath.ts → DboBuilder/joins/shortestPath.ts} +14 -13
- package/lib/ProstglesTypes.ts +4 -3
- package/lib/TableConfig/TableRowFromColumnDefinitions.ts +18 -12
- package/lib/utils/utils.ts +6 -0
- package/package.json +1 -1
- package/tsconfig.json +1 -1
- package/dist/DboBuilder/prepareShortestJoinPaths.d.ts +0 -12
- package/dist/DboBuilder/prepareShortestJoinPaths.d.ts.map +0 -1
- package/dist/DboBuilder/prepareShortestJoinPaths.js +0 -186
- package/dist/DboBuilder/prepareShortestJoinPaths.js.map +0 -1
- package/dist/DboBuilder/prepareShortestJoinPaths.spec.d.ts.map +0 -1
- package/dist/DboBuilder/prepareShortestJoinPaths.spec.js +0 -30
- package/dist/DboBuilder/prepareShortestJoinPaths.spec.js.map +0 -1
- package/dist/shortestPath.d.ts.map +0 -1
- package/dist/shortestPath.js.map +0 -1
- package/lib/DboBuilder/prepareShortestJoinPaths.spec.ts +0 -29
- package/lib/DboBuilder/prepareShortestJoinPaths.ts +0 -225
- /package/dist/DboBuilder/{prepareShortestJoinPaths.spec.d.ts → joins/prepareShortestJoinPaths.spec.d.ts} +0 -0
- /package/dist/{shortestPath.d.ts → DboBuilder/joins/shortestPath.d.ts} +0 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
7
|
+
const node_test_1 = __importDefault(require("node:test"));
|
|
8
|
+
const prepareShortestJoinPaths_1 = require("./prepareShortestJoinPaths");
|
|
9
|
+
void (0, node_test_1.default)("duplicate configured table pairs are rejected even during table configuration", () => {
|
|
10
|
+
const join = {
|
|
11
|
+
tables: ["conditions", "members"],
|
|
12
|
+
on: [{ project_id: "project_id" }],
|
|
13
|
+
type: "many-many",
|
|
14
|
+
};
|
|
15
|
+
for (const preparingTableConfig of [false, true]) {
|
|
16
|
+
for (const override of [false, true]) {
|
|
17
|
+
for (const tables of [join.tables, [...join.tables].reverse()]) {
|
|
18
|
+
const builder = {
|
|
19
|
+
prostgles: {
|
|
20
|
+
preparingTableConfig,
|
|
21
|
+
opts: { joins: [join, { ...join, tables, override }] },
|
|
22
|
+
},
|
|
23
|
+
tablesOrViews: [],
|
|
24
|
+
};
|
|
25
|
+
strict_1.default.throws(() => (0, prepareShortestJoinPaths_1.prepareShortestJoinPaths)(builder), /Duplicate configured join for table pair/);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
void (0, node_test_1.default)("configured joins are deferred only during table configuration", () => {
|
|
31
|
+
const builder = {
|
|
32
|
+
prostgles: {
|
|
33
|
+
preparingTableConfig: true,
|
|
34
|
+
opts: {
|
|
35
|
+
joins: [
|
|
36
|
+
{
|
|
37
|
+
tables: ["conditions", "members"],
|
|
38
|
+
on: [{ project_id: "project_id" }],
|
|
39
|
+
type: "many-many",
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
tablesOrViews: [],
|
|
45
|
+
};
|
|
46
|
+
strict_1.default.deepEqual((0, prepareShortestJoinPaths_1.prepareShortestJoinPaths)(builder).joins, []);
|
|
47
|
+
builder.prostgles.preparingTableConfig = false;
|
|
48
|
+
strict_1.default.throws(() => (0, prepareShortestJoinPaths_1.prepareShortestJoinPaths)(builder), (error) => typeof error === "string" && error.includes("Table not found: conditions"));
|
|
49
|
+
});
|
|
50
|
+
void (0, node_test_1.default)("existing configured joins remain available during table configuration", () => {
|
|
51
|
+
const join = {
|
|
52
|
+
tables: ["conditions", "members"],
|
|
53
|
+
on: [{ project_id: "project_id" }],
|
|
54
|
+
type: "many-many",
|
|
55
|
+
};
|
|
56
|
+
const builder = {
|
|
57
|
+
prostgles: { preparingTableConfig: true, opts: { joins: [join] } },
|
|
58
|
+
tablesOrViews: ["conditions", "members"].map((name) => ({
|
|
59
|
+
name,
|
|
60
|
+
columns: [{ name: "project_id" }],
|
|
61
|
+
})),
|
|
62
|
+
};
|
|
63
|
+
strict_1.default.deepEqual((0, prepareShortestJoinPaths_1.prepareShortestJoinPaths)(builder).joins, [join]);
|
|
64
|
+
builder.prostgles.preparingTableConfig = false;
|
|
65
|
+
strict_1.default.deepEqual((0, prepareShortestJoinPaths_1.prepareShortestJoinPaths)(builder).joins, [join]);
|
|
66
|
+
});
|
|
67
|
+
//# sourceMappingURL=prepareShortestJoinPaths.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepareShortestJoinPaths.spec.js","sourceRoot":"","sources":["../../../lib/DboBuilder/joins/prepareShortestJoinPaths.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shortestPath.d.ts","sourceRoot":"","sources":["../../../lib/DboBuilder/joins/shortestPath.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,KAAK,GAAG;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,OAAO,KAAK,EACZ,WAAW,MAAM,EACjB,SAAS,MAAM,KACd;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAgEpC,CAAC"}
|
|
@@ -1,16 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.findShortestPath = void 0;
|
|
4
|
-
const shortestDistanceNode = (distances, visited) => {
|
|
5
|
-
let shortest = null;
|
|
6
|
-
for (const node in distances) {
|
|
7
|
-
const currentIsShortest = shortest === null || distances[node] < distances[shortest];
|
|
8
|
-
if (currentIsShortest && !visited.includes(node)) {
|
|
9
|
-
shortest = node;
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
return shortest;
|
|
13
|
-
};
|
|
14
4
|
const findShortestPath = (graph, startNode, endNode) => {
|
|
15
5
|
// establish object for recording distances from the start node
|
|
16
6
|
let distances = {};
|
|
@@ -71,7 +61,17 @@ const findShortestPath = (graph, startNode, endNode) => {
|
|
|
71
61
|
return results;
|
|
72
62
|
};
|
|
73
63
|
exports.findShortestPath = findShortestPath;
|
|
74
|
-
|
|
64
|
+
const shortestDistanceNode = (distances, visited) => {
|
|
65
|
+
let shortest = null;
|
|
66
|
+
for (const node in distances) {
|
|
67
|
+
const currentIsShortest = shortest === null || distances[node] < distances[shortest];
|
|
68
|
+
if (currentIsShortest && !visited.includes(node)) {
|
|
69
|
+
shortest = node;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return shortest;
|
|
73
|
+
};
|
|
74
|
+
/* Example:
|
|
75
75
|
|
|
76
76
|
const graph = {
|
|
77
77
|
start: { A: 5, B: 2 },
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shortestPath.js","sourceRoot":"","sources":["../../../lib/DboBuilder/joins/shortestPath.ts"],"names":[],"mappings":"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"}
|
package/dist/ProstglesTypes.d.ts
CHANGED
|
@@ -81,6 +81,8 @@ export type Join = {
|
|
|
81
81
|
[key: string]: string;
|
|
82
82
|
}[];
|
|
83
83
|
type: (typeof JOIN_TYPES)[number];
|
|
84
|
+
/** Replace inferred joins for this table pair. Defaults to false. */
|
|
85
|
+
override?: boolean;
|
|
84
86
|
};
|
|
85
87
|
type Joins = Join[] | "inferred";
|
|
86
88
|
type ModifyClientSchema<SUser extends SessionUser = SessionUser> = (table: DBSchemaTable, tableConfig: TableConfig[string] | undefined, userData: AuthResultWithSID<SUser> | undefined, resolvedAuditConfig: ResolvedAuditConfig | undefined) => MaybePromise<DBSchemaTable>;
|
|
@@ -168,9 +170,8 @@ export type ProstglesInitOptions<S = void, SUser extends SessionUser = SessionUs
|
|
|
168
170
|
*/
|
|
169
171
|
testRulesOnConnect?: boolean;
|
|
170
172
|
/**
|
|
171
|
-
* Allows defining table relationships that can then be used in filters and data inserts
|
|
172
|
-
*
|
|
173
|
-
* - `Join[]` - specifies the joins manually
|
|
173
|
+
* Allows defining custom table relationships that can then be used in filters and data inserts.
|
|
174
|
+
* By default FKs are used to infer the joins.
|
|
174
175
|
*/
|
|
175
176
|
joins?: Joins;
|
|
176
177
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProstglesTypes.d.ts","sourceRoot":"","sources":["../lib/ProstglesTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAC7B,OAAO,KAAK,SAAS,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,MAAM,iCAAiC,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACtF,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEvF;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC;IAEtB;;;;OAIG;IACH,aAAa,CAAC,EAAE;QACd;;WAEG;QACH,gBAAgB,EAAE,MAAM,CAAC;QACzB;;WAEG;QACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;IAEF;;;OAGG;IACH,gBAAgB,CAAC,EAAE;QACjB,CAAC,SAAS,EAAE,MAAM,GAIlB;YAAE,IAAI,EAAE,QAAQ,CAAC;YAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;SAAE,CAAC;KACxE,CAAC;IAEF;;;OAGG;IACH,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,UAAU,2DAA4D,CAAC;AACpF,MAAM,MAAM,IAAI,GAAG;IACjB,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,EAAE,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EAAE,CAAC;IAChC,IAAI,EAAE,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"ProstglesTypes.d.ts","sourceRoot":"","sources":["../lib/ProstglesTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,17 @@
|
|
|
1
|
+
import type { JSONB } from "prostgles-types";
|
|
1
2
|
/** Row types for the column definitions used by managed tables. */
|
|
2
3
|
export type TableRowFromColumnDefinitions<T extends Record<string, string | {
|
|
3
4
|
enum: readonly (string | number)[];
|
|
4
5
|
nullable?: boolean;
|
|
6
|
+
} | {
|
|
7
|
+
jsonbSchema: JSONB.JSONBSchema;
|
|
8
|
+
nullable?: boolean;
|
|
5
9
|
}>> = {
|
|
6
10
|
[K in keyof T]: T[K] extends {
|
|
11
|
+
jsonbSchema: infer S extends JSONB.JSONBSchema;
|
|
12
|
+
} ? JSONB.GetType<S> | (T[K] extends {
|
|
13
|
+
nullable: true;
|
|
14
|
+
} ? null : never) : T[K] extends {
|
|
7
15
|
enum: readonly (infer V)[];
|
|
8
16
|
} ? V | (T[K] extends {
|
|
9
17
|
nullable: true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableRowFromColumnDefinitions.d.ts","sourceRoot":"","sources":["../../lib/TableConfig/TableRowFromColumnDefinitions.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,MAAM,MAAM,6BAA6B,CACvC,CAAC,SAAS,MAAM,CACd,MAAM,
|
|
1
|
+
{"version":3,"file":"TableRowFromColumnDefinitions.d.ts","sourceRoot":"","sources":["../../lib/TableConfig/TableRowFromColumnDefinitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,mEAAmE;AACnE,MAAM,MAAM,6BAA6B,CACvC,CAAC,SAAS,MAAM,CACd,MAAM,EACJ,MAAM,GACN;IAAE,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1D;IAAE,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CACzD,IACC;KACD,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,WAAW,EAAE,MAAM,CAAC,SAAS,KAAK,CAAC,WAAW,CAAA;KAAE,GAC3E,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,GAAG,KAAK,CAAC,GACnE,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;KAAE,GACzC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,GAAG,KAAK,CAAC,GAClD,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,MAAM,EAAE,GAC1B,MAAM,GACN,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,MAAM,EAAE,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,MAAM,CAAC,GACb,CAAC,CAAC,CAAC,CAAC,CAAC,SACH,GAAG,MAAM,YAAY,MAAM,EAAE,GAAG,GAAG,MAAM,cAAc,MAAM,EAAE,GAC7D,KAAK,GACL,IAAI,CAAC;CAClB,CAAC"}
|
package/dist/utils/utils.d.ts
CHANGED
|
@@ -3,4 +3,5 @@ export declare const clone: <T extends any[] | Record<string, any>>(obj: T) => T
|
|
|
3
3
|
export declare const sleep: (ms: number) => Promise<unknown>;
|
|
4
4
|
export declare const escapeTSNames: (str: string, capitalize?: boolean) => string;
|
|
5
5
|
export declare const isArray: <T>(data: T) => data is Extract<T, readonly unknown[]>;
|
|
6
|
+
export declare const sortedArraysMatch: (a: string[], b: string[]) => boolean;
|
|
6
7
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,KAAG,CAMrE,CAAC;AAEF,eAAO,MAAM,KAAK,GAAa,IAAI,MAAM,qBAIxC,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,EAAE,oBAAkB,WAK5D,CAAC;AAQF,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,MAAM,CAAC,KAAG,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE,SAAS,OAAO,EAAE,CAAwB,CAAC;AAEnG,eAAO,MAAM,iBAAiB,GAAI,GAAG,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,KAAG,OAE5D,CAAC"}
|
package/dist/utils/utils.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isArray = exports.escapeTSNames = exports.sleep = exports.clone = exports.get = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
exports.sortedArraysMatch = exports.isArray = exports.escapeTSNames = exports.sleep = exports.clone = exports.get = void 0;
|
|
4
|
+
const prostgles_types_1 = require("prostgles-types");
|
|
5
|
+
var prostgles_types_2 = require("prostgles-types");
|
|
6
|
+
Object.defineProperty(exports, "get", { enumerable: true, get: function () { return prostgles_types_2.get; } });
|
|
6
7
|
const clone = (obj) => {
|
|
7
8
|
if (typeof structuredClone !== "undefined") {
|
|
8
9
|
return structuredClone(obj);
|
|
@@ -33,4 +34,8 @@ const canBeUsedAsIsInTypescript = (str) => {
|
|
|
33
34
|
};
|
|
34
35
|
const isArray = (data) => Array.isArray(data);
|
|
35
36
|
exports.isArray = isArray;
|
|
37
|
+
const sortedArraysMatch = (a, b) => {
|
|
38
|
+
return (0, prostgles_types_1.isEqual)(a.toSorted(), b.toSorted());
|
|
39
|
+
};
|
|
40
|
+
exports.sortedArraysMatch = sortedArraysMatch;
|
|
36
41
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils/utils.ts"],"names":[],"mappings":";;;AAAA,mDAAsC;AAA7B,sGAAA,GAAG,OAAA;AACL,MAAM,KAAK,GAAG,CAAwC,GAAM,EAAK,EAAE;IACxE,IAAI,OAAO,eAAe,KAAK,WAAW,EAAE,CAAC;QAC3C,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAM,CAAC;AAC9C,CAAC,CAAC;AANW,QAAA,KAAK,SAMhB;AAEK,MAAM,KAAK,GAAG,UAAU,EAAU;IACvC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAJW,QAAA,KAAK,SAIhB;AAEK,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,UAAU,GAAG,KAAK,EAAE,EAAE;IAC/D,IAAI,GAAG,GAAG,GAAG,CAAC;IACd,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnE,IAAI,yBAAyB,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC,CAAC;AALW,QAAA,aAAa,iBAKxB;AACF,MAAM,yBAAyB,GAAG,CAAC,GAAW,EAAW,EAAE;IACzD,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,MAAM,yBAAyB,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC7D,MAAM,0BAA0B,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC/D,OAAO,OAAO,CAAC,yBAAyB,IAAI,0BAA0B,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEK,MAAM,OAAO,GAAG,CAAI,IAAO,EAA0C,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAAtF,QAAA,OAAO,WAA+E"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils/utils.ts"],"names":[],"mappings":";;;AAAA,qDAA0C;AAE1C,mDAAsC;AAA7B,sGAAA,GAAG,OAAA;AACL,MAAM,KAAK,GAAG,CAAwC,GAAM,EAAK,EAAE;IACxE,IAAI,OAAO,eAAe,KAAK,WAAW,EAAE,CAAC;QAC3C,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAM,CAAC;AAC9C,CAAC,CAAC;AANW,QAAA,KAAK,SAMhB;AAEK,MAAM,KAAK,GAAG,UAAU,EAAU;IACvC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAJW,QAAA,KAAK,SAIhB;AAEK,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,UAAU,GAAG,KAAK,EAAE,EAAE;IAC/D,IAAI,GAAG,GAAG,GAAG,CAAC;IACd,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnE,IAAI,yBAAyB,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC,CAAC;AALW,QAAA,aAAa,iBAKxB;AACF,MAAM,yBAAyB,GAAG,CAAC,GAAW,EAAW,EAAE;IACzD,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,MAAM,yBAAyB,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC7D,MAAM,0BAA0B,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC/D,OAAO,OAAO,CAAC,yBAAyB,IAAI,0BAA0B,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEK,MAAM,OAAO,GAAG,CAAI,IAAO,EAA0C,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAAtF,QAAA,OAAO,WAA+E;AAE5F,MAAM,iBAAiB,GAAG,CAAC,CAAW,EAAE,CAAW,EAAW,EAAE;IACrE,OAAO,IAAA,yBAAO,EAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7C,CAAC,CAAC;AAFW,QAAA,iBAAiB,qBAE5B"}
|
package/lib/Audit/AuditTable.ts
CHANGED
|
@@ -5,13 +5,24 @@ export const AUDIT_TABLE_COLUMN_DEFINITIONS = {
|
|
|
5
5
|
created_at: "TIMESTAMPTZ NOT NULL DEFAULT clock_timestamp()",
|
|
6
6
|
schema_name: "TEXT NOT NULL",
|
|
7
7
|
table_name: "TEXT NOT NULL",
|
|
8
|
-
entity_type: "TEXT NOT NULL",
|
|
9
8
|
operation: { enum: ["INSERT", "UPDATE", "DELETE"] },
|
|
10
9
|
old_id: "JSONB",
|
|
11
10
|
new_id: "JSONB",
|
|
12
11
|
old_row: "JSONB",
|
|
13
12
|
new_row: "JSONB",
|
|
14
13
|
actor: "JSONB",
|
|
14
|
+
db_context: {
|
|
15
|
+
jsonbSchema: {
|
|
16
|
+
type: {
|
|
17
|
+
transaction_id: "string",
|
|
18
|
+
transaction_started_at: "string",
|
|
19
|
+
statement_started_at: "string",
|
|
20
|
+
current_role: "string",
|
|
21
|
+
session_user: "string",
|
|
22
|
+
application_name: "string",
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
},
|
|
15
26
|
} as const;
|
|
16
27
|
|
|
17
28
|
export type AuditTableRow = TableRowFromColumnDefinitions<typeof AUDIT_TABLE_COLUMN_DEFINITIONS>;
|
package/lib/Audit/AuditTypes.ts
CHANGED
|
@@ -15,7 +15,6 @@ export type SchemaConfigAuditTableOptions<
|
|
|
15
15
|
S,
|
|
16
16
|
T extends SchemaConfigTableName<S>,
|
|
17
17
|
> = {
|
|
18
|
-
entityType?: string;
|
|
19
18
|
/** Defaults to all primary-key columns. Required for tables without a primary key. */
|
|
20
19
|
idColumns?: readonly SchemaConfigColumnName<S, T>[];
|
|
21
20
|
excludeColumns?: readonly SchemaConfigColumnName<S, T>[];
|
|
@@ -34,7 +33,7 @@ export type SchemaConfigAudit<S = void> = {
|
|
|
34
33
|
SchemaConfigAuditIncludedTables<S> | SchemaConfigAuditExcludedTables<S>;
|
|
35
34
|
};
|
|
36
35
|
|
|
37
|
-
/** Validated audit targets with all column
|
|
36
|
+
/** Validated audit targets with all column defaults resolved. */
|
|
38
37
|
export type ResolvedAuditConfig = {
|
|
39
38
|
tableName: string;
|
|
40
39
|
tables: Record<string, Required<SchemaConfigAuditTableOptions<void, string>>>;
|
|
@@ -7,7 +7,7 @@ import { getAuditProtection, getAuditWriterName } from "./getAuditTableConfig";
|
|
|
7
7
|
export const getAuditTriggerConfig = (audit: ResolvedAuditConfig): TableConfig => {
|
|
8
8
|
const result: TableConfig = {};
|
|
9
9
|
for (const [name, options] of Object.entries(audit.tables)) {
|
|
10
|
-
const {
|
|
10
|
+
const { idColumns: ids, excludeColumns: excluded } = options;
|
|
11
11
|
const functionName = getAuditWriterName(audit.tableName, name);
|
|
12
12
|
result[name] = {
|
|
13
13
|
triggers: {
|
|
@@ -32,9 +32,17 @@ export const getAuditTriggerConfig = (audit: ResolvedAuditConfig): TableConfig =
|
|
|
32
32
|
after_row := after_row - excluded;
|
|
33
33
|
END IF;
|
|
34
34
|
IF TG_OP = 'UPDATE' AND before_row IS NOT DISTINCT FROM after_row THEN RETURN NULL; END IF;
|
|
35
|
-
INSERT INTO ${asName(audit.tableName)} (schema_name, table_name,
|
|
36
|
-
VALUES (TG_TABLE_SCHEMA, TG_TABLE_NAME,
|
|
37
|
-
nullif(current_setting('prostgles.user', true), '')::jsonb
|
|
35
|
+
INSERT INTO ${asName(audit.tableName)} (schema_name, table_name, operation, old_id, new_id, old_row, new_row, actor, db_context)
|
|
36
|
+
VALUES (TG_TABLE_SCHEMA, TG_TABLE_NAME, TG_OP, before_id, after_id, before_row, after_row,
|
|
37
|
+
nullif(current_setting('prostgles.user', true), '')::jsonb,
|
|
38
|
+
jsonb_build_object(
|
|
39
|
+
'transaction_id', pg_current_xact_id()::text,
|
|
40
|
+
'transaction_started_at', transaction_timestamp(),
|
|
41
|
+
'statement_started_at', statement_timestamp(),
|
|
42
|
+
'current_role', current_role,
|
|
43
|
+
'session_user', session_user,
|
|
44
|
+
'application_name', current_setting('application_name')
|
|
45
|
+
));
|
|
38
46
|
RETURN NULL;
|
|
39
47
|
END;`,
|
|
40
48
|
},
|
|
@@ -58,11 +58,7 @@ export const parseAuditConfig = (prgl: Prostgles): ResolvedAuditConfig | undefin
|
|
|
58
58
|
if (ids.some((c) => excluded.includes(c))) {
|
|
59
59
|
throw new Error(`Audit identity columns cannot be excluded: ${table.name}`);
|
|
60
60
|
}
|
|
61
|
-
if (options.entityType !== undefined && !options.entityType) {
|
|
62
|
-
throw new Error(`Invalid audit entityType for ${table.name}`);
|
|
63
|
-
}
|
|
64
61
|
result[table.name] = {
|
|
65
|
-
entityType: options.entityType ?? table.name,
|
|
66
62
|
idColumns: [...ids],
|
|
67
63
|
excludeColumns: [...excluded],
|
|
68
64
|
};
|
|
@@ -11,7 +11,7 @@ import type { PublishParser } from "../PublishParser/PublishParser";
|
|
|
11
11
|
import type { OnCommitCallback } from "../PublishParser/publishTypesAndUtils";
|
|
12
12
|
import type { ServerFunctionDefinition } from "../PublishParser/defineServerFunction";
|
|
13
13
|
import { getQueryErrorPositionInfo } from "../TableConfig/runSQLFile";
|
|
14
|
-
import type { Graph } from "
|
|
14
|
+
import type { Graph } from "./joins/shortestPath";
|
|
15
15
|
import { clone } from "../utils/utils";
|
|
16
16
|
import type {
|
|
17
17
|
DBHandlerServer,
|
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
getConstraints,
|
|
32
32
|
getSerializedClientErrorFromPGError,
|
|
33
33
|
} from "./dboBuilderUtils";
|
|
34
|
-
import { prepareShortestJoinPaths } from "./prepareShortestJoinPaths";
|
|
34
|
+
import { prepareShortestJoinPaths } from "./joins/prepareShortestJoinPaths";
|
|
35
35
|
import { cacheDBTypes, runSQL } from "./runSql/runSQL";
|
|
36
36
|
import { getDetailedFieldInfo, type getDbTypes } from "./runSql/runSqlUtils";
|
|
37
37
|
import { getTablesForSchemaPostgresSQL } from "./schema/getTablesForSchemaPostgresSQL";
|
|
@@ -140,10 +140,7 @@ export class DboBuilder {
|
|
|
140
140
|
|
|
141
141
|
onSchemaChange?: (event: { command: string; query: string }) => void;
|
|
142
142
|
|
|
143
|
-
private readonly onCommitCallbacksByTransaction = new WeakMap<
|
|
144
|
-
object,
|
|
145
|
-
OnCommitCallback[]
|
|
146
|
-
>();
|
|
143
|
+
private readonly onCommitCallbacksByTransaction = new WeakMap<object, OnCommitCallback[]>();
|
|
147
144
|
|
|
148
145
|
registerOnCommitCallback = (transaction: object, callback: OnCommitCallback) => {
|
|
149
146
|
const callbacks = this.onCommitCallbacksByTransaction.get(transaction);
|
|
@@ -250,9 +247,12 @@ export class DboBuilder {
|
|
|
250
247
|
this.checkingCanSubscribe = false;
|
|
251
248
|
}
|
|
252
249
|
const start = Date.now();
|
|
253
|
-
const tablesOrViewsReq = await getTablesForSchemaPostgresSQL(
|
|
254
|
-
|
|
255
|
-
|
|
250
|
+
const tablesOrViewsReq = await getTablesForSchemaPostgresSQL(
|
|
251
|
+
{ db: this.prostgles.dbForSchema! },
|
|
252
|
+
{
|
|
253
|
+
schemaFilter: this.prostgles.opts.schemaFilter,
|
|
254
|
+
},
|
|
255
|
+
);
|
|
256
256
|
await this.prostgles.opts.onLog?.({
|
|
257
257
|
type: "debug",
|
|
258
258
|
command: "DboBuilder.getTablesForSchemaPostgresSQL",
|
|
@@ -262,7 +262,10 @@ export class DboBuilder {
|
|
|
262
262
|
const tablesOrViews = tablesOrViewsReq.result;
|
|
263
263
|
this.tablesOrViews = tablesOrViews;
|
|
264
264
|
|
|
265
|
-
this.constraints = await getConstraints(
|
|
265
|
+
this.constraints = await getConstraints(
|
|
266
|
+
this.prostgles.dbForSchema!,
|
|
267
|
+
this.prostgles.opts.schemaFilter,
|
|
268
|
+
);
|
|
266
269
|
await this.prepareShortestJoinPaths();
|
|
267
270
|
|
|
268
271
|
this.dbo = {};
|
|
@@ -13,7 +13,7 @@ import type { TableEvent } from "../../Logging";
|
|
|
13
13
|
import type { DB } from "../../Prostgles";
|
|
14
14
|
import type { Join } from "../../ProstglesTypes";
|
|
15
15
|
import type { ParsedTableRule } from "../../PublishParser/PublishParser";
|
|
16
|
-
import type { Graph } from "
|
|
16
|
+
import type { Graph } from "../joins/shortestPath";
|
|
17
17
|
import type { DboBuilder, Filter, LocalParams, TableHandlers } from "../DboBuilder";
|
|
18
18
|
import { getSerializedClientErrorFromPGError } from "../DboBuilder";
|
|
19
19
|
import type { TableSchema } from "../DboBuilderTypes";
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { TableSchema } from "../DboBuilderTypes";
|
|
2
|
+
import type { Join } from "../../ProstglesTypes";
|
|
3
|
+
import { sortedArraysMatch } from "../../utils/utils";
|
|
4
|
+
import { isEqual } from "prostgles-types";
|
|
5
|
+
|
|
6
|
+
export const getInferredJoins = (schema: TableSchema[]): Join[] => {
|
|
7
|
+
const joins: Join[] = [];
|
|
8
|
+
const upsertJoin = (
|
|
9
|
+
t1: string,
|
|
10
|
+
t2: string,
|
|
11
|
+
cols: { col1: string; col2: string }[],
|
|
12
|
+
type: Join["type"],
|
|
13
|
+
) => {
|
|
14
|
+
const existingIdx = joins.findIndex((j) => sortedArraysMatch(j.tables, [t1, t2]));
|
|
15
|
+
const existing = joins[existingIdx];
|
|
16
|
+
const normalCond = cols.reduce((a, v) => ({ ...a, [v.col1]: v.col2 }), {});
|
|
17
|
+
const revertedCond = cols.reduce((a, v) => ({ ...a, [v.col2]: v.col1 }), {});
|
|
18
|
+
if (existing) {
|
|
19
|
+
const isLTR = existing.tables[0] === t1;
|
|
20
|
+
const cond = isLTR ? normalCond : revertedCond;
|
|
21
|
+
|
|
22
|
+
/** At some point we should add relationship type to EACH JOIN CONDITION GROUP */
|
|
23
|
+
// const fixedType = isLTR? type : type.split("").reverse().join("") as Join["type"];
|
|
24
|
+
|
|
25
|
+
/** Avoid duplicates */
|
|
26
|
+
if (!existing.on.some((existingOnCondition) => isEqual(existingOnCondition, cond))) {
|
|
27
|
+
existing.on.push(cond);
|
|
28
|
+
joins[existingIdx] = existing;
|
|
29
|
+
}
|
|
30
|
+
} else {
|
|
31
|
+
joins.push({
|
|
32
|
+
tables: [t1, t2],
|
|
33
|
+
on: [normalCond],
|
|
34
|
+
type,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
schema.map((tov) => {
|
|
39
|
+
tov.columns.map((col) => {
|
|
40
|
+
if (col.references) {
|
|
41
|
+
col.references.forEach((r) => {
|
|
42
|
+
const joinCols = r.cols.map((c, i) => ({
|
|
43
|
+
col1: c,
|
|
44
|
+
col2: r.fcols[i]!,
|
|
45
|
+
}));
|
|
46
|
+
let type: Join["type"] = "one-many";
|
|
47
|
+
const ftablePKeys = schema
|
|
48
|
+
.find(({ name }) => name === r.ftable)
|
|
49
|
+
?.columns.filter((fcol) => fcol.is_pkey);
|
|
50
|
+
if (ftablePKeys?.length && ftablePKeys.every((fkey) => r.fcols.includes(fkey.name))) {
|
|
51
|
+
type = "one-one";
|
|
52
|
+
}
|
|
53
|
+
upsertJoin(tov.name, r.ftable, joinCols, type);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
return joins;
|
|
59
|
+
};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import test from "node:test";
|
|
3
|
+
import type { DboBuilder } from "../DboBuilder";
|
|
4
|
+
import { prepareShortestJoinPaths } from "./prepareShortestJoinPaths";
|
|
5
|
+
import type { Join } from "../../ProstglesTypes";
|
|
6
|
+
|
|
7
|
+
void test("duplicate configured table pairs are rejected even during table configuration", () => {
|
|
8
|
+
const join: Join = {
|
|
9
|
+
tables: ["conditions", "members"],
|
|
10
|
+
on: [{ project_id: "project_id" }],
|
|
11
|
+
type: "many-many",
|
|
12
|
+
};
|
|
13
|
+
for (const preparingTableConfig of [false, true]) {
|
|
14
|
+
for (const override of [false, true]) {
|
|
15
|
+
for (const tables of [join.tables, [...join.tables].reverse() as Join["tables"]]) {
|
|
16
|
+
const builder = {
|
|
17
|
+
prostgles: {
|
|
18
|
+
preparingTableConfig,
|
|
19
|
+
opts: { joins: [join, { ...join, tables, override }] },
|
|
20
|
+
},
|
|
21
|
+
tablesOrViews: [],
|
|
22
|
+
} as unknown as DboBuilder;
|
|
23
|
+
assert.throws(
|
|
24
|
+
() => prepareShortestJoinPaths(builder),
|
|
25
|
+
/Duplicate configured join for table pair/,
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
void test("configured joins are deferred only during table configuration", () => {
|
|
33
|
+
const builder = {
|
|
34
|
+
prostgles: {
|
|
35
|
+
preparingTableConfig: true,
|
|
36
|
+
opts: {
|
|
37
|
+
joins: [
|
|
38
|
+
{
|
|
39
|
+
tables: ["conditions", "members"],
|
|
40
|
+
on: [{ project_id: "project_id" }],
|
|
41
|
+
type: "many-many",
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
tablesOrViews: [],
|
|
47
|
+
} as unknown as DboBuilder;
|
|
48
|
+
assert.deepEqual(prepareShortestJoinPaths(builder).joins, []);
|
|
49
|
+
builder.prostgles.preparingTableConfig = false;
|
|
50
|
+
assert.throws(
|
|
51
|
+
() => prepareShortestJoinPaths(builder),
|
|
52
|
+
(error: unknown) => typeof error === "string" && error.includes("Table not found: conditions"),
|
|
53
|
+
);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
void test("existing configured joins remain available during table configuration", () => {
|
|
57
|
+
const join = {
|
|
58
|
+
tables: ["conditions", "members"],
|
|
59
|
+
on: [{ project_id: "project_id" }],
|
|
60
|
+
type: "many-many",
|
|
61
|
+
};
|
|
62
|
+
const builder = {
|
|
63
|
+
prostgles: { preparingTableConfig: true, opts: { joins: [join] } },
|
|
64
|
+
tablesOrViews: ["conditions", "members"].map((name) => ({
|
|
65
|
+
name,
|
|
66
|
+
columns: [{ name: "project_id" }],
|
|
67
|
+
})),
|
|
68
|
+
} as unknown as DboBuilder;
|
|
69
|
+
assert.deepEqual(prepareShortestJoinPaths(builder).joins, [join]);
|
|
70
|
+
builder.prostgles.preparingTableConfig = false;
|
|
71
|
+
assert.deepEqual(prepareShortestJoinPaths(builder).joins, [join]);
|
|
72
|
+
});
|