prostgles-server 4.2.62 → 4.2.64

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.
@@ -1 +1 @@
1
- {"version":3,"file":"getInitQuery.d.ts","sourceRoot":"","sources":["../../lib/PubSubManager/getInitQuery.ts"],"names":[],"mappings":"AACA,OAAO,EAAsC,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGpF,eAAO,MAAM,YAAY;;;;;CAKf,CAAC;AAEX,eAAO,MAAM,YAAY,SAAwB,aAAa,KAAG,QAAQ,MAAM,CA0jB9E,CAAA"}
1
+ {"version":3,"file":"getInitQuery.d.ts","sourceRoot":"","sources":["../../lib/PubSubManager/getInitQuery.ts"],"names":[],"mappings":"AACA,OAAO,EAAsC,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGpF,eAAO,MAAM,YAAY;;;;;CAKf,CAAC;AAEX,eAAO,MAAM,YAAY,SAAwB,aAAa,KAAG,QAAQ,MAAM,CAkkB9E,CAAA"}
@@ -201,13 +201,15 @@ BEGIN
201
201
 
202
202
  BEGIN
203
203
 
204
- -- PERFORM pg_notify('debug', concat_ws(' ', 'TABLE', TG_TABLE_NAME, TG_OP));
204
+ --PERFORM pg_notify('debug', concat_ws(' ', 'TABLE', TG_TABLE_NAME, TG_OP));
205
205
 
206
206
  SELECT string_agg(
207
207
  format(
208
208
  $c$
209
209
  SELECT CASE WHEN EXISTS(
210
- SELECT 1 FROM %I WHERE %s
210
+ SELECT 1
211
+ FROM %s
212
+ WHERE %s
211
213
  ) THEN %s::text END AS t_ids
212
214
  $c$,
213
215
  table_name,
@@ -218,7 +220,7 @@ BEGIN
218
220
  )
219
221
  INTO unions
220
222
  FROM prostgles.v_triggers
221
- WHERE table_name = TG_TABLE_NAME;
223
+ WHERE table_name = format(TG_TABLE_NAME, '%I');
222
224
 
223
225
 
224
226
  /* unions = 'old_table union new_table' or any one of the tables */
@@ -240,7 +242,7 @@ BEGIN
240
242
  FROM (
241
243
  SELECT DISTINCT related_view_name, related_view_def
242
244
  FROM prostgles.v_triggers
243
- WHERE table_name = TG_TABLE_NAME
245
+ WHERE table_name = format(TG_TABLE_NAME, '%I')
244
246
  AND related_view_name IS NOT NULL
245
247
  AND related_view_def IS NOT NULL
246
248
  ) t
@@ -252,7 +254,8 @@ BEGIN
252
254
  FROM (
253
255
  %s
254
256
  ) t
255
- $c$, unions
257
+ $c$,
258
+ unions
256
259
  )
257
260
  INTO query;
258
261
 
@@ -316,17 +319,7 @@ BEGIN
316
319
 
317
320
 
318
321
  RETURN NULL;
319
-
320
- /*
321
- EXCEPTION WHEN OTHERS THEN
322
- DELETE FROM prostgles.app_triggers; -- delete all or will need to loop through all conditions to find issue;
323
- RAISE NOTICE 'trigger dropped due to exception';
324
- ${"--EXCEPTION_WHEN_COLUMN_WAS_RENAMED_THEN_DROP_TRIGGER"};
325
-
326
-
327
-
328
- RETURN NULL;
329
- */
322
+
330
323
  END;
331
324
 
332
325
  --COMMIT;
@@ -339,6 +332,7 @@ BEGIN
339
332
  DECLARE operations TEXT[] := ARRAY['insert', 'update', 'delete'];
340
333
  DECLARE op TEXT;
341
334
  DECLARE query TEXT;
335
+ DECLARE trg_name TEXT;
342
336
  DECLARE trw RECORD;
343
337
  DECLARE app RECORD;
344
338
  DECLARE start_time BIGINT;
@@ -350,7 +344,7 @@ BEGIN
350
344
 
351
345
  --RAISE NOTICE 'prostgles.app_triggers % ', TG_OP;
352
346
 
