prostgles-server 4.2.495 → 4.2.496
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/getSubscribeRelatedTables.d.ts.map +1 -1
- package/dist/DboBuilder/getSubscribeRelatedTables.js +11 -9
- package/dist/DboBuilder/getSubscribeRelatedTables.js.map +1 -1
- package/dist/PubSubManager/addTrigger.d.ts +1 -1
- package/dist/PubSubManager/addTrigger.d.ts.map +1 -1
- package/dist/PubSubManager/addTrigger.js +8 -6
- package/dist/PubSubManager/addTrigger.js.map +1 -1
- package/lib/DboBuilder/getSubscribeRelatedTables.ts +18 -11
- package/lib/PubSubManager/addTrigger.ts +12 -9
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSubscribeRelatedTables.d.ts","sourceRoot":"","sources":["../../lib/DboBuilder/getSubscribeRelatedTables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAkB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"getSubscribeRelatedTables.d.ts","sourceRoot":"","sources":["../../lib/DboBuilder/getSubscribeRelatedTables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAkB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAI7D,KAAK,IAAI,GAAG;IACV,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC;IAC1D,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,WAAW,GAAG,YAAY,EAChC,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,IAAI,gDA6GxC"}
|
|
@@ -24,13 +24,7 @@ async function getSubscribeRelatedTables({ filter, localParams, newQuery }) {
|
|
|
24
24
|
if (!relatedTableOrViewHandler) {
|
|
25
25
|
throw `Table ${relatedTableName} not found`;
|
|
26
26
|
}
|
|
27
|
-
|
|
28
|
-
if (alreadyPushed || relatedTableOrViewHandler.is_view) {
|
|
29
|
-
console.warn({
|
|
30
|
-
selectedColumnNames,
|
|
31
|
-
alreadyPushed,
|
|
32
|
-
is_view: relatedTableOrViewHandler.is_view,
|
|
33
|
-
});
|
|
27
|
+
if (relatedTableOrViewHandler.is_view) {
|
|
34
28
|
return;
|
|
35
29
|
}
|
|
36
30
|
viewOptions ??= {
|
|
@@ -54,11 +48,19 @@ async function getSubscribeRelatedTables({ filter, localParams, newQuery }) {
|
|
|
54
48
|
const relatedTableJoinPathItem = joinPath.at(-1);
|
|
55
49
|
const joinColumns = relatedTableJoinPathItem?.on.map((columnPair) => Object.values(columnPair)).flat() ?? [];
|
|
56
50
|
const [firstField, ...otherFields] = Array.from(new Set([...(selectedColumnNames ?? []), ...joinColumns, ...joinConditionInfo.columnsUsed]));
|
|
51
|
+
const tracked_columns = !firstField ? undefined : [firstField, ...otherFields];
|
|
52
|
+
const condition = joinConditionInfo.where;
|
|
53
|
+
const alreadyPushed = viewOptions.relatedTables.find((rt) => rt.tableName === relatedTableName && rt.condition === condition);
|
|
54
|
+
if (alreadyPushed) {
|
|
55
|
+
const [firstMerged, ...others] = Array.from(new Set([...(alreadyPushed.tracked_columns ?? []), ...(tracked_columns ?? [])]));
|
|
56
|
+
alreadyPushed.tracked_columns = firstMerged ? [firstMerged, ...others] : undefined;
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
57
59
|
viewOptions.relatedTables.push({
|
|
58
60
|
tableName: relatedTableName,
|
|
59
61
|
tableNameEscaped: (0, prostgles_types_1.asName)(relatedTableName),
|
|
60
|
-
tracked_columns
|
|
61
|
-
condition
|
|
62
|
+
tracked_columns,
|
|
63
|
+
condition,
|
|
62
64
|
});
|
|
63
65
|
};
|
|
64
66
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSubscribeRelatedTables.js","sourceRoot":"","sources":["../../lib/DboBuilder/getSubscribeRelatedTables.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"getSubscribeRelatedTables.js","sourceRoot":"","sources":["../../lib/DboBuilder/getSubscribeRelatedTables.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import type { PRGLIOSocket } from "../DboBuilder/DboBuilderTypes";
|
|
1
2
|
import type { ViewSubscriptionOptions } from "./PubSubManager";
|
|
2
3
|
import { type PubSubManager } from "./PubSubManager";
|
|
3
|
-
import type { PRGLIOSocket } from "../DboBuilder/DboBuilderTypes";
|
|
4
4
|
export type AddTriggerParams = {
|
|
5
5
|
table_name: string;
|
|
6
6
|
condition: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addTrigger.d.ts","sourceRoot":"","sources":["../../lib/PubSubManager/addTrigger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"addTrigger.d.ts","sourceRoot":"","sources":["../../lib/PubSubManager/addTrigger.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIrD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC;CACpD,CAAC;AACF,wBAAsB,UAAU,CAC9B,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,uBAAuB,GAAG,SAAS,EAChD,MAAM,EAAE,YAAY,GAAG,SAAS;;;;;;;;;;IA8GjC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.addTrigger = addTrigger;
|
|
4
|
-
const prostgles_types_1 = require("prostgles-types");
|
|
5
4
|
const crypto = require("crypto");
|
|
5
|
+
const prostgles_types_1 = require("prostgles-types");
|
|
6
6
|
const PubSubManagerUtils_1 = require("./PubSubManagerUtils");
|
|
7
7
|
const getDataWatchFunctionQuery_1 = require("./init/getDataWatchFunctionQuery");
|
|
8
8
|
async function addTrigger(params, viewOptions, socket) {
|
|
@@ -29,6 +29,7 @@ async function addTrigger(params, viewOptions, socket) {
|
|
|
29
29
|
relatedViewDef: viewOptions?.definition ?? null,
|
|
30
30
|
columnsInfo: getColumnsInfo(params, tableHandler),
|
|
31
31
|
};
|
|
32
|
+
const TRACKED_COLUMNS = "tracked_columns";
|
|
32
33
|
await this.db.any(`
|
|
33
34
|
BEGIN WORK;
|
|
34
35
|
/* ${PubSubManagerUtils_1.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID} */
|
|
@@ -64,13 +65,13 @@ async function addTrigger(params, viewOptions, socket) {
|
|
|
64
65
|
\${columnsInfo}
|
|
65
66
|
)
|
|
66
67
|
ON CONFLICT (app_id, table_name, condition_hash)
|
|
67
|
-
DO UPDATE /* upsert
|
|
68
|
+
DO UPDATE /* upsert ${TRACKED_COLUMNS} where necessary */
|
|
68
69
|
SET columns_info = CASE WHEN EXCLUDED.columns_info IS NOT NULL AND prostgles.app_triggers.columns_info IS NOT NULL THEN
|
|
69
70
|
jsonb_set(
|
|
70
71
|
prostgles.app_triggers.columns_info,
|
|
71
|
-
'{
|
|
72
|
-
/* THE
|
|
73
|
-
(prostgles.app_triggers.columns_info->'
|
|
72
|
+
'{${TRACKED_COLUMNS}}',
|
|
73
|
+
/* THE PARENTHESES ARE CRUCIAL IN ENSURING THE MERGE WORKS */
|
|
74
|
+
(prostgles.app_triggers.columns_info->'${TRACKED_COLUMNS}') || (EXCLUDED.columns_info->'${TRACKED_COLUMNS}')
|
|
74
75
|
)
|
|
75
76
|
END
|
|
76
77
|
WHERE prostgles.app_triggers.columns_info IS NOT NULL
|
|
@@ -112,7 +113,8 @@ const getColumnsInfo = ({ tracked_columns, table_name }, tableHandler) => {
|
|
|
112
113
|
cast_to: getDataWatchFunctionQuery_1.udtNamesWithoutEqualityComparison.includes(c.udt_name) ? "::TEXT" : "",
|
|
113
114
|
};
|
|
114
115
|
});
|
|
115
|
-
if (!hasPkey || !cols || !tracked_columns?.length || tracked_columns.length === cols.length) {
|
|
116
|
+
// if (!hasPkey || !cols || !tracked_columns?.length || tracked_columns.length === cols.length) {
|
|
117
|
+
if (!hasPkey || !cols || !tracked_columns?.length) {
|
|
116
118
|
return null;
|
|
117
119
|
}
|
|
118
120
|
const trackedColumnsWithInfo = tracked_columns.map((name) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addTrigger.js","sourceRoot":"","sources":["../../lib/PubSubManager/addTrigger.ts"],"names":[],"mappings":";;AAcA,
|
|
1
|
+
{"version":3,"file":"addTrigger.js","sourceRoot":"","sources":["../../lib/PubSubManager/addTrigger.ts"],"names":[],"mappings":";;AAcA,gCAkHC;AAhID,iCAAiC;AACjC,qDAA+D;AAK/D,6DAA0E;AAC1E,gFAAqF;AAO9E,KAAK,UAAU,UAAU,CAE9B,MAAwB,EACxB,WAAgD,EAChD,MAAgC;IAEhC,MAAM,YAAY,GAAG,MAAM,IAAA,4BAAU,EAAC,KAAK,IAAI,EAAE;QAC/C,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QACrC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU;YAAE,MAAM,oBAAoB,CAAC;QAC5C,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;YAC3C,SAAS,GAAG,MAAM,CAAC;QACrB,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC;YACxD,MAAM,mHAAmH,CAAC;QAC5H,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,wCAAwC,UAAU,YAAY,CAAC;QACvE,CAAC;QAED,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,UAAU;YACrB,SAAS,EAAE,SAAS;YACpB,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YACvE,eAAe,EAAE,WAAW,EAAE,QAAQ,IAAI,IAAI;YAC9C,cAAc,EAAE,WAAW,EAAE,UAAU,IAAI,IAAI;YAC/C,WAAW,EAAE,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC;SAClD,CAAC;QAEF,MAAM,eAAe,GAAG,iBAA2D,CAAC;QAEpF,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CACf;;WAEK,uDAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAiChB,eAAe;;;;gBAI5B,eAAe;;qDAEsB,eAAe,kCAAkC,eAAe;;;;;;;KAOhH,EACC;YACE,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,OAAO;SACX,CACF,CAAC;QAEF,6DAA6D;QAC7D,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAE7B,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,IAAI,CAAC;QACd,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,YAAY;QACrB,SAAS,EAAE,YAAY,CAAC,IAAI,EAAE,SAAS,IAAI,MAAM,CAAC,SAAS;QAC3D,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,QAAQ,EAAE,MAAM,EAAE,EAAE;QACpB,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;QACpD,KAAK,EAAE,YAAY,CAAC,KAAK;QACzB,GAAG,EAAE,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QAC9E,SAAS,EAAE,MAAM,CAAC,UAAU;QAC5B,kBAAkB,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,WAAW,EAAE,MAAM,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE;QAChD,QAAQ,EAAE,IAAI,CAAC,SAAS;KACzB,CAAC,CAAC;IAEH,IAAI,YAAY,CAAC,KAAK;QAAE,MAAM,YAAY,CAAC,KAAK,CAAC;IAEjD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,cAAc,GAAG,CACrB,EAAE,eAAe,EAAE,UAAU,EAAoB,EACjD,YAAmC,EACnC,EAAE;IACF,IAAI,OAAO,GAAG,KAAgB,CAAC;IAC/B,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC3C,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC;QAC/B,OAAO;YACL,GAAG,IAAA,0BAAQ,EAAC,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACnC,OAAO,EAAE,6DAAiC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;SAChF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,iGAAiG;IACjG,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,sBAAsB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,mBAAmB,IAAI,uBAAuB,UAAU,EAAE,CAAC;QACnE,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG;QACnB,cAAc,EAAE,IAAI;aACjB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,IAAA,wBAAM,EAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAA,wBAAM,EAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;aACvD,IAAI,CAAC,OAAO,CAAC;QAChB,eAAe,EAAE,sBAAsB,CAAC,MAAM,CAC5C,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3B,GAAG,GAAG;YACN,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACxB,CAAC,EACF,EAA4B,CAC7B;KACF,CAAC;IAEF,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC"}
|
|
@@ -7,6 +7,7 @@ import type { NewQuery } from "./QueryBuilder/QueryBuilder";
|
|
|
7
7
|
import type { TableHandler } from "./TableHandler/TableHandler";
|
|
8
8
|
import type { ViewHandler } from "./ViewHandler/ViewHandler";
|
|
9
9
|
import { getViewRelatedTables } from "./ViewRelatedTables/getViewRelatedTables";
|
|
10
|
+
import type { AddTriggerParams } from "../PubSubManager/addTrigger";
|
|
10
11
|
|
|
11
12
|
type Args = {
|
|
12
13
|
selectParams: Omit<SubscribeParams, "throttle">;
|
|
@@ -46,15 +47,7 @@ export async function getSubscribeRelatedTables(
|
|
|
46
47
|
throw `Table ${relatedTableName} not found`;
|
|
47
48
|
}
|
|
48
49
|
|
|
49
|
-
|
|
50
|
-
(rt) => rt.tableName === relatedTableName,
|
|
51
|
-
);
|
|
52
|
-
if (alreadyPushed || relatedTableOrViewHandler.is_view) {
|
|
53
|
-
console.warn({
|
|
54
|
-
selectedColumnNames,
|
|
55
|
-
alreadyPushed,
|
|
56
|
-
is_view: relatedTableOrViewHandler.is_view,
|
|
57
|
-
});
|
|
50
|
+
if (relatedTableOrViewHandler.is_view) {
|
|
58
51
|
return;
|
|
59
52
|
}
|
|
60
53
|
|
|
@@ -89,11 +82,25 @@ export async function getSubscribeRelatedTables(
|
|
|
89
82
|
new Set([...(selectedColumnNames ?? []), ...joinColumns, ...joinConditionInfo.columnsUsed]),
|
|
90
83
|
);
|
|
91
84
|
|
|
85
|
+
const tracked_columns: AddTriggerParams["tracked_columns"] =
|
|
86
|
+
!firstField ? undefined : [firstField, ...otherFields];
|
|
87
|
+
const condition = joinConditionInfo.where;
|
|
88
|
+
|
|
89
|
+
const alreadyPushed = viewOptions.relatedTables.find(
|
|
90
|
+
(rt) => rt.tableName === relatedTableName && rt.condition === condition,
|
|
91
|
+
);
|
|
92
|
+
if (alreadyPushed) {
|
|
93
|
+
const [firstMerged, ...others] = Array.from(
|
|
94
|
+
new Set([...(alreadyPushed.tracked_columns ?? []), ...(tracked_columns ?? [])]),
|
|
95
|
+
);
|
|
96
|
+
alreadyPushed.tracked_columns = firstMerged ? [firstMerged, ...others] : undefined;
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
92
99
|
viewOptions.relatedTables.push({
|
|
93
100
|
tableName: relatedTableName,
|
|
94
101
|
tableNameEscaped: asName(relatedTableName),
|
|
95
|
-
tracked_columns
|
|
96
|
-
condition
|
|
102
|
+
tracked_columns,
|
|
103
|
+
condition,
|
|
97
104
|
});
|
|
98
105
|
};
|
|
99
106
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import * as crypto from "crypto";
|
|
1
2
|
import { asName, pickKeys, tryCatchV2 } from "prostgles-types";
|
|
3
|
+
import type { PRGLIOSocket } from "../DboBuilder/DboBuilderTypes";
|
|
4
|
+
import type { TableHandler } from "../DboBuilder/TableHandler/TableHandler";
|
|
2
5
|
import type { ViewSubscriptionOptions } from "./PubSubManager";
|
|
3
6
|
import { type PubSubManager } from "./PubSubManager";
|
|
4
|
-
import
|
|
5
|
-
import type { PRGLIOSocket } from "../DboBuilder/DboBuilderTypes";
|
|
6
|
-
import { asValue, EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID } from "./PubSubManagerUtils";
|
|
7
|
+
import { EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID } from "./PubSubManagerUtils";
|
|
7
8
|
import { udtNamesWithoutEqualityComparison } from "./init/getDataWatchFunctionQuery";
|
|
8
|
-
import type { TableHandler } from "../DboBuilder/TableHandler/TableHandler";
|
|
9
9
|
|
|
10
10
|
export type AddTriggerParams = {
|
|
11
11
|
table_name: string;
|
|
@@ -44,6 +44,8 @@ export async function addTrigger(
|
|
|
44
44
|
columnsInfo: getColumnsInfo(params, tableHandler),
|
|
45
45
|
};
|
|
46
46
|
|
|
47
|
+
const TRACKED_COLUMNS = "tracked_columns" as const satisfies keyof AddTriggerParams;
|
|
48
|
+
|
|
47
49
|
await this.db.any(
|
|
48
50
|
`
|
|
49
51
|
BEGIN WORK;
|
|
@@ -80,13 +82,13 @@ export async function addTrigger(
|
|
|
80
82
|
\${columnsInfo}
|
|
81
83
|
)
|
|
82
84
|
ON CONFLICT (app_id, table_name, condition_hash)
|
|
83
|
-
DO UPDATE /* upsert
|
|
85
|
+
DO UPDATE /* upsert ${TRACKED_COLUMNS} where necessary */
|
|
84
86
|
SET columns_info = CASE WHEN EXCLUDED.columns_info IS NOT NULL AND prostgles.app_triggers.columns_info IS NOT NULL THEN
|
|
85
87
|
jsonb_set(
|
|
86
88
|
prostgles.app_triggers.columns_info,
|
|
87
|
-
'{
|
|
88
|
-
/* THE
|
|
89
|
-
(prostgles.app_triggers.columns_info->'
|
|
89
|
+
'{${TRACKED_COLUMNS}}',
|
|
90
|
+
/* THE PARENTHESES ARE CRUCIAL IN ENSURING THE MERGE WORKS */
|
|
91
|
+
(prostgles.app_triggers.columns_info->'${TRACKED_COLUMNS}') || (EXCLUDED.columns_info->'${TRACKED_COLUMNS}')
|
|
90
92
|
)
|
|
91
93
|
END
|
|
92
94
|
WHERE prostgles.app_triggers.columns_info IS NOT NULL
|
|
@@ -139,7 +141,8 @@ const getColumnsInfo = (
|
|
|
139
141
|
};
|
|
140
142
|
});
|
|
141
143
|
|
|
142
|
-
if (!hasPkey || !cols || !tracked_columns?.length || tracked_columns.length === cols.length) {
|
|
144
|
+
// if (!hasPkey || !cols || !tracked_columns?.length || tracked_columns.length === cols.length) {
|
|
145
|
+
if (!hasPkey || !cols || !tracked_columns?.length) {
|
|
143
146
|
return null;
|
|
144
147
|
}
|
|
145
148
|
|