prostgles-server 4.2.604 → 4.2.606
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/DboBuilder/ViewHandler/getInfo.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/getInfo.js +5 -46
- package/dist/DboBuilder/ViewHandler/getInfo.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/getRawInfo.d.ts +7 -0
- package/dist/DboBuilder/ViewHandler/getRawInfo.d.ts.map +1 -0
- package/dist/DboBuilder/ViewHandler/getRawInfo.js +51 -0
- package/dist/DboBuilder/ViewHandler/getRawInfo.js.map +1 -0
- package/dist/DboBuilder/getColumns.d.ts +5 -0
- package/dist/DboBuilder/getColumns.d.ts.map +1 -1
- package/dist/DboBuilder/getColumns.js +80 -74
- package/dist/DboBuilder/getColumns.js.map +1 -1
- package/dist/TableConfig/getTableTriggerQueries.d.ts +5 -0
- package/dist/TableConfig/getTableTriggerQueries.d.ts.map +1 -0
- package/dist/TableConfig/getTableTriggerQueries.js +61 -0
- package/dist/TableConfig/getTableTriggerQueries.js.map +1 -0
- package/dist/TableConfig/getTableTriggerQueries.spec.d.ts +2 -0
- package/dist/TableConfig/getTableTriggerQueries.spec.d.ts.map +1 -0
- package/dist/TableConfig/getTableTriggerQueries.spec.js +56 -0
- package/dist/TableConfig/getTableTriggerQueries.spec.js.map +1 -0
- package/dist/TableConfig/initTableConfig.d.ts.map +1 -1
- package/dist/TableConfig/initTableConfig.js +2 -57
- package/dist/TableConfig/initTableConfig.js.map +1 -1
- package/lib/DboBuilder/ViewHandler/getInfo.ts +5 -58
- package/lib/DboBuilder/ViewHandler/getRawInfo.ts +65 -0
- package/lib/DboBuilder/getColumns.ts +105 -92
- package/lib/TableConfig/getTableTriggerQueries.spec.ts +77 -0
- package/lib/TableConfig/getTableTriggerQueries.ts +74 -0
- package/lib/TableConfig/initTableConfig.ts +2 -67
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getInfo.d.ts","sourceRoot":"","sources":["../../../lib/DboBuilder/ViewHandler/getInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"getInfo.d.ts","sourceRoot":"","sources":["../../../lib/DboBuilder/ViewHandler/getInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,wBAAsB,OAAO,CAC3B,IAAI,EAAE,WAAW,EACjB,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,GAAG,EACb,OAAO,CAAC,EAAE,GAAG,EACb,UAAU,CAAC,EAAE,eAAe,EAC5B,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,KAAK,CAAC,CAsBhB"}
|
|
@@ -1,64 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getInfo = getInfo;
|
|
4
|
+
const getRawInfo_1 = require("./getRawInfo");
|
|
5
|
+
const getColumns_1 = require("../getColumns");
|
|
4
6
|
async function getInfo(lang, _param2, _param3, tableRules, localParams) {
|
|
5
|
-
const
|
|
6
|
-
const fileTableName = this.dboBuilder.prostgles.opts.fileTable?.tableName;
|
|
7
|
+
const tableInfo = getRawInfo_1.getRawInfo.call(this, lang, tableRules, localParams);
|
|
7
8
|
await this._log({
|
|
8
9
|
command: "getInfo",
|
|
9
10
|
localParams,
|
|
10
11
|
data: { lang },
|
|
11
12
|
duration: 0,
|
|
12
13
|
});
|
|
13
|
-
const allowedFieldsToSelect = this.parseFieldFilter(tableRules?.select?.fields);
|
|
14
|
-
const { requiredNestedInserts, allowedNestedInserts } = tableRules?.insert ?? {};
|
|
15
|
-
const label = this.dboBuilder.prostgles.tableConfigurator?.getTableLabel({
|
|
16
|
-
tableName: this.name,
|
|
17
|
-
lang,
|
|
18
|
-
});
|
|
19
|
-
const tableInfo = {
|
|
20
|
-
oid: this.tableOrViewInfo.oid,
|
|
21
|
-
comment: this.tableOrViewInfo.comment,
|
|
22
|
-
qualifiedNameParts: this.tableOrViewInfo.qualifiedNameParts,
|
|
23
|
-
label,
|
|
24
|
-
isFileTable: !this.is_media ? undefined : ({
|
|
25
|
-
allowedNestedInserts,
|
|
26
|
-
}),
|
|
27
|
-
isView: this.isView,
|
|
28
|
-
hasFiles: Boolean(!this.is_media &&
|
|
29
|
-
fileTableName &&
|
|
30
|
-
this.columns.some((c) => c.references?.some((r) => r.ftable === fileTableName))),
|
|
31
|
-
fileTableName,
|
|
32
|
-
dynamicRules: {
|
|
33
|
-
update: Boolean(tableRules?.update?.dynamicFields?.length),
|
|
34
|
-
},
|
|
35
|
-
/**
|
|
36
|
-
* Only show column groups that are fully allowed to be selected by the user
|
|
37
|
-
*/
|
|
38
|
-
uniqueColumnGroups: this.tableOrViewInfo.uniqueColumnGroups?.filter((g) => !localParams || g.every((c) => allowedFieldsToSelect.includes(c))),
|
|
39
|
-
publishInfo: {
|
|
40
|
-
select: validatedTableRules.select && {
|
|
41
|
-
disabledMethods: validatedTableRules.select.disableMethods,
|
|
42
|
-
syncConfig: this.dboBuilder.prostgles.tableConfigurator?.getTableSyncConfig(this.name),
|
|
43
|
-
},
|
|
44
|
-
insert: validatedTableRules.insert && {
|
|
45
|
-
requiredNestedInserts,
|
|
46
|
-
allowedNestedInserts: allowedNestedInserts?.map((t) => t.table),
|
|
47
|
-
},
|
|
48
|
-
update: validatedTableRules.update && {
|
|
49
|
-
disabledMethods: tableRules?.update?.disableMethods,
|
|
50
|
-
},
|
|
51
|
-
delete: validatedTableRules.delete && {},
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
14
|
const modifyClientSchema = this.dboBuilder.prostgles.opts.modifyClientSchema;
|
|
55
|
-
if (!modifyClientSchema)
|
|
15
|
+
if (!modifyClientSchema)
|
|
56
16
|
return tableInfo;
|
|
57
|
-
}
|
|
58
17
|
const modifiedTableSchema = await modifyClientSchema({
|
|
59
18
|
name: this.name,
|
|
60
19
|
...tableInfo,
|
|
61
|
-
columns:
|
|
20
|
+
columns: await getColumns_1.getRawColumns.call(this, lang, undefined, tableRules, localParams),
|
|
62
21
|
}, this.config, localParams?.isRemoteRequest?.clientInfo);
|
|
63
22
|
const { columns, name, ...rest } = modifiedTableSchema;
|
|
64
23
|
return rest;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getInfo.js","sourceRoot":"","sources":["../../../lib/DboBuilder/ViewHandler/getInfo.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"getInfo.js","sourceRoot":"","sources":["../../../lib/DboBuilder/ViewHandler/getInfo.ts"],"names":[],"mappings":";;AAOA,0BA6BC;AAjCD,6CAA0C;AAC1C,8CAA8C;AAGvC,KAAK,UAAU,OAAO,CAE3B,IAAa,EACb,OAAa,EACb,OAAa,EACb,UAA4B,EAC5B,WAAyB;IAEzB,MAAM,SAAS,GAAG,uBAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IACvE,MAAM,IAAI,CAAC,IAAI,CAAC;QACd,OAAO,EAAE,SAAS;QAClB,WAAW;QACX,IAAI,EAAE,EAAE,IAAI,EAAE;QACd,QAAQ,EAAE,CAAC;KACZ,CAAC,CAAC;IACH,MAAM,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC;IAC7E,IAAI,CAAC,kBAAkB;QAAE,OAAO,SAAS,CAAC;IAE1C,MAAM,mBAAmB,GAAG,MAAM,kBAAkB,CAClD;QACE,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,SAAS;QACZ,OAAO,EAAE,MAAM,0BAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC;KAClF,EACD,IAAI,CAAC,MAAM,EACX,WAAW,EAAE,eAAe,EAAE,UAAU,CACzC,CAAC;IACF,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,mBAAmB,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type TableInfo as TInfo } from "prostgles-types/dist";
|
|
2
|
+
import type { ParsedTableRule } from "../../PublishParser/PublishParser";
|
|
3
|
+
import type { LocalParams } from "../DboBuilder";
|
|
4
|
+
import type { ViewHandler } from "./ViewHandler";
|
|
5
|
+
/** Table metadata before client schema customisation. */
|
|
6
|
+
export declare function getRawInfo(this: ViewHandler, lang?: string, tableRules?: ParsedTableRule, localParams?: LocalParams): TInfo;
|
|
7
|
+
//# sourceMappingURL=getRawInfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getRawInfo.d.ts","sourceRoot":"","sources":["../../../lib/DboBuilder/ViewHandler/getRawInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,yDAAyD;AACzD,wBAAgB,UAAU,CACxB,IAAI,EAAE,WAAW,EACjB,IAAI,CAAC,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,eAAe,EAC5B,WAAW,CAAC,EAAE,WAAW,GACxB,KAAK,CAqDP"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getRawInfo = getRawInfo;
|
|
4
|
+
/** Table metadata before client schema customisation. */
|
|
5
|
+
function getRawInfo(lang, tableRules, localParams) {
|
|
6
|
+
const validatedTableRules = this.getValidatedRules(tableRules, localParams);
|
|
7
|
+
const fileTableName = this.dboBuilder.prostgles.opts.fileTable?.tableName;
|
|
8
|
+
const allowedFieldsToSelect = this.parseFieldFilter(tableRules?.select?.fields);
|
|
9
|
+
const { requiredNestedInserts, allowedNestedInserts } = tableRules?.insert ?? {};
|
|
10
|
+
const label = this.dboBuilder.prostgles.tableConfigurator?.getTableLabel({
|
|
11
|
+
tableName: this.name,
|
|
12
|
+
lang,
|
|
13
|
+
});
|
|
14
|
+
const tableInfo = {
|
|
15
|
+
oid: this.tableOrViewInfo.oid,
|
|
16
|
+
comment: this.tableOrViewInfo.comment,
|
|
17
|
+
qualifiedNameParts: this.tableOrViewInfo.qualifiedNameParts,
|
|
18
|
+
label,
|
|
19
|
+
isFileTable: !this.is_media ? undefined : ({
|
|
20
|
+
allowedNestedInserts,
|
|
21
|
+
}),
|
|
22
|
+
isView: this.isView,
|
|
23
|
+
hasFiles: Boolean(!this.is_media &&
|
|
24
|
+
fileTableName &&
|
|
25
|
+
this.columns.some((c) => c.references?.some((r) => r.ftable === fileTableName))),
|
|
26
|
+
fileTableName,
|
|
27
|
+
dynamicRules: {
|
|
28
|
+
update: Boolean(tableRules?.update?.dynamicFields?.length),
|
|
29
|
+
},
|
|
30
|
+
/**
|
|
31
|
+
* Only show column groups that are fully allowed to be selected by the user
|
|
32
|
+
*/
|
|
33
|
+
uniqueColumnGroups: this.tableOrViewInfo.uniqueColumnGroups?.filter((g) => !localParams || g.every((c) => allowedFieldsToSelect.includes(c))),
|
|
34
|
+
publishInfo: {
|
|
35
|
+
select: validatedTableRules.select && {
|
|
36
|
+
disabledMethods: validatedTableRules.select.disableMethods,
|
|
37
|
+
syncConfig: this.dboBuilder.prostgles.tableConfigurator?.getTableSyncConfig(this.name),
|
|
38
|
+
},
|
|
39
|
+
insert: validatedTableRules.insert && {
|
|
40
|
+
requiredNestedInserts,
|
|
41
|
+
allowedNestedInserts: allowedNestedInserts?.map((t) => t.table),
|
|
42
|
+
},
|
|
43
|
+
update: validatedTableRules.update && {
|
|
44
|
+
disabledMethods: tableRules?.update?.disableMethods,
|
|
45
|
+
},
|
|
46
|
+
delete: validatedTableRules.delete && {},
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
return tableInfo;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=getRawInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getRawInfo.js","sourceRoot":"","sources":["../../../lib/DboBuilder/ViewHandler/getRawInfo.ts"],"names":[],"mappings":";;AAMA,gCA0DC;AA3DD,yDAAyD;AACzD,SAAgB,UAAU,CAExB,IAAa,EACb,UAA4B,EAC5B,WAAyB;IAEzB,MAAM,mBAAmB,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC5E,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;IAC1E,MAAM,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChF,MAAM,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,GAAG,UAAU,EAAE,MAAM,IAAI,EAAE,CAAC;IACjF,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,iBAAiB,EAAE,aAAa,CAAC;QACvE,SAAS,EAAE,IAAI,CAAC,IAAI;QACpB,IAAI;KACL,CAAC,CAAC;IACH,MAAM,SAAS,GAAU;QACvB,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG;QAC7B,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO;QACrC,kBAAkB,EAAE,IAAI,CAAC,eAAe,CAAC,kBAAkB;QAC3D,KAAK;QACL,WAAW,EACT,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAC3B;YACE,oBAAoB;SACrB,CACF;QACH,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,OAAO,CACf,CAAC,IAAI,CAAC,QAAQ;YACd,aAAa;YACb,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAChF;QACD,aAAa;QACb,YAAY,EAAE;YACZ,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC;SAC3D;QACD;;WAEG;QACH,kBAAkB,EAAE,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,MAAM,CACjE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CACzE;QACD,WAAW,EAAE;YACX,MAAM,EAAE,mBAAmB,CAAC,MAAM,IAAI;gBACpC,eAAe,EAAE,mBAAmB,CAAC,MAAM,CAAC,cAAc;gBAC1D,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;aACvF;YACD,MAAM,EAAE,mBAAmB,CAAC,MAAM,IAAI;gBACpC,qBAAqB;gBACrB,oBAAoB,EAAE,oBAAoB,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;aAChE;YACD,MAAM,EAAE,mBAAmB,CAAC,MAAM,IAAI;gBACpC,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc;aACpD;YACD,MAAM,EAAE,mBAAmB,CAAC,MAAM,IAAI,EAAE;SACzC;KACF,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -8,4 +8,9 @@ export declare function getColumns(this: ViewHandler, lang?: string, params?: {
|
|
|
8
8
|
rule: "update";
|
|
9
9
|
filter: AnyObject;
|
|
10
10
|
}, _param3?: undefined, tableRules?: ParsedTableRule, localParams?: LocalParams): Promise<ValidatedColumnInfo[]>;
|
|
11
|
+
/** Permission-filtered columns before client schema customisation. */
|
|
12
|
+
export declare function getRawColumns(this: ViewHandler, lang?: string, params?: {
|
|
13
|
+
rule: "update";
|
|
14
|
+
filter: AnyObject;
|
|
15
|
+
}, tableRules?: ParsedTableRule, localParams?: LocalParams): Promise<ValidatedColumnInfo[]>;
|
|
11
16
|
//# sourceMappingURL=getColumns.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getColumns.d.ts","sourceRoot":"","sources":["../../lib/DboBuilder/getColumns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"getColumns.d.ts","sourceRoot":"","sources":["../../lib/DboBuilder/getColumns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAG7D,eAAO,MAAM,cAAc,GAAI,GAAG,GAAG,KAAG,CAAC,IAAI,YAAuC,CAAC;AAErF,wBAAsB,UAAU,CAC9B,IAAI,EAAE,WAAW,EACjB,IAAI,CAAC,EAAE,MAAM,EACb,MAAM,CAAC,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,EAC9C,OAAO,CAAC,EAAE,SAAS,EACnB,UAAU,CAAC,EAAE,eAAe,EAC5B,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAuChC;AAED,sEAAsE;AACtE,wBAAsB,aAAa,CACjC,IAAI,EAAE,WAAW,EACjB,IAAI,CAAC,EAAE,MAAM,EACb,MAAM,CAAC,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,EAC9C,UAAU,CAAC,EAAE,eAAe,EAC5B,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,mBAAmB,EAAE,CAAC,CA6FhC"}
|
|
@@ -2,89 +2,19 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isTableHandler = void 0;
|
|
4
4
|
exports.getColumns = getColumns;
|
|
5
|
+
exports.getRawColumns = getRawColumns;
|
|
5
6
|
const prostgles_types_1 = require("prostgles-types");
|
|
6
7
|
const DboBuilder_1 = require("./DboBuilder");
|
|
8
|
+
const getRawInfo_1 = require("./ViewHandler/getRawInfo");
|
|
7
9
|
const isTableHandler = (v) => "parseUpdateRules" in v;
|
|
8
10
|
exports.isTableHandler = isTableHandler;
|
|
9
11
|
async function getColumns(lang, params, _param3, tableRules, localParams) {
|
|
10
12
|
const start = Date.now();
|
|
11
13
|
try {
|
|
12
|
-
const
|
|
13
|
-
let dynamicUpdateFields = this.column_names;
|
|
14
|
-
if (params && tableRules && (0, exports.isTableHandler)(this)) {
|
|
15
|
-
if (!(0, prostgles_types_1.isObject)(params) ||
|
|
16
|
-
!(0, prostgles_types_1.isObject)(params.filter) ||
|
|
17
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
18
|
-
params.rule !== "update") {
|
|
19
|
-
throw ("params must be { rule: 'update', filter: object } but received: " +
|
|
20
|
-
JSON.stringify(params));
|
|
21
|
-
}
|
|
22
|
-
if (!tableRules.update) {
|
|
23
|
-
dynamicUpdateFields = [];
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
const { filter } = params;
|
|
27
|
-
const updateRules = await this.parseUpdateRules(filter, undefined, tableRules, localParams);
|
|
28
|
-
dynamicUpdateFields = updateRules.fields;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
const rawColumns = this.columns
|
|
32
|
-
.filter((c) => {
|
|
33
|
-
const { insert, select, update } = rules;
|
|
34
|
-
return [insert, select, update]
|
|
35
|
-
.filter(prostgles_types_1.isDefined)
|
|
36
|
-
.flatMap((rule) => rule.fields)
|
|
37
|
-
.includes(c.name);
|
|
38
|
-
})
|
|
39
|
-
.map((_c) => {
|
|
40
|
-
const c = { ..._c };
|
|
41
|
-
const label = capitalizeFirstLetter(c.name, " ");
|
|
42
|
-
const select = !!c.privileges.SELECT;
|
|
43
|
-
const insert = !!c.privileges.INSERT;
|
|
44
|
-
const _delete = !!this.tableOrViewInfo.privileges.delete;
|
|
45
|
-
let update = !!c.privileges.UPDATE;
|
|
46
|
-
const prostgles = this.dboBuilder.prostgles;
|
|
47
|
-
const fileConfig = getFileColumnInfo({
|
|
48
|
-
colName: c.name,
|
|
49
|
-
tableHandler: this,
|
|
50
|
-
});
|
|
51
|
-
/** Do not allow updates to file table unless it's to delete fields */
|
|
52
|
-
if (prostgles.opts.fileTable?.tableName === this.name) {
|
|
53
|
-
update = false;
|
|
54
|
-
}
|
|
55
|
-
const nonOrderableUD_Types = [...prostgles_types_1._PG_geometric, "xml"];
|
|
56
|
-
const result = {
|
|
57
|
-
...(0, prostgles_types_1.omitKeys)(c, ["privileges"]),
|
|
58
|
-
label,
|
|
59
|
-
tsDataType: (0, prostgles_types_1.postgresToTsType)(c.udt_name),
|
|
60
|
-
insert: insert &&
|
|
61
|
-
!!rules.insert?.fields.includes(c.name) &&
|
|
62
|
-
tableRules?.insert?.forcedData?.[c.name] === undefined &&
|
|
63
|
-
c.is_updatable,
|
|
64
|
-
select: select && !!rules.select?.fields.includes(c.name),
|
|
65
|
-
orderBy: select &&
|
|
66
|
-
!!rules.select?.orderByFields.includes(c.name) &&
|
|
67
|
-
!nonOrderableUD_Types.includes(c.udt_name),
|
|
68
|
-
filter: !!rules.select?.filterFields.includes(c.name),
|
|
69
|
-
update: update &&
|
|
70
|
-
!!rules.update?.fields.includes(c.name) &&
|
|
71
|
-
tableRules?.update?.forcedData?.[c.name] === undefined &&
|
|
72
|
-
c.is_updatable &&
|
|
73
|
-
dynamicUpdateFields.includes(c.name),
|
|
74
|
-
delete: _delete && !!rules.delete?.filterFields.includes(c.name),
|
|
75
|
-
...(prostgles.tableConfigurator?.getColInfo({
|
|
76
|
-
table: this.name,
|
|
77
|
-
col: c.name,
|
|
78
|
-
lang,
|
|
79
|
-
}) || {}),
|
|
80
|
-
...(fileConfig && { file: fileConfig }),
|
|
81
|
-
};
|
|
82
|
-
return result;
|
|
83
|
-
})
|
|
84
|
-
.filter((c) => c.select || c.update || c.delete || c.insert);
|
|
14
|
+
const rawColumns = await getRawColumns.call(this, lang, params, tableRules, localParams);
|
|
85
15
|
const modifiedTableSchema = await this.dboBuilder.prostgles.opts.modifyClientSchema?.({
|
|
86
16
|
name: this.name,
|
|
87
|
-
...(
|
|
17
|
+
...getRawInfo_1.getRawInfo.call(this, lang, tableRules, localParams),
|
|
88
18
|
columns: rawColumns,
|
|
89
19
|
}, this.config, localParams?.isRemoteRequest?.clientInfo);
|
|
90
20
|
const columns = modifiedTableSchema?.columns ?? rawColumns;
|
|
@@ -112,6 +42,82 @@ async function getColumns(lang, params, _param3, tableRules, localParams) {
|
|
|
112
42
|
});
|
|
113
43
|
}
|
|
114
44
|
}
|
|
45
|
+
/** Permission-filtered columns before client schema customisation. */
|
|
46
|
+
async function getRawColumns(lang, params, tableRules, localParams) {
|
|
47
|
+
const rules = this.getValidatedRules(tableRules, localParams);
|
|
48
|
+
let dynamicUpdateFields = this.column_names;
|
|
49
|
+
if (params && tableRules && (0, exports.isTableHandler)(this)) {
|
|
50
|
+
if (!(0, prostgles_types_1.isObject)(params) ||
|
|
51
|
+
!(0, prostgles_types_1.isObject)(params.filter) ||
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
53
|
+
params.rule !== "update") {
|
|
54
|
+
throw ("params must be { rule: 'update', filter: object } but received: " + JSON.stringify(params));
|
|
55
|
+
}
|
|
56
|
+
if (!tableRules.update) {
|
|
57
|
+
dynamicUpdateFields = [];
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const { filter } = params;
|
|
61
|
+
const updateRules = await this.parseUpdateRules(filter, undefined, tableRules, localParams);
|
|
62
|
+
dynamicUpdateFields = updateRules.fields;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const rawColumns = this.columns
|
|
66
|
+
.filter((c) => {
|
|
67
|
+
const { insert, select, update } = rules;
|
|
68
|
+
return [insert, select, update]
|
|
69
|
+
.filter(prostgles_types_1.isDefined)
|
|
70
|
+
.flatMap((rule) => rule.fields)
|
|
71
|
+
.includes(c.name);
|
|
72
|
+
})
|
|
73
|
+
.map((_c) => {
|
|
74
|
+
const c = { ..._c };
|
|
75
|
+
const label = capitalizeFirstLetter(c.name, " ");
|
|
76
|
+
const select = !!c.privileges.SELECT;
|
|
77
|
+
const insert = !!c.privileges.INSERT;
|
|
78
|
+
const _delete = !!this.tableOrViewInfo.privileges.delete;
|
|
79
|
+
let update = !!c.privileges.UPDATE;
|
|
80
|
+
const prostgles = this.dboBuilder.prostgles;
|
|
81
|
+
const fileConfig = getFileColumnInfo({
|
|
82
|
+
colName: c.name,
|
|
83
|
+
tableHandler: this,
|
|
84
|
+
});
|
|
85
|
+
/** Do not allow updates to file table unless it's to delete fields */
|
|
86
|
+
if (prostgles.opts.fileTable?.tableName === this.name) {
|
|
87
|
+
update = false;
|
|
88
|
+
}
|
|
89
|
+
const nonOrderableUD_Types = [...prostgles_types_1._PG_geometric, "xml"];
|
|
90
|
+
const result = {
|
|
91
|
+
...(0, prostgles_types_1.omitKeys)(c, ["privileges"]),
|
|
92
|
+
label,
|
|
93
|
+
tsDataType: (0, prostgles_types_1.postgresToTsType)(c.udt_name),
|
|
94
|
+
insert: insert &&
|
|
95
|
+
!!rules.insert?.fields.includes(c.name) &&
|
|
96
|
+
tableRules?.insert?.forcedData?.[c.name] === undefined &&
|
|
97
|
+
c.is_updatable,
|
|
98
|
+
select: select && !!rules.select?.fields.includes(c.name),
|
|
99
|
+
orderBy: select &&
|
|
100
|
+
!!rules.select?.orderByFields.includes(c.name) &&
|
|
101
|
+
!nonOrderableUD_Types.includes(c.udt_name),
|
|
102
|
+
filter: !!rules.select?.filterFields.includes(c.name),
|
|
103
|
+
update: update &&
|
|
104
|
+
!!rules.update?.fields.includes(c.name) &&
|
|
105
|
+
tableRules?.update?.forcedData?.[c.name] === undefined &&
|
|
106
|
+
c.is_updatable &&
|
|
107
|
+
dynamicUpdateFields.includes(c.name),
|
|
108
|
+
delete: _delete && !!rules.delete?.filterFields.includes(c.name),
|
|
109
|
+
...(prostgles.tableConfigurator?.getColInfo({
|
|
110
|
+
table: this.name,
|
|
111
|
+
col: c.name,
|
|
112
|
+
lang,
|
|
113
|
+
}) || {}),
|
|
114
|
+
...(fileConfig && { file: fileConfig }),
|
|
115
|
+
};
|
|
116
|
+
return result;
|
|
117
|
+
})
|
|
118
|
+
.filter((c) => c.select || c.update || c.delete || c.insert);
|
|
119
|
+
return rawColumns;
|
|
120
|
+
}
|
|
115
121
|
const capitalizeFirstLetter = (string, nonAlphaNumericReplacement = " ") => {
|
|
116
122
|
const str = string.replace(/[\W_]+/g, nonAlphaNumericReplacement);
|
|
117
123
|
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getColumns.js","sourceRoot":"","sources":["../../lib/DboBuilder/getColumns.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"getColumns.js","sourceRoot":"","sources":["../../lib/DboBuilder/getColumns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { DB } from "../initProstgles";
|
|
2
|
+
import type { TableConfig } from "./TableConfigTypes";
|
|
3
|
+
/** Reconcile only triggers owned by tableConfig; preserve manually created triggers. */
|
|
4
|
+
export declare const getTableTriggerQueries: (db: DB, tableName: string, tableConfig: TableConfig[string], asName: (name: string) => string) => Promise<string[]>;
|
|
5
|
+
//# sourceMappingURL=getTableTriggerQueries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getTableTriggerQueries.d.ts","sourceRoot":"","sources":["../../lib/TableConfig/getTableTriggerQueries.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItD,wFAAwF;AACxF,eAAO,MAAM,sBAAsB,GACjC,IAAI,EAAE,EACN,WAAW,MAAM,EACjB,aAAa,WAAW,CAAC,MAAM,CAAC,EAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,KAC/B,OAAO,CAAC,MAAM,EAAE,CA4DlB,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTableTriggerQueries = void 0;
|
|
4
|
+
const pg_promise_1 = require("pg-promise");
|
|
5
|
+
const md5_1 = require("prostgles-types/dist/md5");
|
|
6
|
+
const MANAGED_TRIGGER_PREFIX = "prostgles.tableConfig:";
|
|
7
|
+
/** Reconcile only triggers owned by tableConfig; preserve manually created triggers. */
|
|
8
|
+
const getTableTriggerQueries = async (db, tableName, tableConfig, asName) => {
|
|
9
|
+
const tableIdent = asName(tableName);
|
|
10
|
+
const existing = await db.any(`
|
|
11
|
+
SELECT t.tgname AS name, obj_description(t.oid, 'pg_trigger') AS comment
|
|
12
|
+
FROM pg_trigger t
|
|
13
|
+
WHERE t.tgrelid = to_regclass($1) AND NOT t.tgisinternal
|
|
14
|
+
`, [tableIdent]);
|
|
15
|
+
const queries = [];
|
|
16
|
+
const desired = new Set();
|
|
17
|
+
const isDropped = tableConfig.dropIfExists || tableConfig.dropIfExistsCascade;
|
|
18
|
+
for (const [functionName, trigger] of Object.entries(tableConfig.triggers ?? {})) {
|
|
19
|
+
const functionIdent = asName(functionName);
|
|
20
|
+
let functionAdded = false;
|
|
21
|
+
for (const action of trigger.actions) {
|
|
22
|
+
const name = `${functionName}_${action}`;
|
|
23
|
+
desired.add(name);
|
|
24
|
+
const triggerIdent = asName(name);
|
|
25
|
+
const transitionTables = trigger.forEach === "row"
|
|
26
|
+
? ""
|
|
27
|
+
: [
|
|
28
|
+
"REFERENCING",
|
|
29
|
+
action !== "delete" ? "NEW TABLE AS new_table" : "",
|
|
30
|
+
action !== "insert" ? "OLD TABLE AS old_table" : "",
|
|
31
|
+
].join(" ");
|
|
32
|
+
const definition = `CREATE TRIGGER ${triggerIdent}
|
|
33
|
+
${trigger.type} ${action} ON ${tableIdent}
|
|
34
|
+
${transitionTables} FOR EACH ${trigger.forEach}
|
|
35
|
+
EXECUTE FUNCTION ${functionIdent}();`;
|
|
36
|
+
const comment = MANAGED_TRIGGER_PREFIX + (0, md5_1.md5)(definition + trigger.query);
|
|
37
|
+
const previous = existing.find((entry) => entry.name === name);
|
|
38
|
+
if (!isDropped && previous?.comment === comment)
|
|
39
|
+
continue;
|
|
40
|
+
if (!functionAdded) {
|
|
41
|
+
queries.push(`CREATE OR REPLACE FUNCTION ${functionIdent}()
|
|
42
|
+
RETURNS trigger LANGUAGE plpgsql AS ${pg_promise_1.as.text(trigger.query)};`);
|
|
43
|
+
functionAdded = true;
|
|
44
|
+
}
|
|
45
|
+
queries.push(`DROP TRIGGER IF EXISTS ${triggerIdent} ON ${tableIdent};`);
|
|
46
|
+
queries.push(definition);
|
|
47
|
+
queries.push(`COMMENT ON TRIGGER ${triggerIdent} ON ${tableIdent} IS ${pg_promise_1.as.text(comment)};`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (!isDropped) {
|
|
51
|
+
for (const trigger of existing) {
|
|
52
|
+
if (trigger.comment?.startsWith(MANAGED_TRIGGER_PREFIX) &&
|
|
53
|
+
!desired.has(trigger.name)) {
|
|
54
|
+
queries.push(`DROP TRIGGER ${asName(trigger.name)} ON ${tableIdent};`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return queries;
|
|
59
|
+
};
|
|
60
|
+
exports.getTableTriggerQueries = getTableTriggerQueries;
|
|
61
|
+
//# sourceMappingURL=getTableTriggerQueries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getTableTriggerQueries.js","sourceRoot":"","sources":["../../lib/TableConfig/getTableTriggerQueries.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getTableTriggerQueries.spec.d.ts","sourceRoot":"","sources":["../../lib/TableConfig/getTableTriggerQueries.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,56 @@
|
|
|
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 prostgles_types_1 = require("prostgles-types");
|
|
9
|
+
const getTableTriggerQueries_1 = require("./getTableTriggerQueries");
|
|
10
|
+
void (0, node_test_1.default)("trigger configuration quotes names and bodies and preserves unmanaged triggers", async () => {
|
|
11
|
+
const db = {
|
|
12
|
+
any: () => Promise.resolve([
|
|
13
|
+
{ name: "manual", comment: null },
|
|
14
|
+
{ name: "old_insert", comment: "prostgles.tableConfig:old" },
|
|
15
|
+
]),
|
|
16
|
+
};
|
|
17
|
+
const queries = await (0, getTableTriggerQueries_1.getTableTriggerQueries)(db, "Odd ' table", {
|
|
18
|
+
triggers: {
|
|
19
|
+
audit: {
|
|
20
|
+
type: "after",
|
|
21
|
+
actions: ["insert"],
|
|
22
|
+
forEach: "row",
|
|
23
|
+
query: "BEGIN RAISE NOTICE '$$'; RETURN NULL; END;",
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
}, prostgles_types_1.asName);
|
|
27
|
+
strict_1.default.ok(queries.some((query) => query.includes('ON "Odd \' table"')));
|
|
28
|
+
strict_1.default.ok(queries.some((query) => query.includes("AS 'BEGIN RAISE NOTICE ''$$''; RETURN NULL; END;';")));
|
|
29
|
+
strict_1.default.ok(queries.some((query) => query.includes('DROP TRIGGER "old_insert"')));
|
|
30
|
+
strict_1.default.ok(!queries.some((query) => query.includes('DROP TRIGGER "manual"')));
|
|
31
|
+
});
|
|
32
|
+
void (0, node_test_1.default)("unchanged triggers do not produce DDL; changed bodies replace them", async () => {
|
|
33
|
+
const trigger = {
|
|
34
|
+
type: "after",
|
|
35
|
+
actions: ["update"],
|
|
36
|
+
forEach: "row",
|
|
37
|
+
query: "BEGIN RETURN NULL; END;",
|
|
38
|
+
};
|
|
39
|
+
const config = {
|
|
40
|
+
triggers: { audit: { ...trigger, actions: [...trigger.actions] } },
|
|
41
|
+
};
|
|
42
|
+
const first = await (0, getTableTriggerQueries_1.getTableTriggerQueries)({ any: () => Promise.resolve([]) }, "records", config, prostgles_types_1.asName);
|
|
43
|
+
const commentQuery = first.find((query) => query.startsWith("COMMENT ON"));
|
|
44
|
+
const comment = commentQuery.split(" IS '")[1].slice(0, -2);
|
|
45
|
+
const db = {
|
|
46
|
+
any: () => Promise.resolve([{ name: "audit_update", comment }]),
|
|
47
|
+
};
|
|
48
|
+
strict_1.default.deepEqual(await (0, getTableTriggerQueries_1.getTableTriggerQueries)(db, "records", config, prostgles_types_1.asName), []);
|
|
49
|
+
config.triggers.audit.query =
|
|
50
|
+
"BEGIN RAISE NOTICE 'changed'; RETURN NULL; END;";
|
|
51
|
+
strict_1.default.ok((await (0, getTableTriggerQueries_1.getTableTriggerQueries)(db, "records", config, prostgles_types_1.asName)).some((query) => query.startsWith("CREATE OR REPLACE FUNCTION")));
|
|
52
|
+
strict_1.default.deepEqual(await (0, getTableTriggerQueries_1.getTableTriggerQueries)(db, "records", {}, prostgles_types_1.asName), [
|
|
53
|
+
'DROP TRIGGER "audit_update" ON "records";',
|
|
54
|
+
]);
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=getTableTriggerQueries.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getTableTriggerQueries.spec.js","sourceRoot":"","sources":["../../lib/TableConfig/getTableTriggerQueries.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initTableConfig.d.ts","sourceRoot":"","sources":["../../lib/TableConfig/initTableConfig.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"initTableConfig.d.ts","sourceRoot":"","sources":["../../lib/TableConfig/initTableConfig.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,eAAO,MAAM,eAAe,GAAmB,MAAM,iBAAiB,uBAiRrE,CAAC"}
|
|
@@ -7,6 +7,7 @@ const fetchTableConstraints_1 = require("./fetchTableConstraints");
|
|
|
7
7
|
const getConstraintDefinitionQueries_1 = require("./getConstraintDefinitionQueries");
|
|
8
8
|
const getFutureTableSchema_1 = require("./getFutureTableSchema");
|
|
9
9
|
const getTableColumnQueries_1 = require("./getTableColumnQueries");
|
|
10
|
+
const getTableTriggerQueries_1 = require("./getTableTriggerQueries");
|
|
10
11
|
const getIndexesQueries_1 = require("./indexes/getIndexesQueries");
|
|
11
12
|
const runMigrations_1 = require("./runMigrations");
|
|
12
13
|
const initTableConfig = async function () {
|
|
@@ -191,63 +192,7 @@ const initTableConfig = async function () {
|
|
|
191
192
|
}
|
|
192
193
|
const indexQueries = await (0, getIndexesQueries_1.getIndexesQueries)(this.db, tableName, tableConf);
|
|
193
194
|
queries.push(...indexQueries);
|
|
194
|
-
|
|
195
|
-
if (triggers) {
|
|
196
|
-
const isDropped = dropIfExists || dropIfExistsCascade;
|
|
197
|
-
const existingTriggers = await this.db.any(`
|
|
198
|
-
SELECT event_object_table
|
|
199
|
-
,trigger_name
|
|
200
|
-
FROM information_schema.triggers
|
|
201
|
-
WHERE event_object_table = \${tableName}
|
|
202
|
-
ORDER BY event_object_table
|
|
203
|
-
`, { tableName });
|
|
204
|
-
// const existingTriggerFuncs = await this.dbo.sql!(`
|
|
205
|
-
// SELECT p.oid,proname,prosrc,u.usename
|
|
206
|
-
// FROM pg_proc p
|
|
207
|
-
// JOIN pg_user u ON u.usesysid = p.proowner
|
|
208
|
-
// WHERE prorettype = 2279;
|
|
209
|
-
// `, {}, { returnType: "rows" }) as { proname: string }[];
|
|
210
|
-
Object.entries(triggers).forEach(([triggerFuncName, trigger]) => {
|
|
211
|
-
const funcNameParsed = asName(triggerFuncName);
|
|
212
|
-
let addedFunc = false;
|
|
213
|
-
const addFuncDef = () => {
|
|
214
|
-
if (addedFunc)
|
|
215
|
-
return;
|
|
216
|
-
addedFunc = true;
|
|
217
|
-
queries.push(`
|
|
218
|
-
CREATE OR REPLACE FUNCTION ${funcNameParsed}()
|
|
219
|
-
RETURNS trigger
|
|
220
|
-
LANGUAGE plpgsql
|
|
221
|
-
AS
|
|
222
|
-
$$
|
|
223
|
-
|
|
224
|
-
${trigger.query}
|
|
225
|
-
|
|
226
|
-
$$;
|
|
227
|
-
`);
|
|
228
|
-
};
|
|
229
|
-
trigger.actions.forEach((action) => {
|
|
230
|
-
const triggerActionName = triggerFuncName + "_" + action;
|
|
231
|
-
const triggerActionNameParsed = asName(triggerActionName);
|
|
232
|
-
if (isDropped) {
|
|
233
|
-
queries.push(`DROP TRIGGER IF EXISTS ${triggerActionNameParsed} ON ${tableName};`);
|
|
234
|
-
}
|
|
235
|
-
if (isDropped || !existingTriggers.some((t) => t.trigger_name === triggerActionName)) {
|
|
236
|
-
addFuncDef();
|
|
237
|
-
const newTableName = action !== "delete" ? "NEW TABLE AS new_table" : "";
|
|
238
|
-
const oldTableName = action !== "insert" ? "OLD TABLE AS old_table" : "";
|
|
239
|
-
const transitionTables = trigger.forEach === "row" ? "" : `REFERENCING ${newTableName} ${oldTableName}`;
|
|
240
|
-
queries.push(`
|
|
241
|
-
CREATE TRIGGER ${triggerActionNameParsed}
|
|
242
|
-
${trigger.type} ${action} ON ${tableName}
|
|
243
|
-
${transitionTables}
|
|
244
|
-
FOR EACH ${trigger.forEach}
|
|
245
|
-
EXECUTE PROCEDURE ${funcNameParsed}();
|
|
246
|
-
`);
|
|
247
|
-
}
|
|
248
|
-
});
|
|
249
|
-
});
|
|
250
|
-
}
|
|
195
|
+
queries.push(...(await (0, getTableTriggerQueries_1.getTableTriggerQueries)(this.db, tableName, tableConf, asName)));
|
|
251
196
|
}
|
|
252
197
|
if (queries.length) {
|
|
253
198
|
const q = makeQuery(queries);
|