353
- /* If no other listeners (app_triggers) left on table then DROP actual table data watch triggers */
347
+ /* If no other listeners (app_triggers) left on table then DISABLE actual table data watch triggers */
354
348
  IF TG_OP = 'DELETE' THEN
355
349
 
356
350
  --RAISE NOTICE 'DELETE trigger_add_remove_func table: % ', ' ' || COALESCE((SELECT concat_ws(' ', string_agg(table_name, ' & '), count(*), min(inserted) ) FROM prostgles.app_triggers) , ' 0 ');
@@ -358,19 +352,32 @@ BEGIN
358
352
 
359
353
  select count(*) from old_table into changed_triggers_count;
360
354
 
361
- /* Drop actual triggers if needed */
355
+ /* Disable actual triggers if needed */
362
356
  FOR trw IN
363
- SELECT DISTINCT table_name FROM old_table ot
357
+ SELECT DISTINCT table_name
358
+ FROM old_table ot
364
359
  WHERE NOT EXISTS (
365
- SELECT 1 FROM prostgles.app_triggers t
366
- WHERE t.table_name = ot.table_name
367
- )
360
+ SELECT 1
361
+ FROM prostgles.app_triggers t
362
+ WHERE t.table_name = ot.table_name
363
+ )
364
+ AND EXISTS (
365
+ SELECT trigger_name
366
+ FROM information_schema.triggers
367
+ WHERE trigger_name IN (
368
+ concat_ws('_', 'prostgles_triggers', table_name, 'insert'),
369
+ concat_ws('_', 'prostgles_triggers', table_name, 'update'),
370
+ concat_ws('_', 'prostgles_triggers', table_name, 'delete')
371
+ )
372
+ )
368
373
  LOOP
369
374
 
370
375
  FOREACH op IN ARRAY operations
371
376
  LOOP
372
- --RAISE NOTICE ' DROP DATA TRIGGER FOR: % ', trw.table_name;
373
- EXECUTE format(' DROP TRIGGER IF EXISTS %I ON %I ;' , 'prostgles_triggers_' || trw.table_name || '_' || op, trw.table_name);
377
+ trg_name := concat_ws('_', 'prostgles_triggers', trw.table_name, op);
378
+
379
+ --EXECUTE format(' DROP TRIGGER IF EXISTS %I ON %s ;' , trg_name, trw.table_name);
380
+ EXECUTE format(' ALTER TABLE %s DISABLE TRIGGER %I ;', trw.table_name, trg_name);
374
381
  END LOOP;
375
382
 
376
383
  END LOOP;
@@ -397,55 +404,66 @@ BEGIN
397
404
  AND t.inserted < nt.inserted -- exclude current record (this is an after trigger). Turn into before trigger?
398
405
  )
399
406
 
400
- /* Table is valid */
407
+ /* Table is valid
401
408
  AND EXISTS (
402
409
  SELECT 1
403
410
  FROM information_schema.tables
404
411
  WHERE table_schema = 'public'
405
412
  AND table_name = nt.table_name
406
413
  )
407
- LOOP
408
-
409
- /*
410
- RAISE NOTICE ' CREATE DATA TRIGGER FOR: % TABLE EXISTS?', trw.table_name, SELECT EXISTS (
411
- SELECT 1
412
- FROM information_schema.tables
413
- WHERE table_schema = 'public'
414
- AND table_name = nt.table_name
415
- );
416
414
  */
