prostgles-server 4.2.300 → 4.2.302
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/PubSubManager/addTrigger.js +6 -6
- package/dist/PubSubManager/addTrigger.js.map +1 -1
- package/dist/PubSubManager/init/getDataWatchFunctionQuery.d.ts.map +1 -1
- package/dist/PubSubManager/init/getDataWatchFunctionQuery.js +10 -23
- package/dist/PubSubManager/init/getDataWatchFunctionQuery.js.map +1 -1
- package/lib/PubSubManager/addTrigger.ts +7 -8
- package/lib/PubSubManager/init/getDataWatchFunctionQuery.ts +10 -23
- package/package.json +1 -1
|
@@ -98,9 +98,6 @@ async function addTrigger(params, viewOptions, socket) {
|
|
|
98
98
|
}
|
|
99
99
|
exports.addTrigger = addTrigger;
|
|
100
100
|
const getColumnsInfo = ({ tracked_columns, table_name }, tableHandler) => {
|
|
101
|
-
if (tracked_columns && !tracked_columns.length) {
|
|
102
|
-
throw "tracked_columns cannot be defined and empty";
|
|
103
|
-
}
|
|
104
101
|
let hasPkey = false;
|
|
105
102
|
const cols = tableHandler.columns?.map((c) => {
|
|
106
103
|
hasPkey = hasPkey || c.is_pkey;
|
|
@@ -114,6 +111,9 @@ const getColumnsInfo = ({ tracked_columns, table_name }, tableHandler) => {
|
|
|
114
111
|
throw `tracked_columns ${colName} not found in table ${table_name}`;
|
|
115
112
|
}
|
|
116
113
|
});
|
|
114
|
+
/**
|
|
115
|
+
* TODO: finish tracked_columns by trigger condition
|
|
116
|
+
*/
|
|
117
117
|
const columns_info = !hasPkey || !cols || !tracked_columns?.length || tracked_columns.length === cols.length ?
|
|
118
118
|
null
|
|
119
119
|
: {
|
|
@@ -121,12 +121,12 @@ const getColumnsInfo = ({ tracked_columns, table_name }, tableHandler) => {
|
|
|
121
121
|
.filter((c) => c.is_pkey)
|
|
122
122
|
.map((c) => `n.${(0, prostgles_types_1.asName)(c.name)} = o.${(0, prostgles_types_1.asName)(c.name)}`)
|
|
123
123
|
.join(" AND "),
|
|
124
|
-
tracked_columns:
|
|
124
|
+
tracked_columns: cols.reduce((acc, { name }) => ({
|
|
125
125
|
...acc,
|
|
126
|
-
[
|
|
126
|
+
[name]: 1,
|
|
127
127
|
}), {}),
|
|
128
128
|
where_statement: cols
|
|
129
|
-
.filter((c) => !c.is_pkey && tracked_columns.includes(c.name))
|
|
129
|
+
// .filter((c) => !c.is_pkey && tracked_columns.includes(c.name))
|
|
130
130
|
.map((c) => `column_name = ${(0, PubSubManagerUtils_1.asValue)(c.name)} AND (ROW(n.*) IS NULL OR n.${(0, prostgles_types_1.asName)(c.name)}${c.cast_to} IS DISTINCT FROM o.${(0, prostgles_types_1.asName)(c.name)}${c.cast_to})`)
|
|
131
131
|
.join(" OR \n"),
|
|
132
132
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addTrigger.js","sourceRoot":"","sources":["../../lib/PubSubManager/addTrigger.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"addTrigger.js","sourceRoot":"","sources":["../../lib/PubSubManager/addTrigger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDataWatchFunctionQuery.d.ts","sourceRoot":"","sources":["../../../lib/PubSubManager/init/getDataWatchFunctionQuery.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,eAAO,MAAM,iCAAiC,UAAkB,CAAC;AACjE,eAAO,MAAM,yBAAyB,cAAe,OAAO,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"getDataWatchFunctionQuery.d.ts","sourceRoot":"","sources":["../../../lib/PubSubManager/init/getDataWatchFunctionQuery.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,eAAO,MAAM,iCAAiC,UAAkB,CAAC;AACjE,eAAO,MAAM,yBAAyB,cAAe,OAAO,GAAG,SAAS,WA0JvE,CAAC"}
|
|
@@ -33,9 +33,7 @@ const getDataWatchFunctionQuery = (debugMode) => {
|
|
|
33
33
|
|
|
34
34
|
DECLARE _columns_info JSONB := NULL;
|
|
35
35
|
|
|
36
|
-
DECLARE changed_columns _TEXT := NULL;
|
|
37
|
-
|
|
38
|
-
DECLARE tracked_columns _TEXT := NULL;
|
|
36
|
+
DECLARE changed_columns _TEXT := NULL;
|
|
39
37
|
|
|
40
38
|
BEGIN
|
|
41
39
|
|
|
@@ -173,21 +171,14 @@ exports.getDataWatchFunctionQuery = getDataWatchFunctionQuery;
|
|
|
173
171
|
const CHANGED_COLUMNS_CHECK = `
|
|
174
172
|
-- Determine changed columns for UPDATE operations
|
|
175
173
|
IF TG_OP = 'UPDATE' THEN
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
SELECT
|
|
179
|
-
FROM prostgles.v_triggers
|
|
180
|
-
LEFT JOIN LATERAL jsonb_object_keys(columns_info ->'tracked_columns') col
|
|
181
|
-
ON TRUE
|
|
174
|
+
|
|
175
|
+
IF NOT EXISTS (
|
|
176
|
+
SELECT 1
|
|
177
|
+
FROM prostgles.v_triggers
|
|
182
178
|
WHERE table_name = escaped_table
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
FROM cte1
|
|
187
|
-
/* If any value is null it means that specific condition is tracking all columns so we need to check them all */
|
|
188
|
-
WHERE array_position(cols, null) IS NULL;
|
|
189
|
-
|
|
190
|
-
IF tracked_columns IS NOT NULL THEN
|
|
179
|
+
/* If any value is null it means some condition is tracking all columns so we need to check them all */
|
|
180
|
+
AND columns_info IS NULL
|
|
181
|
+
) THEN
|
|
191
182
|
|
|
192
183
|
SELECT columns_info
|
|
193
184
|
INTO _columns_info
|
|
@@ -200,7 +191,7 @@ IF TG_OP = 'UPDATE' THEN
|
|
|
200
191
|
$c$
|
|
201
192
|
WITH changed AS (
|
|
202
193
|
SELECT column_name
|
|
203
|
-
FROM
|
|
194
|
+
FROM jsonb_object_keys(%L) as column_name
|
|
204
195
|
WHERE EXISTS (
|
|
205
196
|
SELECT 1
|
|
206
197
|
FROM old_table o
|
|
@@ -212,7 +203,7 @@ IF TG_OP = 'UPDATE' THEN
|
|
|
212
203
|
SELECT array_agg(column_name)
|
|
213
204
|
FROM changed;
|
|
214
205
|
$c$,
|
|
215
|
-
tracked_columns,
|
|
206
|
+
_columns_info->'tracked_columns',
|
|
216
207
|
_columns_info->>'join_condition',
|
|
217
208
|
_columns_info->>'where_statement'
|
|
218
209
|
);
|
|
@@ -223,10 +214,6 @@ IF TG_OP = 'UPDATE' THEN
|
|
|
223
214
|
|
|
224
215
|
/* It is possible to get no changes */
|
|
225
216
|
changed_columns := COALESCE(changed_columns, '{}');
|
|
226
|
-
|
|
227
|
-
IF NOT starts_with(changed_columns::TEXT, '{') THEN
|
|
228
|
-
RAISE EXCEPTION 'changed_columns is not a JSON array: %', changed_columns;
|
|
229
|
-
END IF;
|
|
230
217
|
|
|
231
218
|
END IF;
|
|
232
219
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDataWatchFunctionQuery.js","sourceRoot":"","sources":["../../../lib/PubSubManager/init/getDataWatchFunctionQuery.ts"],"names":[],"mappings":";;;AAAA,2EAA2D;AAC3D,8DAAyD;AACzD,8DAAsF;AAEtF;;;GAGG;AACU,QAAA,iCAAiC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC1D,MAAM,yBAAyB,GAAG,CAAC,SAA8B,EAAE,EAAE;IAC1E,OAAO;;qCAE4B,wCAAY,CAAC,eAAe
|
|
1
|
+
{"version":3,"file":"getDataWatchFunctionQuery.js","sourceRoot":"","sources":["../../../lib/PubSubManager/init/getDataWatchFunctionQuery.ts"],"names":[],"mappings":";;;AAAA,2EAA2D;AAC3D,8DAAyD;AACzD,8DAAsF;AAEtF;;;GAGG;AACU,QAAA,iCAAiC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC1D,MAAM,yBAAyB,GAAG,CAAC,SAA8B,EAAE,EAAE;IAC1E,OAAO;;qCAE4B,wCAAY,CAAC,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA2B/C,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAsFP,IAAA,4BAAO,EAAC,kCAAa,CAAC,OAAO,CAAC;;kCAE5B,IAAA,4BAAO,EAAC,8BAAS,CAAC;;kCAElB,IAAA,4BAAO,EAAC,+BAAU,CAAC,IAAI,CAAC;;;;;;;;kCAQxB,SAAS,CAAC,CAAC,CAAC,6DAA6D,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;kBAgB9F,IAAA,qCAAgB,GAAE;;;;;;;8BAON,wCAAY,CAAC,eAAe;;GAEvD,CAAC;AACJ,CAAC,CAAC;AA1JW,QAAA,yBAAyB,6BA0JpC;AAEF;;GAEG;AACH,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoD7B,CAAC"}
|
|
@@ -121,10 +121,6 @@ const getColumnsInfo = (
|
|
|
121
121
|
{ tracked_columns, table_name }: AddTriggerParams,
|
|
122
122
|
tableHandler: Partial<TableHandler>
|
|
123
123
|
) => {
|
|
124
|
-
if (tracked_columns && !tracked_columns.length) {
|
|
125
|
-
throw "tracked_columns cannot be defined and empty";
|
|
126
|
-
}
|
|
127
|
-
|
|
128
124
|
let hasPkey = false as boolean;
|
|
129
125
|
const cols = tableHandler.columns?.map((c) => {
|
|
130
126
|
hasPkey = hasPkey || c.is_pkey;
|
|
@@ -138,6 +134,9 @@ const getColumnsInfo = (
|
|
|
138
134
|
throw `tracked_columns ${colName} not found in table ${table_name}`;
|
|
139
135
|
}
|
|
140
136
|
});
|
|
137
|
+
/**
|
|
138
|
+
* TODO: finish tracked_columns by trigger condition
|
|
139
|
+
*/
|
|
141
140
|
const columns_info =
|
|
142
141
|
!hasPkey || !cols || !tracked_columns?.length || tracked_columns.length === cols.length ?
|
|
143
142
|
null
|
|
@@ -146,15 +145,15 @@ const getColumnsInfo = (
|
|
|
146
145
|
.filter((c) => c.is_pkey)
|
|
147
146
|
.map((c) => `n.${asName(c.name)} = o.${asName(c.name)}`)
|
|
148
147
|
.join(" AND "),
|
|
149
|
-
tracked_columns:
|
|
150
|
-
(acc,
|
|
148
|
+
tracked_columns: cols.reduce(
|
|
149
|
+
(acc, { name }) => ({
|
|
151
150
|
...acc,
|
|
152
|
-
[
|
|
151
|
+
[name]: 1,
|
|
153
152
|
}),
|
|
154
153
|
{} as Record<string, number>
|
|
155
154
|
),
|
|
156
155
|
where_statement: cols
|
|
157
|
-
.filter((c) => !c.is_pkey && tracked_columns.includes(c.name))
|
|
156
|
+
// .filter((c) => !c.is_pkey && tracked_columns.includes(c.name))
|
|
158
157
|
.map(
|
|
159
158
|
(c) =>
|
|
160
159
|
`column_name = ${asValue(c.name)} AND (ROW(n.*) IS NULL OR n.${asName(c.name)}${c.cast_to} IS DISTINCT FROM o.${asName(c.name)}${c.cast_to})`
|
|
@@ -31,9 +31,7 @@ export const getDataWatchFunctionQuery = (debugMode: boolean | undefined) => {
|
|
|
31
31
|
|
|
32
32
|
DECLARE _columns_info JSONB := NULL;
|
|
33
33
|
|
|
34
|
-
DECLARE changed_columns _TEXT := NULL;
|
|
35
|
-
|
|
36
|
-
DECLARE tracked_columns _TEXT := NULL;
|
|
34
|
+
DECLARE changed_columns _TEXT := NULL;
|
|
37
35
|
|
|
38
36
|
BEGIN
|
|
39
37
|
|
|
@@ -171,21 +169,14 @@ export const getDataWatchFunctionQuery = (debugMode: boolean | undefined) => {
|
|
|
171
169
|
const CHANGED_COLUMNS_CHECK = `
|
|
172
170
|
-- Determine changed columns for UPDATE operations
|
|
173
171
|
IF TG_OP = 'UPDATE' THEN
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
SELECT
|
|
177
|
-
FROM prostgles.v_triggers
|
|
178
|
-
LEFT JOIN LATERAL jsonb_object_keys(columns_info ->'tracked_columns') col
|
|
179
|
-
ON TRUE
|
|
172
|
+
|
|
173
|
+
IF NOT EXISTS (
|
|
174
|
+
SELECT 1
|
|
175
|
+
FROM prostgles.v_triggers
|
|
180
176
|
WHERE table_name = escaped_table
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
FROM cte1
|
|
185
|
-
/* If any value is null it means that specific condition is tracking all columns so we need to check them all */
|
|
186
|
-
WHERE array_position(cols, null) IS NULL;
|
|
187
|
-
|
|
188
|
-
IF tracked_columns IS NOT NULL THEN
|
|
177
|
+
/* If any value is null it means some condition is tracking all columns so we need to check them all */
|
|
178
|
+
AND columns_info IS NULL
|
|
179
|
+
) THEN
|
|
189
180
|
|
|
190
181
|
SELECT columns_info
|
|
191
182
|
INTO _columns_info
|
|
@@ -198,7 +189,7 @@ IF TG_OP = 'UPDATE' THEN
|
|
|
198
189
|
$c$
|
|
199
190
|
WITH changed AS (
|
|
200
191
|
SELECT column_name
|
|
201
|
-
FROM
|
|
192
|
+
FROM jsonb_object_keys(%L) as column_name
|
|
202
193
|
WHERE EXISTS (
|
|
203
194
|
SELECT 1
|
|
204
195
|
FROM old_table o
|
|
@@ -210,7 +201,7 @@ IF TG_OP = 'UPDATE' THEN
|
|
|
210
201
|
SELECT array_agg(column_name)
|
|
211
202
|
FROM changed;
|
|
212
203
|
$c$,
|
|
213
|
-
tracked_columns,
|
|
204
|
+
_columns_info->'tracked_columns',
|
|
214
205
|
_columns_info->>'join_condition',
|
|
215
206
|
_columns_info->>'where_statement'
|
|
216
207
|
);
|
|
@@ -221,10 +212,6 @@ IF TG_OP = 'UPDATE' THEN
|
|
|
221
212
|
|
|
222
213
|
/* It is possible to get no changes */
|
|
223
214
|
changed_columns := COALESCE(changed_columns, '{}');
|
|
224
|
-
|
|
225
|
-
IF NOT starts_with(changed_columns::TEXT, '{') THEN
|
|
226
|
-
RAISE EXCEPTION 'changed_columns is not a JSON array: %', changed_columns;
|
|
227
|
-
END IF;
|
|
228
215
|
|
|
229
216
|
END IF;
|
|
230
217
|
|