prostgles-server 4.2.299 → 4.2.301
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 +7 -4
- package/dist/PubSubManager/addTrigger.js.map +1 -1
- package/dist/PubSubManager/init/getDataWatchFunctionQuery.d.ts.map +1 -1
- package/dist/PubSubManager/init/getDataWatchFunctionQuery.js +46 -39
- package/dist/PubSubManager/init/getDataWatchFunctionQuery.js.map +1 -1
- package/lib/PubSubManager/addTrigger.ts +8 -5
- package/lib/PubSubManager/init/getDataWatchFunctionQuery.ts +46 -39
- package/package.json +1 -1
|
@@ -114,6 +114,9 @@ const getColumnsInfo = ({ tracked_columns, table_name }, tableHandler) => {
|
|
|
114
114
|
throw `tracked_columns ${colName} not found in table ${table_name}`;
|
|
115
115
|
}
|
|
116
116
|
});
|
|
117
|
+
/**
|
|
118
|
+
* TODO: finish tracked_columns by trigger condition
|
|
119
|
+
*/
|
|
117
120
|
const columns_info = !hasPkey || !cols || !tracked_columns?.length || tracked_columns.length === cols.length ?
|
|
118
121
|
null
|
|
119
122
|
: {
|
|
@@ -121,13 +124,13 @@ const getColumnsInfo = ({ tracked_columns, table_name }, tableHandler) => {
|
|
|
121
124
|
.filter((c) => c.is_pkey)
|
|
122
125
|
.map((c) => `n.${(0, prostgles_types_1.asName)(c.name)} = o.${(0, prostgles_types_1.asName)(c.name)}`)
|
|
123
126
|
.join(" AND "),
|
|
124
|
-
tracked_columns:
|
|
127
|
+
tracked_columns: cols.reduce((acc, { name }) => ({
|
|
125
128
|
...acc,
|
|
126
|
-
[
|
|
129
|
+
[name]: 1,
|
|
127
130
|
}), {}),
|
|
128
131
|
where_statement: cols
|
|
129
|
-
.filter((c) => !c.is_pkey && tracked_columns.includes(c.name))
|
|
130
|
-
.map((c) => `column_name = ${(0, PubSubManagerUtils_1.asValue)(c.name)} AND 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}`)
|
|
132
|
+
// .filter((c) => !c.is_pkey && tracked_columns.includes(c.name))
|
|
133
|
+
.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
134
|
.join(" OR \n"),
|
|
132
135
|
};
|
|
133
136
|
return columns_info;
|
|
@@ -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,7 +33,8 @@ const getDataWatchFunctionQuery = (debugMode) => {
|
|
|
33
33
|
|
|
34
34
|
DECLARE _columns_info JSONB := NULL;
|
|
35
35
|
|
|
36
|
-
DECLARE changed_columns _TEXT := NULL;
|
|
36
|
+
DECLARE changed_columns _TEXT := NULL;
|
|
37
|
+
|
|
37
38
|
BEGIN
|
|
38
39
|
|
|
39
40
|
escaped_table := concat_ws('.', CASE WHEN TG_TABLE_SCHEMA <> CURRENT_SCHEMA THEN format('%I', TG_TABLE_SCHEMA) END, format('%I', TG_TABLE_NAME));
|
|
@@ -170,47 +171,53 @@ exports.getDataWatchFunctionQuery = getDataWatchFunctionQuery;
|
|
|
170
171
|
const CHANGED_COLUMNS_CHECK = `
|
|
171
172
|
-- Determine changed columns for UPDATE operations
|
|
172
173
|
IF TG_OP = 'UPDATE' THEN
|
|
173
|
-
|
|
174
|
-
SELECT columns_info
|
|
175
|
-
INTO _columns_info
|
|
176
|
-
FROM prostgles.v_triggers
|
|
177
|
-
WHERE table_name = escaped_table
|
|
178
|
-
AND columns_info IS NOT NULL;
|
|
179
174
|
|
|
180
|
-
IF
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
)
|
|
194
|
-
SELECT array_agg(column_name)
|
|
195
|
-
FROM changed;
|
|
196
|
-
$c$,
|
|
197
|
-
_columns_info->>'tracked_columns',
|
|
198
|
-
_columns_info->>'join_condition',
|
|
199
|
-
_columns_info->>'where_statement'
|
|
200
|
-
);
|
|
201
|
-
|
|
202
|
-
BEGIN
|
|
203
|
-
EXECUTE query INTO changed_columns;
|
|
204
|
-
END;
|
|
205
|
-
|
|
206
|
-
/* It is possible to get no changes */
|
|
207
|
-
changed_columns := COALESCE(changed_columns, '{}');
|
|
175
|
+
IF NOT EXISTS (
|
|
176
|
+
SELECT 1
|
|
177
|
+
FROM prostgles.v_triggers
|
|
178
|
+
WHERE table_name = escaped_table
|
|
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
|
|
182
|
+
|
|
183
|
+
SELECT columns_info
|
|
184
|
+
INTO _columns_info
|
|
185
|
+
FROM prostgles.v_triggers
|
|
186
|
+
WHERE table_name = escaped_table
|
|
187
|
+
AND columns_info IS NOT NULL;
|
|
208
188
|
|
|
209
|
-
IF NOT
|
|
210
|
-
|
|
211
|
-
|
|
189
|
+
IF _columns_info IS NOT NULL THEN
|
|
190
|
+
query := format(
|
|
191
|
+
$c$
|
|
192
|
+
WITH changed AS (
|
|
193
|
+
SELECT column_name
|
|
194
|
+
FROM jsonb_object_keys(%L) as column_name
|
|
195
|
+
WHERE EXISTS (
|
|
196
|
+
SELECT 1
|
|
197
|
+
FROM old_table o
|
|
198
|
+
LEFT JOIN new_table n
|
|
199
|
+
ON %s
|
|
200
|
+
WHERE %s
|
|
201
|
+
)
|
|
202
|
+
)
|
|
203
|
+
SELECT array_agg(column_name)
|
|
204
|
+
FROM changed;
|
|
205
|
+
$c$,
|
|
206
|
+
_columns_info->'tracked_columns',
|
|
207
|
+
_columns_info->>'join_condition',
|
|
208
|
+
_columns_info->>'where_statement'
|
|
209
|
+
);
|
|
210
|
+
|
|
211
|
+
BEGIN
|
|
212
|
+
EXECUTE query INTO changed_columns;
|
|
213
|
+
END;
|
|
214
|
+
|
|
215
|
+
/* It is possible to get no changes */
|
|
216
|
+
changed_columns := COALESCE(changed_columns, '{}');
|
|
217
|
+
|
|
218
|
+
END IF;
|
|
212
219
|
|
|
213
|
-
END IF;
|
|
220
|
+
END IF;
|
|
214
221
|
END IF;
|
|
215
222
|
|
|
216
223
|
`;
|
|
@@ -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"}
|
|
@@ -138,6 +138,9 @@ const getColumnsInfo = (
|
|
|
138
138
|
throw `tracked_columns ${colName} not found in table ${table_name}`;
|
|
139
139
|
}
|
|
140
140
|
});
|
|
141
|
+
/**
|
|
142
|
+
* TODO: finish tracked_columns by trigger condition
|
|
143
|
+
*/
|
|
141
144
|
const columns_info =
|
|
142
145
|
!hasPkey || !cols || !tracked_columns?.length || tracked_columns.length === cols.length ?
|
|
143
146
|
null
|
|
@@ -146,18 +149,18 @@ const getColumnsInfo = (
|
|
|
146
149
|
.filter((c) => c.is_pkey)
|
|
147
150
|
.map((c) => `n.${asName(c.name)} = o.${asName(c.name)}`)
|
|
148
151
|
.join(" AND "),
|
|
149
|
-
tracked_columns:
|
|
150
|
-
(acc,
|
|
152
|
+
tracked_columns: cols.reduce(
|
|
153
|
+
(acc, { name }) => ({
|
|
151
154
|
...acc,
|
|
152
|
-
[
|
|
155
|
+
[name]: 1,
|
|
153
156
|
}),
|
|
154
157
|
{} as Record<string, number>
|
|
155
158
|
),
|
|
156
159
|
where_statement: cols
|
|
157
|
-
.filter((c) => !c.is_pkey && tracked_columns.includes(c.name))
|
|
160
|
+
// .filter((c) => !c.is_pkey && tracked_columns.includes(c.name))
|
|
158
161
|
.map(
|
|
159
162
|
(c) =>
|
|
160
|
-
`column_name = ${asValue(c.name)} AND n.${asName(c.name)}${c.cast_to} IS DISTINCT FROM o.${asName(c.name)}${c.cast_to}`
|
|
163
|
+
`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})`
|
|
161
164
|
)
|
|
162
165
|
.join(" OR \n"),
|
|
163
166
|
};
|
|
@@ -31,7 +31,8 @@ export const getDataWatchFunctionQuery = (debugMode: boolean | undefined) => {
|
|
|
31
31
|
|
|
32
32
|
DECLARE _columns_info JSONB := NULL;
|
|
33
33
|
|
|
34
|
-
DECLARE changed_columns _TEXT := NULL;
|
|
34
|
+
DECLARE changed_columns _TEXT := NULL;
|
|
35
|
+
|
|
35
36
|
BEGIN
|
|
36
37
|
|
|
37
38
|
escaped_table := concat_ws('.', CASE WHEN TG_TABLE_SCHEMA <> CURRENT_SCHEMA THEN format('%I', TG_TABLE_SCHEMA) END, format('%I', TG_TABLE_NAME));
|
|
@@ -168,47 +169,53 @@ export const getDataWatchFunctionQuery = (debugMode: boolean | undefined) => {
|
|
|
168
169
|
const CHANGED_COLUMNS_CHECK = `
|
|
169
170
|
-- Determine changed columns for UPDATE operations
|
|
170
171
|
IF TG_OP = 'UPDATE' THEN
|
|
171
|
-
|
|
172
|
-
SELECT columns_info
|
|
173
|
-
INTO _columns_info
|
|
174
|
-
FROM prostgles.v_triggers
|
|
175
|
-
WHERE table_name = escaped_table
|
|
176
|
-
AND columns_info IS NOT NULL;
|
|
177
172
|
|
|
178
|
-
IF
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
)
|
|
192
|
-
SELECT array_agg(column_name)
|
|
193
|
-
FROM changed;
|
|
194
|
-
$c$,
|
|
195
|
-
_columns_info->>'tracked_columns',
|
|
196
|
-
_columns_info->>'join_condition',
|
|
197
|
-
_columns_info->>'where_statement'
|
|
198
|
-
);
|
|
199
|
-
|
|
200
|
-
BEGIN
|
|
201
|
-
EXECUTE query INTO changed_columns;
|
|
202
|
-
END;
|
|
203
|
-
|
|
204
|
-
/* It is possible to get no changes */
|
|
205
|
-
changed_columns := COALESCE(changed_columns, '{}');
|
|
173
|
+
IF NOT EXISTS (
|
|
174
|
+
SELECT 1
|
|
175
|
+
FROM prostgles.v_triggers
|
|
176
|
+
WHERE table_name = escaped_table
|
|
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
|
|
180
|
+
|
|
181
|
+
SELECT columns_info
|
|
182
|
+
INTO _columns_info
|
|
183
|
+
FROM prostgles.v_triggers
|
|
184
|
+
WHERE table_name = escaped_table
|
|
185
|
+
AND columns_info IS NOT NULL;
|
|
206
186
|
|
|
207
|
-
IF NOT
|
|
208
|
-
|
|
209
|
-
|
|
187
|
+
IF _columns_info IS NOT NULL THEN
|
|
188
|
+
query := format(
|
|
189
|
+
$c$
|
|
190
|
+
WITH changed AS (
|
|
191
|
+
SELECT column_name
|
|
192
|
+
FROM jsonb_object_keys(%L) as column_name
|
|
193
|
+
WHERE EXISTS (
|
|
194
|
+
SELECT 1
|
|
195
|
+
FROM old_table o
|
|
196
|
+
LEFT JOIN new_table n
|
|
197
|
+
ON %s
|
|
198
|
+
WHERE %s
|
|
199
|
+
)
|
|
200
|
+
)
|
|
201
|
+
SELECT array_agg(column_name)
|
|
202
|
+
FROM changed;
|
|
203
|
+
$c$,
|
|
204
|
+
_columns_info->'tracked_columns',
|
|
205
|
+
_columns_info->>'join_condition',
|
|
206
|
+
_columns_info->>'where_statement'
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
BEGIN
|
|
210
|
+
EXECUTE query INTO changed_columns;
|
|
211
|
+
END;
|
|
212
|
+
|
|
213
|
+
/* It is possible to get no changes */
|
|
214
|
+
changed_columns := COALESCE(changed_columns, '{}');
|
|
215
|
+
|
|
216
|
+
END IF;
|
|
210
217
|
|
|
211
|
-
END IF;
|
|
218
|
+
END IF;
|
|
212
219
|
END IF;
|
|
213
220
|
|
|
214
221
|
`;
|