415
+ LOOP
416
+
417
+ IF (
418
+ SELECT COUNT(*)
419
+ FROM information_schema.triggers
420
+ WHERE trigger_name IN (
421
+ 'prostgles_triggers_' || trw.table_name || '_insert',
422
+ 'prostgles_triggers_' || trw.table_name || '_update',
423
+ 'prostgles_triggers_' || trw.table_name || '_delete'
424
+ )
425
+ ) = 3 AND false
426
+ THEN
427
+ query := concat_ws(E'\n',
428
+ format(' ALTER TABLE %s ENABLE TRIGGER %I ;', trw.table_name, 'prostgles_triggers_' || trw.table_name || '_insert'),
429
+ format(' ALTER TABLE %s ENABLE TRIGGER %I ;', trw.table_name, 'prostgles_triggers_' || trw.table_name || '_update'),
430
+ format(' ALTER TABLE %s ENABLE TRIGGER %I ;', trw.table_name, 'prostgles_triggers_' || trw.table_name || '_delete')
431
+ );
432
+ ELSE
433
+
434
+ query := format(
435
+ $q$
436
+ DROP TRIGGER IF EXISTS %1$I ON %2$s;
437
+ CREATE TRIGGER %1$I
438
+ AFTER INSERT ON %2$s
439
+ REFERENCING NEW TABLE AS new_table
440
+ FOR EACH STATEMENT EXECUTE PROCEDURE ${exports.DB_OBJ_NAMES.data_watch_func}();
441
+ COMMENT ON TRIGGER %1$I ON %2$s IS 'Prostgles internal trigger used to notify when data in the table changed';
442
+ $q$,
443
+ 'prostgles_triggers_' || trw.table_name || '_insert', trw.table_name
444
+ ) || format(
445
+ $q$
446
+ DROP TRIGGER IF EXISTS %1$I ON %2$s;
447
+ CREATE TRIGGER %1$I
448
+ AFTER UPDATE ON %2$s
449
+ REFERENCING OLD TABLE AS old_table NEW TABLE AS new_table
450
+ FOR EACH STATEMENT EXECUTE PROCEDURE ${exports.DB_OBJ_NAMES.data_watch_func}();
451
+ COMMENT ON TRIGGER %1$I ON %2$s IS 'Prostgles internal trigger used to notify when data in the table changed';
452
+ $q$,
453
+ 'prostgles_triggers_' || trw.table_name || '_update', trw.table_name
454
+ ) || format(
455
+ $q$
456
+ DROP TRIGGER IF EXISTS %1$I ON %2$s;
457
+ CREATE TRIGGER %1$I
458
+ AFTER DELETE ON %2$s
459
+ REFERENCING OLD TABLE AS old_table
460
+ FOR EACH STATEMENT EXECUTE PROCEDURE ${exports.DB_OBJ_NAMES.data_watch_func}();
461
+ COMMENT ON TRIGGER %1$I ON %2$s IS 'Prostgles internal trigger used to notify when data in the table changed';
462
+ $q$,
463
+ 'prostgles_triggers_' || trw.table_name || '_delete', trw.table_name
464
+ );
465
+ END IF;
417
466
 
418
- query := format(
419
- $q$
420
- DROP TRIGGER IF EXISTS %1$I ON %2$I;
421
- CREATE TRIGGER %1$I
422
- AFTER INSERT ON %2$I
423
- REFERENCING NEW TABLE AS new_table
424
- FOR EACH STATEMENT EXECUTE PROCEDURE ${exports.DB_OBJ_NAMES.data_watch_func}();
425
- COMMENT ON TRIGGER %1$I ON %2$I IS 'Prostgles internal trigger used to notify when data in the table changed';
426
- $q$,
427
- 'prostgles_triggers_' || trw.table_name || '_insert', trw.table_name
428
- ) || format(
429
- $q$
430
- DROP TRIGGER IF EXISTS %1$I ON %2$I;
431
- CREATE TRIGGER %1$I
432
- AFTER UPDATE ON %2$I
433
- REFERENCING OLD TABLE AS old_table NEW TABLE AS new_table
434
- FOR EACH STATEMENT EXECUTE PROCEDURE ${exports.DB_OBJ_NAMES.data_watch_func}();
435
- COMMENT ON TRIGGER %1$I ON %2$I IS 'Prostgles internal trigger used to notify when data in the table changed';
436
- $q$,
437
- 'prostgles_triggers_' || trw.table_name || '_update', trw.table_name
438
- ) || format(
439
- $q$
440
- DROP TRIGGER IF EXISTS %1$I ON %2$I;
441
- CREATE TRIGGER %1$I
442
- AFTER DELETE ON %2$I
443
- REFERENCING OLD TABLE AS old_table
444
- FOR EACH STATEMENT EXECUTE PROCEDURE ${exports.DB_OBJ_NAMES.data_watch_func}();
445
- COMMENT ON TRIGGER %1$I ON %2$I IS 'Prostgles internal trigger used to notify when data in the table changed';
446
- $q$,
447
- 'prostgles_triggers_' || trw.table_name || '_delete', trw.table_name
448
- );
449
467
 
