prostgles-server 4.2.80 → 4.2.82

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.
@@ -0,0 +1,616 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPubSubManagerInitQuery = exports.DB_OBJ_NAMES = void 0;
4
+ const prostgles_types_1 = require("prostgles-types");
5
+ const DboBuilderTypes_1 = require("../DboBuilder/DboBuilderTypes");
6
+ const PubSubManager_1 = require("./PubSubManager");
7
+ const { version } = require("../../package.json");
8
+ const orphanTriggerCheck_1 = require("./orphanTriggerCheck");
9
+ exports.DB_OBJ_NAMES = {
10
+ trigger_add_remove_func: "prostgles.trigger_add_remove_func",
11
+ data_watch_func: "prostgles.prostgles_trigger_function",
12
+ schema_watch_func: "prostgles.schema_watch_func",
13
+ schema_watch_trigger: "prostgles_schema_watch_trigger_new"
14
+ };
15
+ const PROSTGLES_SCHEMA_EXISTS_QUERY = `
16
+ SELECT 1
17
+ FROM information_schema.columns
18
+ WHERE table_schema = 'prostgles'
19
+ AND table_name = 'versions'
20
+ AND column_name = 'schema_md5'
21
+ `;
22
+ const PROSTGLES_SCHEMA_VERSION_OK_QUERY = `
23
+ SELECT 1
24
+ FROM prostgles.versions
25
+ WHERE (string_to_array(version, '.')::int[] > string_to_array(\${version}, '.')::int[])
26
+ OR (string_to_array(version, '.')::int[] = string_to_array(\${version}, '.')::int[])
27
+ AND schema_md5 = \${schema_md5}
28
+ `;
29
+ const getInitQuery = (debugMode) => `
30
+ BEGIN; -- TRANSACTION ISOLATION LEVEL SERIALIZABLE;
31
+
32
+ --SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
33
+
34
+ /*
35
+ * ${PubSubManager_1.PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID}
36
+ */
37
+
38
+ DO
39
+ $do$
40
+ BEGIN
41
+
42
+ /* Drop older version. */
43
+ IF EXISTS (SELECT 1 FROM information_schema.schemata WHERE schema_name = 'prostgles') THEN
44
+
45
+ /* The seemingly useless IF nesting is done to prevent pg evaluating the entire condition and throw a 'schema_md5 column does not exist' */
46
+ IF
47
+ /* Backwards compatibility. Cannot check schema version */
48
+ NOT EXISTS(
49
+ ${PROSTGLES_SCHEMA_EXISTS_QUERY}
50
+ )
51
+ THEN
52
+ DROP SCHEMA IF EXISTS prostgles CASCADE;
53
+ ELSIF
54
+ /* There is no newer version or same same version but different schema */
55
+ NOT EXISTS (
56
+ ${PROSTGLES_SCHEMA_VERSION_OK_QUERY}
57
+ )
58
+ THEN
59
+ DROP SCHEMA IF EXISTS prostgles CASCADE;
60
+
61
+ END IF;
62
+
63
+ END IF;
64
+
65
+
66
+ IF NOT EXISTS (
67
+ SELECT 1
68
+ FROM information_schema.schemata
69
+ WHERE schema_name = 'prostgles'
70
+ )
71
+ THEN
72
+
73
+ CREATE SCHEMA IF NOT EXISTS prostgles;
74
+ COMMENT ON SCHEMA prostgles IS 'Used by prostgles-server to enable data/schema change tracking through subscribe/sync/watchSchema';
75
+
76
+ CREATE TABLE IF NOT EXISTS prostgles.versions(
77
+ version TEXT PRIMARY KEY,
78
+ schema_md5 TEXT NOT NULL,
79
+ added_at TIMESTAMP NOT NULL DEFAULT now()
80
+ );
81
+ COMMENT ON TABLE prostgles.versions IS 'Stores the prostgles schema creation query hash and package version number to identify when a newer schema needs to be re-created';
82
+
83
+ INSERT INTO prostgles.versions(version, schema_md5)
84
+ VALUES(${(0, PubSubManager_1.asValue)(version)}, \${schema_md5})
85
+ ON CONFLICT DO NOTHING;
86
+
87
+
88
+ CREATE OR REPLACE FUNCTION prostgles.random_string(length INTEGER DEFAULT 33) RETURNS TEXT AS $$
89
+ DECLARE
90
+ chars TEXT[] := '{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}';
91
+ result TEXT := '';
92
+ i INTEGER := 0;
93
+ BEGIN
94
+
95
+ IF length < 0 THEN
96
+ RAISE exception 'Given length cannot be less than 0';
97
+ END IF;
98
+
99
+ FOR i IN 1..length LOOP
100
+ result := result || chars[1+random()*(array_length(chars, 1)-1)];
101
+ END LOOP;
102
+
103
+ RETURN result;
104
+
105
+ END;
106
+ $$ language plpgsql;
107
+ COMMENT ON FUNCTION prostgles.random_string IS 'UUIDs without installing pgcrypto';
108
+
109
+
110
+ CREATE OR REPLACE FUNCTION prostgles.debug(VARIADIC args TEXT[]) RETURNS VOID AS $$
111
+ BEGIN
112
+
113
+ --PERFORM pg_notify('debug', concat_ws(' ', args));
114
+ IF
115
+ NOT EXISTS (
116
+ SELECT 1
117
+ FROM information_schema.tables
118
+ WHERE table_schema = 'prostgles'
119
+ AND table_name = 'debug'
120
+ )
121
+ THEN
122
+ CREATE TABLE IF NOT EXISTS prostgles.debug(m TEXT);
123
+ END IF;
124
+
125
+ INSERT INTO prostgles.debug(m) VALUES(concat_ws(' ', args));
126
+
127
+ END;
128
+ $$ LANGUAGE plpgsql;
129
+ COMMENT ON FUNCTION prostgles.debug IS 'Used for internal debugging';
130
+
131
+
132
+ CREATE OR REPLACE FUNCTION prostgles.user(key text default null)
133
+ RETURNS TEXT AS $$
134
+ DECLARE user_text text;
135
+ DECLARE user_jsonb JSONB = '{}'::JSONB;
136
+ BEGIN
137
+ user_text := current_setting('prostgles.user', true);
138
+ IF length(user_text) > 0 THEN
139
+ user_jsonb := user_text::JSONB;
140
+ END IF;
141
+
142
+ IF length(key) > 0 THEN
143
+ RETURN jsonb_extract_path(user_jsonb, key);
144
+ END IF;
145
+ RETURN user_jsonb;
146
+ END;
147
+ $$ LANGUAGE plpgsql;
148
+ COMMENT ON FUNCTION prostgles."user" IS 'Used for row level security';
149
+
150
+ CREATE TABLE IF NOT EXISTS prostgles.apps (
151
+ id TEXT PRIMARY KEY DEFAULT prostgles.random_string(),
152
+ added TIMESTAMP DEFAULT NOW(),
153
+ application_name TEXT,
154
+ last_check TIMESTAMP NOT NULL DEFAULT NOW(),
155
+ watching_schema_tag_names _TEXT,
156
+ check_frequency_ms INTEGER NOT NULL
157
+ );
158
+ COMMENT ON TABLE prostgles.apps IS 'Keep track of prostgles server apps connected to db to combine common triggers. Heartbeat used due to no logout triggers in postgres';
159
+
160
+ CREATE TABLE IF NOT EXISTS prostgles.app_triggers (
161
+ app_id TEXT NOT NULL,
162
+ table_name TEXT NOT NULL,
163
+ condition TEXT NOT NULL,
164
+
165
+ /* The view from the root subscription, found in the condition.
166
+ We need this because old_table/new_table data is not reflected in the view inside the AFTER trigger
167
+ */
168
+ related_view_name TEXT,
169
+ related_view_def TEXT, /* view definition */
170
+
171
+ inserted TIMESTAMP NOT NULL DEFAULT NOW(),
172
+ last_used TIMESTAMP NOT NULL DEFAULT NOW(),
173
+ PRIMARY KEY (app_id, table_name, condition) /* This unique index limits the condition column value to be less than 'SELECT current_setting('block_size'); */
174
+ );
175
+ COMMENT ON TABLE prostgles.app_triggers IS 'Tables and conditions that are currently subscribed/synced';
176
+
177
+
178
+ CREATE OR REPLACE VIEW prostgles.v_triggers AS
179
+ SELECT *
180
+ , (ROW_NUMBER() OVER( ORDER BY table_name, condition ))::text AS id
181
+ , ROW_NUMBER() OVER(PARTITION BY app_id, table_name ORDER BY table_name, condition ) - 1 AS c_id
182
+ FROM prostgles.app_triggers;
183
+ COMMENT ON VIEW prostgles.v_triggers IS 'Augment trigger table with natural IDs and per app IDs';
184
+
185
+
186
+ CREATE OR REPLACE FUNCTION ${exports.DB_OBJ_NAMES.data_watch_func}() RETURNS TRIGGER
187
+ AS $$
188
+
189
+ DECLARE t_ids TEXT[];
190
+ DECLARE c_ids INTEGER[];
191
+ DECLARE err_c_ids INTEGER[];
192
+ DECLARE unions TEXT := '';
193
+ DECLARE query TEXT := '';
194
+ DECLARE v_trigger RECORD;
195
+ DECLARE has_errors BOOLEAN := FALSE;
196
+
197
+ DECLARE err_text TEXT;
198
+ DECLARE err_detail TEXT;
199
+ DECLARE err_hint TEXT;
200
+
201
+ DECLARE view_def_query TEXT := '';
202
+
203
+ DECLARE escaped_table TEXT;
204
+
205
+ BEGIN
206
+
207
+ --PERFORM pg_notify('debug', concat_ws(' ', 'TABLE', TG_TABLE_NAME, TG_OP));
208
+
209
+ escaped_table := format('%I', TG_TABLE_NAME);
210
+
211
+ SELECT string_agg(
212
+ format(
213
+ $c$
214
+ SELECT CASE WHEN EXISTS(
215
+ SELECT 1
216
+ FROM %s
217
+ WHERE %s
218
+ ) THEN %s::text END AS t_ids
219
+ $c$,
220
+ table_name,
221
+ condition,
222
+ id
223
+ ),
224
+ E' UNION \n '
225
+ )
226
+ INTO unions
227
+ FROM prostgles.v_triggers
228
+ WHERE table_name = escaped_table;
229
+
230
+
231
+ /* unions = 'old_table union new_table' or any one of the tables */
232
+ IF unions IS NOT NULL THEN
233
+
234
+ SELECT
235
+ format(
236
+ E'WITH %I AS (\n %s \n) ',
237
+ TG_TABLE_NAME,
238
+ concat_ws(
239
+ E' UNION ALL \n ',
240
+ CASE WHEN (TG_OP = 'DELETE' OR TG_OP = 'UPDATE') THEN ' SELECT * FROM old_table ' END,
241
+ CASE WHEN (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN ' SELECT * FROM new_table ' END
242
+ )
243
+ )
244
+ ||
245
+ COALESCE((
246
+ SELECT ', ' || string_agg(format(E' %s AS ( \n %s \n ) ', related_view_name, related_view_def), ', ')
247
+ FROM (
248
+ SELECT DISTINCT related_view_name, related_view_def
249
+ FROM prostgles.v_triggers
250
+ WHERE table_name = escaped_table
251
+ AND related_view_name IS NOT NULL
252
+ AND related_view_def IS NOT NULL
253
+ ) t
254
+ ), '')
255
+ ||
256
+ format(
257
+ $c$
258
+ SELECT ARRAY_AGG(DISTINCT t.t_ids)
259
+ FROM (
260
+ %s
261
+ ) t
262
+ $c$,
263
+ unions
264
+ )
265
+ INTO query;
266
+
267
+ BEGIN
268
+ EXECUTE query INTO t_ids;
269
+
270
+ --RAISE NOTICE 'trigger fired ok';
271
+
272
+ EXCEPTION WHEN OTHERS THEN
273
+
274
+ has_errors := TRUE;
275
+
276
+ GET STACKED DIAGNOSTICS
277
+ err_text = MESSAGE_TEXT,
278
+ err_detail = PG_EXCEPTION_DETAIL,
279
+ err_hint = PG_EXCEPTION_HINT;
280
+
281
+ END;
282
+
283
+ --RAISE NOTICE 'has_errors: % ', has_errors;
284
+ --RAISE NOTICE 'unions: % , cids: %', unions, c_ids;
285
+
286
+ IF (t_ids IS NOT NULL OR has_errors) THEN
287
+
288
+ FOR v_trigger IN
289
+ SELECT app_id, string_agg(c_id::text, ',') as cids
290
+ FROM prostgles.v_triggers
291
+ WHERE id = ANY(t_ids)
292
+ OR has_errors
293
+ GROUP BY app_id
294
+ LOOP
295
+
296
+ PERFORM pg_notify(
297
+ ${(0, PubSubManager_1.asValue)(PubSubManager_1.NOTIF_CHANNEL.preffix)} || v_trigger.app_id ,
298
+ LEFT(concat_ws(
299
+ ${(0, PubSubManager_1.asValue)(PubSubManager_1.PubSubManager.DELIMITER)},
300
+
301
+ ${(0, PubSubManager_1.asValue)(PubSubManager_1.NOTIF_TYPE.data)},
302
+ COALESCE(escaped_table, 'MISSING'),
303
+ COALESCE(TG_OP, 'MISSING'),
304
+ CASE WHEN has_errors
305
+ THEN concat_ws('; ', 'error', err_text, err_detail, err_hint, 'query: ' || query )
306
+ ELSE COALESCE(v_trigger.cids, '')
307
+ END
308
+ ${debugMode ? (", COALESCE(current_query(), 'current_query ??'), ' ', query") : ""}
309
+ ), 7999/4) -- Some chars are 2bytes -> 'Ω'
310
+ );
311
+ END LOOP;
312
+
313
+
314
+ IF has_errors THEN
315
+
316
+ DELETE FROM prostgles.app_triggers;
317
+ RAISE NOTICE 'trigger dropped due to exception: % % %', err_text, err_detail, err_hint;
318
+
319
+ END IF;
320
+
321
+ END IF;
322
+ END IF;
323
+
324
+ ${(0, orphanTriggerCheck_1.getAppCheckQuery)()}
325
+
326
+ RETURN NULL;
327
+
328
+ END;
329
+
330
+ $$ LANGUAGE plpgsql;
331
+ COMMENT ON FUNCTION ${exports.DB_OBJ_NAMES.data_watch_func} IS 'Prostgles internal function used to notify when data in the table changed';
332
+
333
+ CREATE OR REPLACE FUNCTION ${exports.DB_OBJ_NAMES.trigger_add_remove_func}() RETURNS TRIGGER
334
+ AS $$
335
+
336
+ DECLARE operations TEXT[] := ARRAY['insert', 'update', 'delete'];
337
+ DECLARE op TEXT;
338
+ DECLARE query TEXT;
339
+ DECLARE trg_name TEXT;
340
+ DECLARE trw RECORD;
341
+ DECLARE app RECORD;
342
+ DECLARE start_time BIGINT;
343
+ DECLARE changed_triggers_count integer;
344
+
345
+ BEGIN
346
+
347
+ start_time := EXTRACT(EPOCH FROM now()) * 1000;
348
+
349
+ --RAISE NOTICE 'prostgles.app_triggers % ', TG_OP;
350
+
351
+ /* If no other listeners (app_triggers) left on table then DISABLE actual table data watch triggers */
352
+ IF TG_OP = 'DELETE' THEN
353
+
354
+ --RAISE NOTICE 'DELETE trigger_add_remove_func table: % ', ' ' || COALESCE((SELECT concat_ws(' ', string_agg(table_name, ' & '), count(*), min(inserted) ) FROM prostgles.app_triggers) , ' 0 ');
355
+ --RAISE NOTICE 'DELETE trigger_add_remove_func old_table: % ', '' || COALESCE((SELECT concat_ws(' ', string_agg(table_name, ' & '), count(*), min(inserted) ) FROM old_table), ' 0 ');
356
+
357
+ SELECT count(*)
358
+ FROM old_table
359
+ INTO changed_triggers_count;
360
+
361
+ /* Disable actual triggers if needed */
362
+ FOR trw IN
363
+ SELECT DISTINCT table_name
364
+ FROM old_table ot
365
+ WHERE NOT EXISTS (
366
+ SELECT 1
367
+ FROM prostgles.app_triggers t
368
+ WHERE t.table_name = ot.table_name
369
+ )
370
+ AND EXISTS (
371
+ SELECT trigger_name
372
+ FROM information_schema.triggers
373
+ WHERE trigger_name IN (
374
+ concat_ws('_', 'prostgles_triggers', table_name, 'insert'),
375
+ concat_ws('_', 'prostgles_triggers', table_name, 'update'),
376
+ concat_ws('_', 'prostgles_triggers', table_name, 'delete')
377
+ )
378
+ )
379
+ LOOP
380
+
381
+ FOREACH op IN ARRAY operations
382
+ LOOP
383
+ trg_name := concat_ws('_', 'prostgles_triggers', trw.table_name, op);
384
+
385
+ EXECUTE format(' ALTER TABLE %s DISABLE TRIGGER %I ;', trw.table_name, trg_name);
386
+ END LOOP;
387
+
388
+ END LOOP;
389
+
390
+ /* If newly added listeners on table then CREATE table data watch triggers */
391
+ ELSIF TG_OP = 'INSERT' THEN
392
+
393
+ SELECT count(*)
394
+ FROM new_table
395
+ INTO changed_triggers_count;
396
+
397
+ /* Loop through newly added tables to add data watch triggers */
398
+ FOR trw IN
399
+
400
+ SELECT DISTINCT table_name
401
+ FROM new_table nt
402
+
403
+ /* Table did not exist prior to this insert */
404
+ WHERE NOT EXISTS (
405
+ SELECT 1
406
+ FROM prostgles.app_triggers t
407
+ WHERE t.table_name = nt.table_name
408
+ AND t.inserted < nt.inserted -- exclude current record (this is an after trigger). Turn into before trigger?
409
+ )
410
+
411
+ /* Table is valid
412
+ AND EXISTS (
413
+ SELECT 1
414
+ FROM information_schema.tables
415
+ WHERE table_schema = 'public'
416
+ AND table_name = nt.table_name
417
+ )
418
+ */
419
+ LOOP
420
+
421
+ IF (
422
+ SELECT COUNT(*)
423
+ FROM information_schema.triggers
424
+ WHERE trigger_name IN (
425
+ 'prostgles_triggers_' || trw.table_name || '_insert',
426
+ 'prostgles_triggers_' || trw.table_name || '_update',
427
+ 'prostgles_triggers_' || trw.table_name || '_delete'
428
+ )
429
+ ) = 3
430
+ THEN
431
+ query := concat_ws(E'\n',
432
+ format(' ALTER TABLE %s ENABLE TRIGGER %I ;', trw.table_name, 'prostgles_triggers_' || trw.table_name || '_insert'),
433
+ format(' ALTER TABLE %s ENABLE TRIGGER %I ;', trw.table_name, 'prostgles_triggers_' || trw.table_name || '_update'),
434
+ format(' ALTER TABLE %s ENABLE TRIGGER %I ;', trw.table_name, 'prostgles_triggers_' || trw.table_name || '_delete')
435
+ );
436
+ ELSE
437
+
438
+ query := format(
439
+ $q$
440
+ DROP TRIGGER IF EXISTS %1$I ON %2$s;
441
+ CREATE TRIGGER %1$I
442
+ AFTER INSERT ON %2$s
443
+ REFERENCING NEW TABLE AS new_table
444
+ FOR EACH STATEMENT EXECUTE PROCEDURE ${exports.DB_OBJ_NAMES.data_watch_func}();
445
+ COMMENT ON TRIGGER %1$I ON %2$s IS 'Prostgles internal trigger used to notify when data in the table changed';
446
+ $q$,
447
+ 'prostgles_triggers_' || trw.table_name || '_insert', trw.table_name
448
+ ) || format(
449
+ $q$
450
+ DROP TRIGGER IF EXISTS %1$I ON %2$s;
451
+ CREATE TRIGGER %1$I
452
+ AFTER UPDATE ON %2$s
453
+ REFERENCING OLD TABLE AS old_table NEW TABLE AS new_table
454
+ FOR EACH STATEMENT EXECUTE PROCEDURE ${exports.DB_OBJ_NAMES.data_watch_func}();
455
+ COMMENT ON TRIGGER %1$I ON %2$s IS 'Prostgles internal trigger used to notify when data in the table changed';
456
+ $q$,
457
+ 'prostgles_triggers_' || trw.table_name || '_update', trw.table_name
458
+ ) || format(
459
+ $q$
460
+ DROP TRIGGER IF EXISTS %1$I ON %2$s;
461
+ CREATE TRIGGER %1$I
462
+ AFTER DELETE ON %2$s
463
+ REFERENCING OLD TABLE AS old_table
464
+ FOR EACH STATEMENT EXECUTE PROCEDURE ${exports.DB_OBJ_NAMES.data_watch_func}();
465
+ COMMENT ON TRIGGER %1$I ON %2$s IS 'Prostgles internal trigger used to notify when data in the table changed';
466
+ $q$,
467
+ 'prostgles_triggers_' || trw.table_name || '_delete', trw.table_name
468
+ );
469
+ END IF;
470
+
471
+
472
+ --RAISE NOTICE ' % ', query;
473
+
474
+
475
+ query := format(
476
+ $q$
477
+ DO $e$
478
+ BEGIN
479
+ /* ${PubSubManager_1.PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID} */
480
+ %s
481
+
482
+ END $e$;
483
+ $q$,
484
+ query
485
+ ) ;
486
+
487
+
488
+ EXECUTE query;
489
+
490
+ END LOOP;
491
+
492
+ END IF;
493
+
494
+ /** Notify all apps about trigger table change */
495
+ IF changed_triggers_count > 0 THEN
496
+ FOR app IN
497
+ SELECT * FROM prostgles.apps
498
+ LOOP
499
+ PERFORM pg_notify(
500
+ ${(0, PubSubManager_1.asValue)(PubSubManager_1.NOTIF_CHANNEL.preffix)} || app.id,
501
+ LEFT(concat_ws(
502
+ ${(0, PubSubManager_1.asValue)(PubSubManager_1.PubSubManager.DELIMITER)},
503
+ ${(0, PubSubManager_1.asValue)(PubSubManager_1.NOTIF_TYPE.data_trigger_change)},
504
+ json_build_object(
505
+ 'TG_OP', TG_OP,
506
+ 'duration', (EXTRACT(EPOCH FROM now()) * 1000) - start_time,
507
+ 'query', ${debugMode ? 'LEFT(current_query(), 400)' : "'Only shown in debug mode'"}
508
+ )
509
+ )::TEXT, 7999/4)
510
+ );
511
+ END LOOP;
512
+ END IF;
513
+
514
+ RETURN NULL;
515
+ END;
516
+
517
+ $$ LANGUAGE plpgsql;
518
+ COMMENT ON FUNCTION ${exports.DB_OBJ_NAMES.trigger_add_remove_func} IS 'Used to add/remove table watch triggers concurrently ';
519
+
520
+ DROP TRIGGER IF EXISTS prostgles_triggers_insert ON prostgles.app_triggers;
521
+ CREATE TRIGGER prostgles_triggers_insert
522
+ AFTER INSERT ON prostgles.app_triggers
523
+ REFERENCING NEW TABLE AS new_table
524
+ FOR EACH STATEMENT EXECUTE PROCEDURE ${exports.DB_OBJ_NAMES.trigger_add_remove_func}();
525
+
526
+ DROP TRIGGER IF EXISTS prostgles_triggers_delete ON prostgles.app_triggers;
527
+ CREATE TRIGGER prostgles_triggers_delete
528
+ AFTER DELETE ON prostgles.app_triggers
529
+ REFERENCING OLD TABLE AS old_table
530
+ FOR EACH STATEMENT EXECUTE PROCEDURE ${exports.DB_OBJ_NAMES.trigger_add_remove_func}();
531
+
532
+
533
+ CREATE OR REPLACE FUNCTION ${exports.DB_OBJ_NAMES.schema_watch_func}() RETURNS event_trigger AS $$
534
+
535
+ DECLARE curr_query TEXT := '';
536
+ DECLARE app RECORD;
537
+
538
+ BEGIN
539
+
540
+ /*
541
+ This event trigger will outlive a prostgles app instance.
542
+ Must ensure it only fires if an app instance is running
543
+ */
544
+ IF
545
+ EXISTS (
546
+ SELECT 1
547
+ FROM information_schema.tables
548
+ WHERE table_schema = 'prostgles'
549
+ AND table_name = 'apps'
550
+ )
551
+ THEN
552
+
553
+ SELECT LEFT(COALESCE(current_query(), ''), 5000)
554
+ INTO curr_query;
555
+
556
+ FOR app IN
557
+ SELECT *
558
+ FROM prostgles.apps
559
+ WHERE tg_tag = ANY(watching_schema_tag_names)
560
+ AND curr_query NOT ILIKE '%${PubSubManager_1.PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID}%'
561
+ LOOP
562
+ PERFORM pg_notify(
563
+ ${(0, PubSubManager_1.asValue)(PubSubManager_1.NOTIF_CHANNEL.preffix)} || app.id,
564
+ LEFT(concat_ws(
565
+ ${(0, PubSubManager_1.asValue)(PubSubManager_1.PubSubManager.DELIMITER)},
566
+ ${(0, PubSubManager_1.asValue)(PubSubManager_1.NOTIF_TYPE.schema)},
567
+ tg_tag ,
568
+ TG_event,
569
+ ${debugMode ? 'curr_query' : "'Only shown in debug mode'"}
570
+ ), 7999/4)
571
+ );
572
+ END LOOP;
573
+
574
+ ${(0, orphanTriggerCheck_1.getAppCheckQuery)()}
575
+
576
+ END IF;
577
+
578
+ END;
579
+ $$ LANGUAGE plpgsql;
580
+ COMMENT ON FUNCTION ${exports.DB_OBJ_NAMES.schema_watch_func} IS 'Prostgles internal function used to notify when schema has changed';
581
+
582
+ ELSE
583
+
584
+ DELETE FROM prostgles.app_triggers;
585
+ END IF;
586
+
587
+ END
588
+ $do$;
589
+
590
+ COMMIT;
591
+ `;
592
+ /**
593
+ * Initialize the prostgles schema and functions needed for realtime data and schema changes
594
+ * undefined returned if the database contains the apropriate prostgles schema
595
+ */
596
+ const getPubSubManagerInitQuery = async function () {
597
+ const initQuery = getInitQuery(this.dboBuilder.prostgles.opts.DEBUG_MODE);
598
+ const { schema_md5 = "none" } = await this.db.oneOrNone("SELECT md5($1) as schema_md5", [initQuery.trim()]);
599
+ const query = DboBuilderTypes_1.pgp.as.format(initQuery, { schema_md5, version });
600
+ const existingSchema = await this.db.any(PROSTGLES_SCHEMA_EXISTS_QUERY);
601
+ if (!existingSchema.length) {
602
+ return query;
603
+ }
604
+ const { existingSchemaVersions } = await (0, prostgles_types_1.tryCatch)(async () => {
605
+ const existingSchemaVersions = await this.db.any(PROSTGLES_SCHEMA_VERSION_OK_QUERY, { schema_md5, version });
606
+ return {
607
+ existingSchemaVersions
608
+ };
609
+ });
610
+ if (!existingSchemaVersions?.length) {
611
+ return query;
612
+ }
613
+ return undefined;
614
+ };
615
+ exports.getPubSubManagerInitQuery = getPubSubManagerInitQuery;
616
+ //# sourceMappingURL=getPubSubManagerInitQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPubSubManagerInitQuery.js","sourceRoot":"","sources":["../../lib/PubSubManager/getPubSubManagerInitQuery.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ const prostgles_types_1 = require("prostgles-types");
5
5
  const PostgresNotifListenManager_1 = require("../PostgresNotifListenManager");
