prostgles-server 4.2.235 → 4.2.237
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/ViewHandler/subscribe.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/subscribe.js.map +1 -1
- package/dist/Logging.d.ts +6 -3
- package/dist/Logging.d.ts.map +1 -1
- package/dist/PubSubManager/PubSubManager.d.ts +19 -3
- package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
- package/dist/PubSubManager/PubSubManager.js +29 -237
- package/dist/PubSubManager/PubSubManager.js.map +1 -1
- package/dist/PubSubManager/addTrigger.d.ts +21 -0
- package/dist/PubSubManager/addTrigger.d.ts.map +1 -0
- package/dist/PubSubManager/addTrigger.js +83 -0
- package/dist/PubSubManager/addTrigger.js.map +1 -0
- package/dist/PubSubManager/deleteOrphanedTriggers.d.ts +3 -0
- package/dist/PubSubManager/deleteOrphanedTriggers.d.ts.map +1 -0
- package/dist/PubSubManager/deleteOrphanedTriggers.js +31 -0
- package/dist/PubSubManager/deleteOrphanedTriggers.js.map +1 -0
- package/dist/PubSubManager/initialiseEventTriggers.d.ts +3 -0
- package/dist/PubSubManager/initialiseEventTriggers.d.ts.map +1 -0
- package/dist/PubSubManager/initialiseEventTriggers.js +150 -0
- package/dist/PubSubManager/initialiseEventTriggers.js.map +1 -0
- package/dist/PubSubManager/notifListener.d.ts.map +1 -1
- package/dist/PubSubManager/notifListener.js +2 -28
- package/dist/PubSubManager/notifListener.js.map +1 -1
- package/dist/PubSubManager/refreshTriggers.d.ts +3 -0
- package/dist/PubSubManager/refreshTriggers.d.ts.map +1 -0
- package/dist/PubSubManager/refreshTriggers.js +31 -0
- package/dist/PubSubManager/refreshTriggers.js.map +1 -0
- package/lib/DboBuilder/ViewHandler/subscribe.ts +0 -1
- package/lib/Logging.ts +7 -3
- package/lib/PubSubManager/PubSubManager.ts +37 -266
- package/lib/PubSubManager/addTrigger.ts +94 -0
- package/lib/PubSubManager/deleteOrphanedTriggers.ts +33 -0
- package/lib/PubSubManager/initialiseEventTriggers.ts +156 -0
- package/lib/PubSubManager/notifListener.ts +2 -31
- package/lib/PubSubManager/refreshTriggers.ts +38 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deleteOrphanedTriggers.d.ts","sourceRoot":"","sources":["../../lib/PubSubManager/deleteOrphanedTriggers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBA8BlF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deleteOrphanedTriggers = void 0;
|
|
4
|
+
const PubSubManager_1 = require("./PubSubManager");
|
|
5
|
+
async function deleteOrphanedTriggers(tableName) {
|
|
6
|
+
const activeConditions = (this.getTriggerInfo(tableName) ?? []).filter((c) => c.subs.length || c.syncs.length);
|
|
7
|
+
this.db
|
|
8
|
+
.any(`
|
|
9
|
+
/* Delete removed subscriptions */
|
|
10
|
+
/* ${PubSubManager_1.PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID} */
|
|
11
|
+
DELETE FROM prostgles.app_triggers at
|
|
12
|
+
WHERE EXISTS (
|
|
13
|
+
SELECT 1
|
|
14
|
+
FROM prostgles.v_triggers t
|
|
15
|
+
WHERE t.table_name = $1
|
|
16
|
+
AND t.condition_hash NOT IN ($2:csv)
|
|
17
|
+
AND t.app_id = $3
|
|
18
|
+
AND at.app_id = t.app_id
|
|
19
|
+
AND at.table_name = t.table_name
|
|
20
|
+
AND at.condition = t.condition
|
|
21
|
+
)
|
|
22
|
+
`, [tableName, activeConditions.map((c) => c.hash), this.appId])
|
|
23
|
+
.then(() => {
|
|
24
|
+
return this.refreshTriggers();
|
|
25
|
+
})
|
|
26
|
+
.catch((e) => {
|
|
27
|
+
console.error("Error deleting orphaned triggers", e);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
exports.deleteOrphanedTriggers = deleteOrphanedTriggers;
|
|
31
|
+
//# sourceMappingURL=deleteOrphanedTriggers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deleteOrphanedTriggers.js","sourceRoot":"","sources":["../../lib/PubSubManager/deleteOrphanedTriggers.ts"],"names":[],"mappings":";;;AAAA,mDAAgD;AAEzC,KAAK,UAAU,sBAAsB,CAAsB,SAAiB;IACjF,MAAM,gBAAgB,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CACpE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CACvC,CAAC;IAEF,IAAI,CAAC,EAAE;SACJ,GAAG,CACF;;aAEO,6BAAa,CAAC,kCAAkC;;;;;;;;;;;;SAYpD,EACH,CAAC,SAAS,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAC7D;SACA,IAAI,CAAC,GAAG,EAAE;QACT,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;IAChC,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QACX,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACP,CAAC;AA9BD,wDA8BC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initialiseEventTriggers.d.ts","sourceRoot":"","sources":["../../lib/PubSubManager/initialiseEventTriggers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAQhD,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,aAAa,oBAoFhE"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initialiseEventTriggers = void 0;
|
|
4
|
+
const pgp = require("pg-promise");
|
|
5
|
+
const PubSubManager_1 = require("./PubSubManager");
|
|
6
|
+
const Prostgles_1 = require("../Prostgles");
|
|
7
|
+
const Event_Trigger_Tags_1 = require("../Event_Trigger_Tags");
|
|
8
|
+
const orphanTriggerCheck_1 = require("./orphanTriggerCheck");
|
|
9
|
+
const getPubSubManagerInitQuery_1 = require("./getPubSubManagerInitQuery");
|
|
10
|
+
const asValue = (v) => pgp.as.format("$1", [v]);
|
|
11
|
+
async function initialiseEventTriggers() {
|
|
12
|
+
const { watchSchema } = this.dboBuilder.prostgles.opts;
|
|
13
|
+
if (watchSchema && !(await (0, Prostgles_1.getIsSuperUser)(this.db))) {
|
|
14
|
+
console.warn("prostgles watchSchema requires superuser db user. Will not watch using event triggers");
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
/** We use these names because they include schema where necessary */
|
|
18
|
+
const allTableNames = Object.keys(this.dbo).filter((k) => this.dbo[k]?.tableOrViewInfo);
|
|
19
|
+
const tableFilterQuery = allTableNames.length ?
|
|
20
|
+
`OR table_name NOT IN (${allTableNames.map((tblName) => asValue(tblName)).join(", ")})`
|
|
21
|
+
: "";
|
|
22
|
+
const query = pgp.as.format(`
|
|
23
|
+
BEGIN;-- ISOLATION LEVEL SERIALIZABLE;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* ${PubSubManager_1.PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID}
|
|
27
|
+
* Drop stale triggers
|
|
28
|
+
* */
|
|
29
|
+
DO
|
|
30
|
+
$do$
|
|
31
|
+
DECLARE trg RECORD;
|
|
32
|
+
q TEXT;
|
|
33
|
+
ev_trg_needed BOOLEAN := FALSE;
|
|
34
|
+
ev_trg_exists BOOLEAN := FALSE;
|
|
35
|
+
is_super_user BOOLEAN := FALSE;
|
|
36
|
+
BEGIN
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Delete disconnected app records, this will delete related triggers
|
|
40
|
+
* */
|
|
41
|
+
${orphanTriggerCheck_1.DELETE_DISCONNECTED_APPS_QUERY};
|
|
42
|
+
|
|
43
|
+
DELETE FROM prostgles.app_triggers
|
|
44
|
+
WHERE app_id NOT IN (SELECT id FROM prostgles.apps)
|
|
45
|
+
${tableFilterQuery}
|
|
46
|
+
;
|
|
47
|
+
|
|
48
|
+
/** IS THIS STILL NEEDED? Delete existing triggers without locking
|
|
49
|
+
*/
|
|
50
|
+
LOCK TABLE prostgles.app_triggers IN ACCESS EXCLUSIVE MODE;
|
|
51
|
+
EXECUTE format(
|
|
52
|
+
$q$
|
|
53
|
+
|
|
54
|
+
CREATE TEMP TABLE %1$I AS --ON COMMIT DROP AS
|
|
55
|
+
SELECT * FROM prostgles.app_triggers;
|
|
56
|
+
|
|
57
|
+
DELETE FROM prostgles.app_triggers;
|
|
58
|
+
|
|
59
|
+
INSERT INTO prostgles.app_triggers
|
|
60
|
+
SELECT * FROM %1$I;
|
|
61
|
+
|
|
62
|
+
DROP TABLE IF EXISTS %1$I;
|
|
63
|
+
$q$,
|
|
64
|
+
${asValue("triggers_" + this.appId)}
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
${SCHEMA_WATCH_EVENT_TRIGGER_QUERY}
|
|
68
|
+
|
|
69
|
+
END
|
|
70
|
+
$do$;
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
COMMIT;
|
|
74
|
+
`, { EVENT_TRIGGER_TAGS: Event_Trigger_Tags_1.EVENT_TRIGGER_TAGS });
|
|
75
|
+
await this.db
|
|
76
|
+
.tx((t) => t.any(query))
|
|
77
|
+
.catch((e) => {
|
|
78
|
+
console.error("prepareTriggers failed: ", e);
|
|
79
|
+
throw e;
|
|
80
|
+
});
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
catch (e) {
|
|
84
|
+
console.error("prepareTriggers failed: ", e);
|
|
85
|
+
throw e;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
exports.initialiseEventTriggers = initialiseEventTriggers;
|
|
89
|
+
const SCHEMA_WATCH_EVENT_TRIGGER_QUERY = `
|
|
90
|
+
|
|
91
|
+
is_super_user := EXISTS (select 1 from pg_user where usename = CURRENT_USER AND usesuper IS TRUE);
|
|
92
|
+
|
|
93
|
+
/* DROP the old buggy schema watch trigger */
|
|
94
|
+
IF EXISTS (
|
|
95
|
+
SELECT 1 FROM pg_catalog.pg_event_trigger
|
|
96
|
+
WHERE evtname = 'prostgles_schema_watch_trigger'
|
|
97
|
+
) AND is_super_user IS TRUE
|
|
98
|
+
THEN
|
|
99
|
+
DROP EVENT TRIGGER IF EXISTS prostgles_schema_watch_trigger;
|
|
100
|
+
END IF;
|
|
101
|
+
|
|
102
|
+
ev_trg_needed := EXISTS (
|
|
103
|
+
SELECT 1 FROM prostgles.apps
|
|
104
|
+
WHERE watching_schema_tag_names IS NOT NULL
|
|
105
|
+
);
|
|
106
|
+
ev_trg_exists := EXISTS (
|
|
107
|
+
SELECT 1 FROM pg_catalog.pg_event_trigger
|
|
108
|
+
WHERE evtname = ${asValue(getPubSubManagerInitQuery_1.DB_OBJ_NAMES.schema_watch_trigger)}
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
/* DROP stale event trigger */
|
|
112
|
+
IF
|
|
113
|
+
is_super_user IS TRUE
|
|
114
|
+
AND ev_trg_needed IS FALSE
|
|
115
|
+
AND ev_trg_exists IS TRUE
|
|
116
|
+
THEN
|
|
117
|
+
|
|
118
|
+
SELECT format(
|
|
119
|
+
$$
|
|
120
|
+
DROP EVENT TRIGGER IF EXISTS %I ;
|
|
121
|
+
DROP EVENT TRIGGER IF EXISTS %I ;
|
|
122
|
+
$$
|
|
123
|
+
, ${asValue(getPubSubManagerInitQuery_1.DB_OBJ_NAMES.schema_watch_trigger)}
|
|
124
|
+
, ${asValue(getPubSubManagerInitQuery_1.DB_OBJ_NAMES.schema_watch_trigger_drop)}
|
|
125
|
+
)
|
|
126
|
+
INTO q;
|
|
127
|
+
EXECUTE q;
|
|
128
|
+
|
|
129
|
+
/* CREATE event trigger */
|
|
130
|
+
ELSIF
|
|
131
|
+
is_super_user IS TRUE
|
|
132
|
+
AND ev_trg_needed IS TRUE
|
|
133
|
+
AND ev_trg_exists IS FALSE
|
|
134
|
+
THEN
|
|
135
|
+
|
|
136
|
+
DROP EVENT TRIGGER IF EXISTS ${getPubSubManagerInitQuery_1.DB_OBJ_NAMES.schema_watch_trigger};
|
|
137
|
+
CREATE EVENT TRIGGER ${getPubSubManagerInitQuery_1.DB_OBJ_NAMES.schema_watch_trigger}
|
|
138
|
+
ON ddl_command_end
|
|
139
|
+
WHEN TAG IN (\${EVENT_TRIGGER_TAGS:csv})
|
|
140
|
+
EXECUTE PROCEDURE ${getPubSubManagerInitQuery_1.DB_OBJ_NAMES.schema_watch_func}();
|
|
141
|
+
|
|
142
|
+
DROP EVENT TRIGGER IF EXISTS ${getPubSubManagerInitQuery_1.DB_OBJ_NAMES.schema_watch_trigger_drop};
|
|
143
|
+
CREATE EVENT TRIGGER ${getPubSubManagerInitQuery_1.DB_OBJ_NAMES.schema_watch_trigger_drop}
|
|
144
|
+
ON sql_drop
|
|
145
|
+
--WHEN TAG IN (\${EVENT_TRIGGER_TAGS:csv})
|
|
146
|
+
EXECUTE PROCEDURE ${getPubSubManagerInitQuery_1.DB_OBJ_NAMES.schema_watch_func}();
|
|
147
|
+
|
|
148
|
+
END IF;
|
|
149
|
+
`;
|
|
150
|
+
//# sourceMappingURL=initialiseEventTriggers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initialiseEventTriggers.js","sourceRoot":"","sources":["../../lib/PubSubManager/initialiseEventTriggers.ts"],"names":[],"mappings":";;;AAAA,kCAAkC;AAClC,mDAAgD;AAChD,4CAA8C;AAC9C,8DAA2D;AAC3D,6DAAsE;AACtE,2EAA2D;AAE3D,MAAM,OAAO,GAAG,CAAC,CAAM,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9C,KAAK,UAAU,uBAAuB;IAC3C,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC;IACvD,IAAI,WAAW,IAAI,CAAC,CAAC,MAAM,IAAA,0BAAc,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,IAAI,CACV,uFAAuF,CACxF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,qEAAqE;QACrE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;QACxF,MAAM,gBAAgB,GACpB,aAAa,CAAC,MAAM,CAAC,CAAC;YACpB,yBAAyB,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACzF,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC,MAAM,CACzB;;;;aAIO,6BAAa,CAAC,kCAAkC;;;;;;;;;;;;;;;cAe/C,mDAA8B;;;;cAI9B,gBAAgB;;;;;;;;;;;;;;;;;;;kBAmBZ,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;;;cAGrC,gCAAgC;;;;;;;OAOvC,EACD,EAAE,kBAAkB,EAAlB,uCAAkB,EAAE,CACvB,CAAC;QAEF,MAAM,IAAI,CAAC,EAAE;aACV,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aACvB,KAAK,CAAC,CAAC,CAAM,EAAE,EAAE;YAChB,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;QAEL,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC;AApFD,0DAoFC;AAED,MAAM,gCAAgC,GAAG;;;;;;;;;;;;;;;;;;;sBAmBnB,OAAO,CAAC,wCAAY,CAAC,oBAAoB,CAAC;;;;;;;;;;;;;;;YAepD,OAAO,CAAC,wCAAY,CAAC,oBAAoB,CAAC;YAC1C,OAAO,CAAC,wCAAY,CAAC,yBAAyB,CAAC;;;;;;;;;;;;qCAYtB,wCAAY,CAAC,oBAAoB;6BACzC,wCAAY,CAAC,oBAAoB;;;0BAGpC,wCAAY,CAAC,iBAAiB;;qCAEnB,wCAAY,CAAC,yBAAyB;6BAC9C,wCAAY,CAAC,yBAAyB;;;0BAGzC,wCAAY,CAAC,iBAAiB;;;CAGvD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifListener.d.ts","sourceRoot":"","sources":["../../lib/PubSubManager/notifListener.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAG1F,wBAAsB,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"notifListener.d.ts","sourceRoot":"","sources":["../../lib/PubSubManager/notifListener.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAG1F,wBAAsB,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,iBAqKjF"}
|
|
@@ -62,12 +62,7 @@ async function notifListener(data) {
|
|
|
62
62
|
if (!table_name) {
|
|
63
63
|
throw "table_name undef";
|
|
64
64
|
}
|
|
65
|
-
const tableTriggerConditions = this.
|
|
66
|
-
idx,
|
|
67
|
-
condition,
|
|
68
|
-
subs: this.getTriggerSubs(table_name, condition),
|
|
69
|
-
syncs: this.getSyncs(table_name, condition),
|
|
70
|
-
}));
|
|
65
|
+
const tableTriggerConditions = this.getTriggerInfo(table_name);
|
|
71
66
|
let state = "ok";
|
|
72
67
|
// const triggers = await this.db.any("SELECT * FROM prostgles.triggers WHERE table_name = $1 AND id IN ($2:csv)", [table_name, condition_ids_str.split(",").map(v => +v)]);
|
|
73
68
|
// const conditions: string[] = triggers.map(t => t.condition);
|
|
@@ -95,28 +90,7 @@ async function notifListener(data) {
|
|
|
95
90
|
return !tc || (tc.subs.length === 0 && tc.syncs.length === 0);
|
|
96
91
|
});
|
|
97
92
|
if (orphanedTableConditions.length) {
|
|
98
|
-
this.
|
|
99
|
-
.any(`
|
|
100
|
-
/* Delete removed subscriptions */
|
|
101
|
-
/* ${PubSubManager_1.PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID} */
|
|
102
|
-
DELETE FROM prostgles.app_triggers at
|
|
103
|
-
WHERE EXISTS (
|
|
104
|
-
SELECT 1
|
|
105
|
-
FROM prostgles.v_triggers t
|
|
106
|
-
WHERE t.table_name = $1
|
|
107
|
-
AND t.c_id IN ($2:csv)
|
|
108
|
-
AND t.app_id = $3
|
|
109
|
-
AND at.app_id = t.app_id
|
|
110
|
-
AND at.table_name = t.table_name
|
|
111
|
-
AND at.condition = t.condition
|
|
112
|
-
)
|
|
113
|
-
`, [table_name, orphanedTableConditions, this.appId])
|
|
114
|
-
.then(() => {
|
|
115
|
-
return this.refreshTriggers();
|
|
116
|
-
})
|
|
117
|
-
.catch((e) => {
|
|
118
|
-
console.error("Error deleting orphaned triggers", e);
|
|
119
|
-
});
|
|
93
|
+
void this.deleteOrphanedTriggers.bind(this)(table_name);
|
|
120
94
|
}
|
|
121
95
|
firedTableConditions.map(({ subs, syncs }) => {
|
|
122
96
|
(0, PubSubManager_1.log)("notifListener", subs.map((s) => s.channel_name), syncs.map((s) => s.channel_name));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifListener.js","sourceRoot":"","sources":["../../lib/PubSubManager/notifListener.ts"],"names":[],"mappings":";;;AAAA,mDAA0F;AAE1F,mDAAmD;AAC5C,KAAK,UAAU,aAAa,CAAsB,IAAyB;IAChF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;IAEzB,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,6BAAa,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAkB,CAAC;IAE9C,IAAA,mBAAG,EAAC,GAAG,CAAC,CAAC;IAET,MAAM,SAAS,GAAG;QAChB,QAAQ,EAAE,IAAI,CAAC,SAAS;QACxB,GAAG,EAAE,SAAS;QACd,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;QAC3B,OAAO;QACP,SAAS;KACV,CAAC;IAEF,MAAM,IAAI,CAAC,IAAI,CAAC;QACd,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,eAAe;QACxB,GAAG,SAAS;KACb,CAAC,CAAC;IAEH,IAAI,SAAS,KAAK,0BAAU,CAAC,MAAM,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,cAAc,EAAE,CAAC;YAC1D,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC;YACjD,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC3C,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,mBAAmB;gBAC5B,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;aACzB,CAAC,CAAC;YAEH,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;gBACrB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,cAAc,CAAC;oBACnD,OAAO;oBACP,KAAK;iBACN,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO;IACT,CAAC;SAAM,IAAI,SAAS,KAAK,0BAAU,CAAC,mBAAmB,EAAE,CAAC;QACxD,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,uEAAuE;IACvE,IAAI,SAAS,KAAK,0BAAU,CAAC,IAAI,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,SAAS,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,mCAAmC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,CAAC,GAAG,OAAO,CAAC;IAC5D,MAAM,aAAa,GAAG,iBAAiB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,kBAAkB,CAAC;IAC3B,CAAC;IAED,MAAM,sBAAsB,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"notifListener.js","sourceRoot":"","sources":["../../lib/PubSubManager/notifListener.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refreshTriggers.d.ts","sourceRoot":"","sources":["../../lib/PubSubManager/refreshTriggers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,wBAAsB,eAAe,CAAC,IAAI,EAAE,aAAa,iBAmCxD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.refreshTriggers = void 0;
|
|
4
|
+
async function refreshTriggers() {
|
|
5
|
+
const start = Date.now();
|
|
6
|
+
const triggers = await this.db.any(`
|
|
7
|
+
SELECT *
|
|
8
|
+
FROM prostgles.v_triggers
|
|
9
|
+
WHERE app_id = $1
|
|
10
|
+
ORDER BY table_name, condition
|
|
11
|
+
`, [this.dboBuilder.prostgles.appId]);
|
|
12
|
+
const oldTriggers = { ...this._triggers };
|
|
13
|
+
this._triggers = {};
|
|
14
|
+
triggers.map((t) => {
|
|
15
|
+
this._triggers ??= {};
|
|
16
|
+
this._triggers[t.table_name] ??= [];
|
|
17
|
+
if (!this._triggers[t.table_name]?.map((t) => t.condition).includes(t.condition)) {
|
|
18
|
+
this._triggers[t.table_name]?.push({ condition: t.condition, hash: t.condition_hash });
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
await this._log({
|
|
22
|
+
type: "syncOrSub",
|
|
23
|
+
command: "refreshTriggers",
|
|
24
|
+
duration: Date.now() - start,
|
|
25
|
+
connectedSocketIds: this.connectedSocketIds,
|
|
26
|
+
triggers: this._triggers,
|
|
27
|
+
oldTriggers,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
exports.refreshTriggers = refreshTriggers;
|
|
31
|
+
//# sourceMappingURL=refreshTriggers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refreshTriggers.js","sourceRoot":"","sources":["../../lib/PubSubManager/refreshTriggers.ts"],"names":[],"mappings":";;;AAEO,KAAK,UAAU,eAAe;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,QAAQ,GAIR,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CACrB;;;;;OAKG,EACH,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAClC,CAAC;IAEF,MAAM,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAE1C,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACpB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACjB,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;YACjF,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,IAAI,CAAC;QACd,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,iBAAiB;QAC1B,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;QAC5B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,QAAQ,EAAE,IAAI,CAAC,SAAS;QACxB,WAAW;KACZ,CAAC,CAAC;AACL,CAAC;AAnCD,0CAmCC"}
|
package/lib/Logging.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AnyObject, ClientSchema, TableHandler } from "prostgles-types";
|
|
2
2
|
import { LocalParams } from "./DboBuilder/DboBuilder";
|
|
3
|
-
import { NotifTypeName } from "./PubSubManager/PubSubManager";
|
|
3
|
+
import { NotifTypeName, PubSubManagerTriggers } from "./PubSubManager/PubSubManager";
|
|
4
4
|
|
|
5
5
|
type ClientInfo = {
|
|
6
6
|
socketId: string | undefined;
|
|
@@ -60,7 +60,7 @@ export namespace EventTypes {
|
|
|
60
60
|
export type SyncOrSub = DebugInfo & {
|
|
61
61
|
type: "syncOrSub";
|
|
62
62
|
connectedSocketIds: string[];
|
|
63
|
-
triggers:
|
|
63
|
+
triggers: PubSubManagerTriggers | undefined;
|
|
64
64
|
} & (
|
|
65
65
|
| (SyncOrSubWithClientInfo & {
|
|
66
66
|
command: "addTrigger";
|
|
@@ -82,7 +82,7 @@ export namespace EventTypes {
|
|
|
82
82
|
command: "notifListener.Finished";
|
|
83
83
|
op_name: string | undefined;
|
|
84
84
|
condition_ids_str: string | undefined;
|
|
85
|
-
tableTriggers: string
|
|
85
|
+
tableTriggers: PubSubManagerTriggers[string] | undefined;
|
|
86
86
|
tableSyncs: string;
|
|
87
87
|
state: "ok" | "error" | "no-triggers" | "invalid_condition_ids";
|
|
88
88
|
})
|
|
@@ -100,6 +100,10 @@ export namespace EventTypes {
|
|
|
100
100
|
| {
|
|
101
101
|
command: "postgresNotifListenManager.create" | "postgresNotifListenManager.destroy";
|
|
102
102
|
}
|
|
103
|
+
| {
|
|
104
|
+
command: "refreshTriggers";
|
|
105
|
+
oldTriggers: PubSubManagerTriggers;
|
|
106
|
+
}
|
|
103
107
|
);
|
|
104
108
|
|
|
105
109
|
export type Connection =
|