450
468
  --RAISE NOTICE ' % ', query;
451
469
 
@@ -455,20 +473,10 @@ BEGIN
455
473
  DO $e$
456
474
  BEGIN
457
475
  /* ${PubSubManager_1.PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID} */
458
- IF EXISTS (
459
- SELECT 1
460
- FROM information_schema.tables
461
- WHERE table_schema = 'public'
462
- AND table_name = %L
463
- ) THEN
464
-
465
- %s
466
-
467
- END IF;
476
+ %s
468
477
 
469
478
  END $e$;
470
479
  $q$,
471
- trw.table_name,
472
480
  query
473
481
  ) ;
474
482
 
@@ -1 +1 @@
1
- {"version":3,"file":"getInitQuery.js","sourceRoot":"","sources":["../../lib/PubSubManager/getInitQuery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getInitQuery.js","sourceRoot":"","sources":["../../lib/PubSubManager/getInitQuery.ts"],"names":[],"mappings":"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"}
@@ -203,13 +203,15 @@ BEGIN
203
203
 
204
204
  BEGIN
205
205
 
206
- -- PERFORM pg_notify('debug', concat_ws(' ', 'TABLE', TG_TABLE_NAME, TG_OP));
206
+ --PERFORM pg_notify('debug', concat_ws(' ', 'TABLE', TG_TABLE_NAME, TG_OP));
207
207
 
208
208
  SELECT string_agg(
209
209
  format(
210
210
  $c$
211
211
  SELECT CASE WHEN EXISTS(
212
- SELECT 1 FROM %I WHERE %s
212
+ SELECT 1
213
+ FROM %s
214
+ WHERE %s
213
215
  ) THEN %s::text END AS t_ids
214
216
  $c$,
215
217
  table_name,
@@ -220,7 +222,7 @@ BEGIN
220
222
  )
221
223
  INTO unions
222
224
  FROM prostgles.v_triggers
223
- WHERE table_name = TG_TABLE_NAME;
225
+ WHERE table_name = format(TG_TABLE_NAME, '%I');
224
226
 
225
227
 
226
228
  /* unions = 'old_table union new_table' or any one of the tables */
@@ -242,7 +244,7 @@ BEGIN
242
244
  FROM (
243
245
  SELECT DISTINCT related_view_name, related_view_def
244
246
  FROM prostgles.v_triggers
245
- WHERE table_name = TG_TABLE_NAME
247
+ WHERE table_name = format(TG_TABLE_NAME, '%I')
246
248
  AND related_view_name IS NOT NULL
247
249
  AND related_view_def IS NOT NULL
248
250
  ) t
@@ -254,7 +256,8 @@ BEGIN
254
256
  FROM (
255
257
  %s
256
258
  ) t
257
- $c$, unions
259
+ $c$,
260
+ unions
258
261
  )
259
262
  INTO query;
260
263
 
@@ -318,17 +321,7 @@ BEGIN
318
321
 
319
322
 
320
323
  RETURN NULL;
321
-
322
- /*
323
- EXCEPTION WHEN OTHERS THEN
324
- DELETE FROM prostgles.app_triggers; -- delete all or will need to loop through all conditions to find issue;
325
- RAISE NOTICE 'trigger dropped due to exception';
326
- ${"--EXCEPTION_WHEN_COLUMN_WAS_RENAMED_THEN_DROP_TRIGGER"};
327
-
328
-
329
-
330
- RETURN NULL;
331
- */
324
+
332
325
  END;
333
326
 
334
327
  --COMMIT;
@@ -341,6 +334,7 @@ BEGIN
341
334
  DECLARE operations TEXT[] := ARRAY['insert', 'update', 'delete'];
342
335
  DECLARE op TEXT;
343
336
  DECLARE query TEXT;
337
+ DECLARE trg_name TEXT;
344
338
  DECLARE trw RECORD;
345
339
  DECLARE app RECORD;
346
340
  DECLARE start_time BIGINT;
@@ -352,7 +346,7 @@ BEGIN
352
346
 
353
347
  --RAISE NOTICE 'prostgles.app_triggers % ', TG_OP;
354
348
 
355
- /* If no other listeners (app_triggers) left on table then DROP actual table data watch triggers */
349
+ /* If no other listeners (app_triggers) left on table then DISABLE actual table data watch triggers */
356
350
  IF TG_OP = 'DELETE' THEN
357
351
 
358
352
  --RAISE NOTICE 'DELETE trigger_add_remove_func table: % ', ' ' || COALESCE((SELECT concat_ws(' ', string_agg(table_name, ' & '), count(*), min(inserted) ) FROM prostgles.app_triggers) , ' 0 ');
@@ -360,19 +354,32 @@ BEGIN
360
354
 
361
355
  select count(*) from old_table into changed_triggers_count;
362
356
 
363
- /* Drop actual triggers if needed */
357
+ /* Disable actual triggers if needed */
364
358
  FOR trw IN
365
- SELECT DISTINCT table_name FROM old_table ot
359
+ SELECT DISTINCT table_name
360
+ FROM old_table ot
366
361
  WHERE NOT EXISTS (
367
- SELECT 1 FROM prostgles.app_triggers t
368
- WHERE t.table_name = ot.table_name
369
- )
362
+ SELECT 1
363
+ FROM prostgles.app_triggers t
364
+ WHERE t.table_name = ot.table_name
365
+ )
366
+ AND EXISTS (
367
+ SELECT trigger_name
368
+ FROM information_schema.triggers
369
+ WHERE trigger_name IN (
370
+ concat_ws('_', 'prostgles_triggers', table_name, 'insert'),
371
+ concat_ws('_', 'prostgles_triggers', table_name, 'update'),
372
+ concat_ws('_', 'prostgles_triggers', table_name, 'delete')
373
+ )
374
+ )
370
375
  LOOP