6
6
  const getWatchSchemaTagList_1 = require("../SchemaWatch/getWatchSchemaTagList");
7
7
  const PubSubManager_1 = require("./PubSubManager");
8
- const getInitQuery_1 = require("./getInitQuery");
8
+ const getPubSubManagerInitQuery_1 = require("./getPubSubManagerInitQuery");
9
9
  exports.REALTIME_TRIGGER_CHECK_QUERY = "prostgles-server internal query used to manage realtime triggers";
10
10
  const tout = (ms) => new Promise(res => setTimeout(res, ms));
11
11
  exports.tout = tout;
@@ -13,7 +13,7 @@ async function initPubSubManager() {
13
13
  if (!this.getIsDestroyed())
14
14
  return undefined;
15
15
  try {
16
- const initQuery = await getInitQuery_1.getPubSubManagerInitQuery.bind(this)();
16
+ const initQuery = await getPubSubManagerInitQuery_1.getPubSubManagerInitQuery.bind(this)();
17
17
  /**
18
18
  * High database activity might cause deadlocks.
19
19
  * Must retry
@@ -1 +1 @@
1
- {"version":3,"file":"initPubSubManager.js","sourceRoot":"","sources":["../../lib/PubSubManager/initPubSubManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"initPubSubManager.js","sourceRoot":"","sources":["../../lib/PubSubManager/initPubSubManager.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,7 @@ import { EventTypes } from "../Logging";
22
22
  import { TableRule } from "../PublishParser/PublishParser";
23
23
  import { syncData } from "../SyncReplication";
24
24
  import { addSub } from "./addSub";
25
- import { DB_OBJ_NAMES } from "./getInitQuery";
25
+ import { DB_OBJ_NAMES } from "./getPubSubManagerInitQuery";
26
26
  import { notifListener } from "./notifListener";
27
27
  import { pushSubData } from "./pushSubData";
28
28