371
376
 
372
377
  FOREACH op IN ARRAY operations
373
378
  LOOP
374
- --RAISE NOTICE ' DROP DATA TRIGGER FOR: % ', trw.table_name;
375
- EXECUTE format(' DROP TRIGGER IF EXISTS %I ON %I ;' , 'prostgles_triggers_' || trw.table_name || '_' || op, trw.table_name);
379
+ trg_name := concat_ws('_', 'prostgles_triggers', trw.table_name, op);
380
+
381
+ --EXECUTE format(' DROP TRIGGER IF EXISTS %I ON %s ;' , trg_name, trw.table_name);
382
+ EXECUTE format(' ALTER TABLE %s DISABLE TRIGGER %I ;', trw.table_name, trg_name);
376
383
  END LOOP;
377
384
 
378
385
  END LOOP;
@@ -399,55 +406,66 @@ BEGIN
399
406
  AND t.inserted < nt.inserted -- exclude current record (this is an after trigger). Turn into before trigger?
400
407
  )
401
408
 
402
- /* Table is valid */
409
+ /* Table is valid
403
410
  AND EXISTS (
404
411
  SELECT 1
405
412
  FROM information_schema.tables
406
413
  WHERE table_schema = 'public'
407
414
  AND table_name = nt.table_name
408
415
  )
409
- LOOP
410
-
411
- /*
412
- RAISE NOTICE ' CREATE DATA TRIGGER FOR: % TABLE EXISTS?', trw.table_name, SELECT EXISTS (
413
- SELECT 1
414
- FROM information_schema.tables
415
- WHERE table_schema = 'public'
416
- AND table_name = nt.table_name
417
- );
418
416
  */
417
+ LOOP
418
+
419
+ IF (
420
+ SELECT COUNT(*)
421
+ FROM information_schema.triggers
422
+ WHERE trigger_name IN (
423
+ 'prostgles_triggers_' || trw.table_name || '_insert',
424
+ 'prostgles_triggers_' || trw.table_name || '_update',
425
+ 'prostgles_triggers_' || trw.table_name || '_delete'
426
+ )
427
+ ) = 3 AND false
428
+ THEN
429
+ query := concat_ws(E'\n',
430
+ format(' ALTER TABLE %s ENABLE TRIGGER %I ;', trw.table_name, 'prostgles_triggers_' || trw.table_name || '_insert'),
431
+ format(' ALTER TABLE %s ENABLE TRIGGER %I ;', trw.table_name, 'prostgles_triggers_' || trw.table_name || '_update'),
432
+ format(' ALTER TABLE %s ENABLE TRIGGER %I ;', trw.table_name, 'prostgles_triggers_' || trw.table_name || '_delete')
433
+ );
434
+ ELSE
435
+
436
+ query := format(
437
+ $q$
438
+ DROP TRIGGER IF EXISTS %1$I ON %2$s;
439
+ CREATE TRIGGER %1$I
440
+ AFTER INSERT ON %2$s
441
+ REFERENCING NEW TABLE AS new_table
442
+ FOR EACH STATEMENT EXECUTE PROCEDURE ${DB_OBJ_NAMES.data_watch_func}();
443
+ COMMENT ON TRIGGER %1$I ON %2$s IS 'Prostgles internal trigger used to notify when data in the table changed';
444
+ $q$,
445
+ 'prostgles_triggers_' || trw.table_name || '_insert', trw.table_name
446
+ ) || format(
447
+ $q$
448
+ DROP TRIGGER IF EXISTS %1$I ON %2$s;
449
+ CREATE TRIGGER %1$I
450
+ AFTER UPDATE ON %2$s
451
+ REFERENCING OLD TABLE AS old_table NEW TABLE AS new_table
452
+ FOR EACH STATEMENT EXECUTE PROCEDURE ${DB_OBJ_NAMES.data_watch_func}();
453
+ COMMENT ON TRIGGER %1$I ON %2$s IS 'Prostgles internal trigger used to notify when data in the table changed';
454
+ $q$,
455
+ 'prostgles_triggers_' || trw.table_name || '_update', trw.table_name
456
+ ) || format(
457
+ $q$
458
+ DROP TRIGGER IF EXISTS %1$I ON %2$s;
459
+ CREATE TRIGGER %1$I
460
+ AFTER DELETE ON %2$s
461
+ REFERENCING OLD TABLE AS old_table
462
+ FOR EACH STATEMENT EXECUTE PROCEDURE ${DB_OBJ_NAMES.data_watch_func}();
463
+ COMMENT ON TRIGGER %1$I ON %2$s IS 'Prostgles internal trigger used to notify when data in the table changed';
464
+ $q$,
465
+ 'prostgles_triggers_' || trw.table_name || '_delete', trw.table_name
466
+ );
467
+ END IF;
419
468
 
420
- query := format(
421
- $q$
422
- DROP TRIGGER IF EXISTS %1$I ON %2$I;
423
- CREATE TRIGGER %1$I
424
- AFTER INSERT ON %2$I
425
- REFERENCING NEW TABLE AS new_table
426
- FOR EACH STATEMENT EXECUTE PROCEDURE ${DB_OBJ_NAMES.data_watch_func}();
427
- COMMENT ON TRIGGER %1$I ON %2$I IS 'Prostgles internal trigger used to notify when data in the table changed';
428
- $q$,
429
- 'prostgles_triggers_' || trw.table_name || '_insert', trw.table_name
430
- ) || format(
431
- $q$
432
- DROP TRIGGER IF EXISTS %1$I ON %2$I;
433
- CREATE TRIGGER %1$I
434
- AFTER UPDATE ON %2$I
435
- REFERENCING OLD TABLE AS old_table NEW TABLE AS new_table
436
- FOR EACH STATEMENT EXECUTE PROCEDURE ${DB_OBJ_NAMES.data_watch_func}();
437
- COMMENT ON TRIGGER %1$I ON %2$I IS 'Prostgles internal trigger used to notify when data in the table changed';
438
- $q$,
439
- 'prostgles_triggers_' || trw.table_name || '_update', trw.table_name
440
- ) || format(
441
- $q$
442
- DROP TRIGGER IF EXISTS %1$I ON %2$I;
443
- CREATE TRIGGER %1$I
444
- AFTER DELETE ON %2$I
445
- REFERENCING OLD TABLE AS old_table
446
- FOR EACH STATEMENT EXECUTE PROCEDURE ${DB_OBJ_NAMES.data_watch_func}();
447
- COMMENT ON TRIGGER %1$I ON %2$I IS 'Prostgles internal trigger used to notify when data in the table changed';
448
- $q$,
449
- 'prostgles_triggers_' || trw.table_name || '_delete', trw.table_name
450
- );
451
469
 
452
470
  --RAISE NOTICE ' % ', query;
453
471
 
@@ -457,20 +475,10 @@ BEGIN
457
475
  DO $e$
458
476
  BEGIN
459
477
  /* ${ PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID} */
460
- IF EXISTS (
461
- SELECT 1
462
- FROM information_schema.tables
463
- WHERE table_schema = 'public'
464
- AND table_name = %L
465
- ) THEN
466
-
467
- %s
468
-
469
- END IF;
478
+ %s
470
479
 
471
480
  END $e$;
472
481
  $q$,
473
- trw.table_name,
474
482
  query
475
483
  ) ;
476
484
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prostgles-server",
3
- "version": "4.2.62",
3
+ "version": "4.2.64",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -474,7 +474,7 @@ export const isomorphicQueries = async (db: DBOFullyTyped | DBHandlerClient, log
474
474
 
475
475
  if(item && item.name === "zz3zz3"){
476
476
  await db.various.delete!({ name: "zz3zz3" });
477
- sub.unsubscribe();
477
+ await sub.unsubscribe();
478
478
  resolve(true)
479
479
  }
480
480
  });
@@ -989,7 +989,30 @@ export const isomorphicQueries = async (db: DBOFullyTyped | DBHandlerClient, log
989
989
  }
990
990
  }, { select: "*" });
991
991
  assert.deepStrictEqual(exists1, exists2)
992
- })
992
+ });
993
+
994
+ // await test("subscribe to escaped table name", async () => {
995
+ // await tryRunP("subscribe to escaped table name", async (resolve, reject) => {
996
+ // // await tout(11000);
997
+ // const filter = { [`"text_col0"`]: "0" }
998
+ // let runs = 0;
999
+ // const sub = await db[`"""quoted0"""`].subscribe!(filter, { }, async items => {
1000
+ // const item = items[0];
1001
+ // if(item && item[`"text_col0"`] === "0"){
1002
+ // if(!runs){
1003
+ // db[`"""quoted0"""`].update!(filter, filter);
1004
+ // log(JSON.stringify(items))
1005
+ // }
1006
+ // runs++;
1007
+ // if(runs < 2){
1008
+ // return;
1009
+ // }
1010
+ // await sub.unsubscribe();
1011
+ // resolve(true);
1012
+ // }
1013
+ // });
1014
+ // });
1015
+ // });
993
1016
 
994
1017
  await test("Reverse join with agg", async () => {
995
1018
  const inserted = await db.tr1.insert!({ tr2: { t1: "a", t2: "b" } }, { returning: "*" });
@@ -1008,15 +1031,19 @@ export const isomorphicQueries = async (db: DBOFullyTyped | DBHandlerClient, log
1008
1031
  });
1009
1032
 
1010
1033
  await test("Related table subscribe", async () => {
1011
- const sub = await db.tr1.subscribe!({}, {
1012
- select: {
1013
- "*": 1,
1014
- tr2: "*",
1015
- tr3: "*",
1016
- }
1017
- }, _rows => {
1034
+ const sub = await db.tr1.subscribe!(
1035
+ {},
1036
+ {
1037
+ select: {
1038
+ "*": 1,
1039
+ tr2: "*",
1040
+ tr3: "*",
1041
+ }
1042
+ },
1043
+ _rows => {
1018
1044
 
1019
- });
1045
+ }
1046
+ );
1020
1047
 
1021
1048
  await sub.unsubscribe();
1022
1049
  });
@@ -505,6 +505,16 @@ export type DBSchemaGenerated = {
505
505
  symbol: string;
506
506
  };
507
507
  };
508
+ unions: {
509
+ is_view: false;
510
+ select: true;
511
+ insert: true;
512
+ update: true;
513
+ delete: true;
514
+ columns: {
515
+ string_agg?: null | string;
516
+ };
517
+ };
508
518
  users: {
509
519
  is_view: false;
510
520
  select: true;
@@ -21,7 +21,7 @@
21
21
  },
22
22
  "../..": {
23
23
  "name": "prostgles-server",
24
- "version": "4.2.61",
24
+ "version": "4.2.63",
25
25
  "license": "MIT",
26
26
  "dependencies": {
27
27
  "bluebird": "^3.7.2",