prostgles-server 4.2.604 → 4.2.605

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,5 @@
1
+ import type { DB } from "../initProstgles";
2
+ import type { TableConfig } from "./TableConfigTypes";
3
+ /** Reconcile only triggers owned by tableConfig; preserve manually created triggers. */
4
+ export declare const getTableTriggerQueries: (db: DB, tableName: string, tableConfig: TableConfig[string], asName: (name: string) => string) => Promise<string[]>;
5
+ //# sourceMappingURL=getTableTriggerQueries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTableTriggerQueries.d.ts","sourceRoot":"","sources":["../../lib/TableConfig/getTableTriggerQueries.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItD,wFAAwF;AACxF,eAAO,MAAM,sBAAsB,GACjC,IAAI,EAAE,EACN,WAAW,MAAM,EACjB,aAAa,WAAW,CAAC,MAAM,CAAC,EAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,KAC/B,OAAO,CAAC,MAAM,EAAE,CA4DlB,CAAC"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTableTriggerQueries = void 0;
4
+ const pg_promise_1 = require("pg-promise");
5
+ const md5_1 = require("prostgles-types/dist/md5");
6
+ const MANAGED_TRIGGER_PREFIX = "prostgles.tableConfig:";
7
+ /** Reconcile only triggers owned by tableConfig; preserve manually created triggers. */
8
+ const getTableTriggerQueries = async (db, tableName, tableConfig, asName) => {
9
+ const tableIdent = asName(tableName);
10
+ const existing = await db.any(`
11
+ SELECT t.tgname AS name, obj_description(t.oid, 'pg_trigger') AS comment
12
+ FROM pg_trigger t
13
+ WHERE t.tgrelid = to_regclass($1) AND NOT t.tgisinternal
14
+ `, [tableIdent]);
15
+ const queries = [];
16
+ const desired = new Set();
17
+ const isDropped = tableConfig.dropIfExists || tableConfig.dropIfExistsCascade;
18
+ for (const [functionName, trigger] of Object.entries(tableConfig.triggers ?? {})) {
19
+ const functionIdent = asName(functionName);
20
+ let functionAdded = false;
21
+ for (const action of trigger.actions) {
22
+ const name = `${functionName}_${action}`;
23
+ desired.add(name);
24
+ const triggerIdent = asName(name);
25
+ const transitionTables = trigger.forEach === "row"
26
+ ? ""
27
+ : [
28
+ "REFERENCING",
29
+ action !== "delete" ? "NEW TABLE AS new_table" : "",
30
+ action !== "insert" ? "OLD TABLE AS old_table" : "",
31
+ ].join(" ");
32
+ const definition = `CREATE TRIGGER ${triggerIdent}
33
+ ${trigger.type} ${action} ON ${tableIdent}
34
+ ${transitionTables} FOR EACH ${trigger.forEach}
35
+ EXECUTE FUNCTION ${functionIdent}();`;
36
+ const comment = MANAGED_TRIGGER_PREFIX + (0, md5_1.md5)(definition + trigger.query);
37
+ const previous = existing.find((entry) => entry.name === name);
38
+ if (!isDropped && previous?.comment === comment)
39
+ continue;
40
+ if (!functionAdded) {
41
+ queries.push(`CREATE OR REPLACE FUNCTION ${functionIdent}()
42
+ RETURNS trigger LANGUAGE plpgsql AS ${pg_promise_1.as.text(trigger.query)};`);
43
+ functionAdded = true;
44
+ }
45
+ queries.push(`DROP TRIGGER IF EXISTS ${triggerIdent} ON ${tableIdent};`);
46
+ queries.push(definition);
47
+ queries.push(`COMMENT ON TRIGGER ${triggerIdent} ON ${tableIdent} IS ${pg_promise_1.as.text(comment)};`);
48
+ }
49
+ }
50
+ if (!isDropped) {
51
+ for (const trigger of existing) {
52
+ if (trigger.comment?.startsWith(MANAGED_TRIGGER_PREFIX) &&
53
+ !desired.has(trigger.name)) {
54
+ queries.push(`DROP TRIGGER ${asName(trigger.name)} ON ${tableIdent};`);
55
+ }
56
+ }
57
+ }
58
+ return queries;
59
+ };
60
+ exports.getTableTriggerQueries = getTableTriggerQueries;
61
+ //# sourceMappingURL=getTableTriggerQueries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTableTriggerQueries.js","sourceRoot":"","sources":["../../lib/TableConfig/getTableTriggerQueries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getTableTriggerQueries.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTableTriggerQueries.spec.d.ts","sourceRoot":"","sources":["../../lib/TableConfig/getTableTriggerQueries.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const strict_1 = __importDefault(require("node:assert/strict"));
7
+ const node_test_1 = __importDefault(require("node:test"));
8
+ const prostgles_types_1 = require("prostgles-types");
9
+ const getTableTriggerQueries_1 = require("./getTableTriggerQueries");
10
+ void (0, node_test_1.default)("trigger configuration quotes names and bodies and preserves unmanaged triggers", async () => {
11
+ const db = {
12
+ any: () => Promise.resolve([
13
+ { name: "manual", comment: null },
14
+ { name: "old_insert", comment: "prostgles.tableConfig:old" },
15
+ ]),
16
+ };
17
+ const queries = await (0, getTableTriggerQueries_1.getTableTriggerQueries)(db, "Odd ' table", {
18
+ triggers: {
19
+ audit: {
20
+ type: "after",
21
+ actions: ["insert"],
22
+ forEach: "row",
23
+ query: "BEGIN RAISE NOTICE '$$'; RETURN NULL; END;",
24
+ },
25
+ },
26
+ }, prostgles_types_1.asName);
27
+ strict_1.default.ok(queries.some((query) => query.includes('ON "Odd \' table"')));
28
+ strict_1.default.ok(queries.some((query) => query.includes("AS 'BEGIN RAISE NOTICE ''$$''; RETURN NULL; END;';")));
29
+ strict_1.default.ok(queries.some((query) => query.includes('DROP TRIGGER "old_insert"')));
30
+ strict_1.default.ok(!queries.some((query) => query.includes('DROP TRIGGER "manual"')));
31
+ });
32
+ void (0, node_test_1.default)("unchanged triggers do not produce DDL; changed bodies replace them", async () => {
33
+ const trigger = {
34
+ type: "after",
35
+ actions: ["update"],
36
+ forEach: "row",
37
+ query: "BEGIN RETURN NULL; END;",
38
+ };
39
+ const config = {
40
+ triggers: { audit: { ...trigger, actions: [...trigger.actions] } },
41
+ };
42
+ const first = await (0, getTableTriggerQueries_1.getTableTriggerQueries)({ any: () => Promise.resolve([]) }, "records", config, prostgles_types_1.asName);
43
+ const commentQuery = first.find((query) => query.startsWith("COMMENT ON"));
44
+ const comment = commentQuery.split(" IS '")[1].slice(0, -2);
45
+ const db = {
46
+ any: () => Promise.resolve([{ name: "audit_update", comment }]),
47
+ };
48
+ strict_1.default.deepEqual(await (0, getTableTriggerQueries_1.getTableTriggerQueries)(db, "records", config, prostgles_types_1.asName), []);
49
+ config.triggers.audit.query =
50
+ "BEGIN RAISE NOTICE 'changed'; RETURN NULL; END;";
51
+ strict_1.default.ok((await (0, getTableTriggerQueries_1.getTableTriggerQueries)(db, "records", config, prostgles_types_1.asName)).some((query) => query.startsWith("CREATE OR REPLACE FUNCTION")));
52
+ strict_1.default.deepEqual(await (0, getTableTriggerQueries_1.getTableTriggerQueries)(db, "records", {}, prostgles_types_1.asName), [
53
+ 'DROP TRIGGER "audit_update" ON "records";',
54
+ ]);
55
+ });
56
+ //# sourceMappingURL=getTableTriggerQueries.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTableTriggerQueries.spec.js","sourceRoot":"","sources":["../../lib/TableConfig/getTableTriggerQueries.spec.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"initTableConfig.d.ts","sourceRoot":"","sources":["../../lib/TableConfig/initTableConfig.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,eAAO,MAAM,eAAe,GAAmB,MAAM,iBAAiB,uBAmVrE,CAAC"}
1
+ {"version":3,"file":"initTableConfig.d.ts","sourceRoot":"","sources":["../../lib/TableConfig/initTableConfig.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,eAAO,MAAM,eAAe,GAAmB,MAAM,iBAAiB,uBAiRrE,CAAC"}
@@ -7,6 +7,7 @@ const fetchTableConstraints_1 = require("./fetchTableConstraints");
7
7
  const getConstraintDefinitionQueries_1 = require("./getConstraintDefinitionQueries");
8
8
  const getFutureTableSchema_1 = require("./getFutureTableSchema");
9
9
  const getTableColumnQueries_1 = require("./getTableColumnQueries");
10
+ const getTableTriggerQueries_1 = require("./getTableTriggerQueries");
10
11
  const getIndexesQueries_1 = require("./indexes/getIndexesQueries");
11
12
  const runMigrations_1 = require("./runMigrations");
12
13
  const initTableConfig = async function () {
@@ -191,63 +192,7 @@ const initTableConfig = async function () {
191
192
  }
192
193
  const indexQueries = await (0, getIndexesQueries_1.getIndexesQueries)(this.db, tableName, tableConf);
193
194
  queries.push(...indexQueries);
194
- const { triggers, dropIfExists, dropIfExistsCascade } = tableConf;
195
- if (triggers) {
196
- const isDropped = dropIfExists || dropIfExistsCascade;
197
- const existingTriggers = await this.db.any(`
198
- SELECT event_object_table
199
- ,trigger_name
200
- FROM information_schema.triggers
201
- WHERE event_object_table = \${tableName}
202
- ORDER BY event_object_table
203
- `, { tableName });
204
- // const existingTriggerFuncs = await this.dbo.sql!(`
205
- // SELECT p.oid,proname,prosrc,u.usename
206
- // FROM pg_proc p
207
- // JOIN pg_user u ON u.usesysid = p.proowner
208
- // WHERE prorettype = 2279;
209
- // `, {}, { returnType: "rows" }) as { proname: string }[];
210
- Object.entries(triggers).forEach(([triggerFuncName, trigger]) => {
211
- const funcNameParsed = asName(triggerFuncName);
212
- let addedFunc = false;
213
- const addFuncDef = () => {
214
- if (addedFunc)
215
- return;
216
- addedFunc = true;
217
- queries.push(`
218
- CREATE OR REPLACE FUNCTION ${funcNameParsed}()
219
- RETURNS trigger
220
- LANGUAGE plpgsql
221
- AS
222
- $$
223
-
224
- ${trigger.query}
225
-
226
- $$;
227
- `);
228
- };
229
- trigger.actions.forEach((action) => {
230
- const triggerActionName = triggerFuncName + "_" + action;
231
- const triggerActionNameParsed = asName(triggerActionName);
232
- if (isDropped) {
233
- queries.push(`DROP TRIGGER IF EXISTS ${triggerActionNameParsed} ON ${tableName};`);
234
- }
235
- if (isDropped || !existingTriggers.some((t) => t.trigger_name === triggerActionName)) {
236
- addFuncDef();
237
- const newTableName = action !== "delete" ? "NEW TABLE AS new_table" : "";
238
- const oldTableName = action !== "insert" ? "OLD TABLE AS old_table" : "";
239
- const transitionTables = trigger.forEach === "row" ? "" : `REFERENCING ${newTableName} ${oldTableName}`;
240
- queries.push(`
241
- CREATE TRIGGER ${triggerActionNameParsed}
242
- ${trigger.type} ${action} ON ${tableName}
243
- ${transitionTables}
244
- FOR EACH ${trigger.forEach}
245
- EXECUTE PROCEDURE ${funcNameParsed}();
246
- `);
247
- }
248
- });
249
- });
250
- }
195
+ queries.push(...(await (0, getTableTriggerQueries_1.getTableTriggerQueries)(this.db, tableName, tableConf, asName)));
251
196
  }
252
197
  if (queries.length) {
253
198
  const q = makeQuery(queries);
@@ -1 +1 @@
1
- {"version":3,"file":"initTableConfig.js","sourceRoot":"","sources":["../../lib/TableConfig/initTableConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"initTableConfig.js","sourceRoot":"","sources":["../../lib/TableConfig/initTableConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+ import { asName } from "prostgles-types";
4
+ import type { DB } from "../initProstgles";
5
+ import { getTableTriggerQueries } from "./getTableTriggerQueries";
6
+
7
+ void test("trigger configuration quotes names and bodies and preserves unmanaged triggers", async () => {
8
+ const db = {
9
+ any: () =>
10
+ Promise.resolve([
11
+ { name: "manual", comment: null },
12
+ { name: "old_insert", comment: "prostgles.tableConfig:old" },
13
+ ]),
14
+ } as unknown as DB;
15
+ const queries = await getTableTriggerQueries(
16
+ db,
17
+ "Odd ' table",
18
+ {
19
+ triggers: {
20
+ audit: {
21
+ type: "after",
22
+ actions: ["insert"],
23
+ forEach: "row",
24
+ query: "BEGIN RAISE NOTICE '$$'; RETURN NULL; END;",
25
+ },
26
+ },
27
+ },
28
+ asName,
29
+ );
30
+ assert.ok(queries.some((query) => query.includes('ON "Odd \' table"')));
31
+ assert.ok(
32
+ queries.some((query) =>
33
+ query.includes("AS 'BEGIN RAISE NOTICE ''$$''; RETURN NULL; END;';"),
34
+ ),
35
+ );
36
+ assert.ok(
37
+ queries.some((query) => query.includes('DROP TRIGGER "old_insert"')),
38
+ );
39
+ assert.ok(!queries.some((query) => query.includes('DROP TRIGGER "manual"')));
40
+ });
41
+
42
+ void test("unchanged triggers do not produce DDL; changed bodies replace them", async () => {
43
+ const trigger = {
44
+ type: "after",
45
+ actions: ["update"],
46
+ forEach: "row",
47
+ query: "BEGIN RETURN NULL; END;" as string,
48
+ } as const;
49
+ const config = {
50
+ triggers: { audit: { ...trigger, actions: [...trigger.actions] } },
51
+ };
52
+ const first = await getTableTriggerQueries(
53
+ { any: () => Promise.resolve([]) } as unknown as DB,
54
+ "records",
55
+ config,
56
+ asName,
57
+ );
58
+ const commentQuery = first.find((query) => query.startsWith("COMMENT ON"))!;
59
+ const comment = commentQuery.split(" IS '")[1]!.slice(0, -2);
60
+ const db = {
61
+ any: () => Promise.resolve([{ name: "audit_update", comment }]),
62
+ } as unknown as DB;
63
+ assert.deepEqual(
64
+ await getTableTriggerQueries(db, "records", config, asName),
65
+ [],
66
+ );
67
+ config.triggers.audit.query =
68
+ "BEGIN RAISE NOTICE 'changed'; RETURN NULL; END;";
69
+ assert.ok(
70
+ (await getTableTriggerQueries(db, "records", config, asName)).some(
71
+ (query) => query.startsWith("CREATE OR REPLACE FUNCTION"),
72
+ ),
73
+ );
74
+ assert.deepEqual(await getTableTriggerQueries(db, "records", {}, asName), [
75
+ 'DROP TRIGGER "audit_update" ON "records";',
76
+ ]);
77
+ });
@@ -0,0 +1,74 @@
1
+ import { as } from "pg-promise";
2
+ import { md5 } from "prostgles-types/dist/md5";
3
+ import type { DB } from "../initProstgles";
4
+ import type { TableConfig } from "./TableConfigTypes";
5
+
6
+ const MANAGED_TRIGGER_PREFIX = "prostgles.tableConfig:";
7
+
8
+ /** Reconcile only triggers owned by tableConfig; preserve manually created triggers. */
9
+ export const getTableTriggerQueries = async (
10
+ db: DB,
11
+ tableName: string,
12
+ tableConfig: TableConfig[string],
13
+ asName: (name: string) => string,
14
+ ): Promise<string[]> => {
15
+ const tableIdent = asName(tableName);
16
+ const existing = await db.any<{ name: string; comment: string | null }>(
17
+ `
18
+ SELECT t.tgname AS name, obj_description(t.oid, 'pg_trigger') AS comment
19
+ FROM pg_trigger t
20
+ WHERE t.tgrelid = to_regclass($1) AND NOT t.tgisinternal
21
+ `,
22
+ [tableIdent],
23
+ );
24
+ const queries: string[] = [];
25
+ const desired = new Set<string>();
26
+ const isDropped = tableConfig.dropIfExists || tableConfig.dropIfExistsCascade;
27
+ for (const [functionName, trigger] of Object.entries(
28
+ tableConfig.triggers ?? {},
29
+ )) {
30
+ const functionIdent = asName(functionName);
31
+ let functionAdded = false;
32
+ for (const action of trigger.actions) {
33
+ const name = `${functionName}_${action}`;
34
+ desired.add(name);
35
+ const triggerIdent = asName(name);
36
+ const transitionTables =
37
+ trigger.forEach === "row"
38
+ ? ""
39
+ : [
40
+ "REFERENCING",
41
+ action !== "delete" ? "NEW TABLE AS new_table" : "",
42
+ action !== "insert" ? "OLD TABLE AS old_table" : "",
43
+ ].join(" ");
44
+ const definition = `CREATE TRIGGER ${triggerIdent}
45
+ ${trigger.type} ${action} ON ${tableIdent}
46
+ ${transitionTables} FOR EACH ${trigger.forEach}
47
+ EXECUTE FUNCTION ${functionIdent}();`;
48
+ const comment = MANAGED_TRIGGER_PREFIX + md5(definition + trigger.query);
49
+ const previous = existing.find((entry) => entry.name === name);
50
+ if (!isDropped && previous?.comment === comment) continue;
51
+ if (!functionAdded) {
52
+ queries.push(`CREATE OR REPLACE FUNCTION ${functionIdent}()
53
+ RETURNS trigger LANGUAGE plpgsql AS ${as.text(trigger.query)};`);
54
+ functionAdded = true;
55
+ }
56
+ queries.push(`DROP TRIGGER IF EXISTS ${triggerIdent} ON ${tableIdent};`);
57
+ queries.push(definition);
58
+ queries.push(
59
+ `COMMENT ON TRIGGER ${triggerIdent} ON ${tableIdent} IS ${as.text(comment)};`,
60
+ );
61
+ }
62
+ }
63
+ if (!isDropped) {
64
+ for (const trigger of existing) {
65
+ if (
66
+ trigger.comment?.startsWith(MANAGED_TRIGGER_PREFIX) &&
67
+ !desired.has(trigger.name)
68
+ ) {
69
+ queries.push(`DROP TRIGGER ${asName(trigger.name)} ON ${tableIdent};`);
70
+ }
71
+ }
72
+ }
73
+ return queries;
74
+ };
@@ -9,6 +9,7 @@ import { fetchTableConstraints } from "./fetchTableConstraints";
9
9
  import { getConstraintDefinitionQueries } from "./getConstraintDefinitionQueries";
10
10
  import { getFutureTableSchema } from "./getFutureTableSchema";
11
11
  import { getTableColumnQueries } from "./getTableColumnQueries";
12
+ import { getTableTriggerQueries } from "./getTableTriggerQueries";
12
13
  import { getIndexesQueries } from "./indexes/getIndexesQueries";
13
14
  import { runMigrations } from "./runMigrations";
14
15
  import type { TableConfigurator } from "./TableConfigurator";
@@ -234,73 +235,7 @@ export const initTableConfig = async function (this: TableConfigurator) {
234
235
  const indexQueries = await getIndexesQueries(this.db, tableName, tableConf);
235
236
  queries.push(...indexQueries);
236
237
 
237
- const { triggers, dropIfExists, dropIfExistsCascade } = tableConf;
238
- if (triggers) {
239
- const isDropped = dropIfExists || dropIfExistsCascade;
240
-
241
- const existingTriggers = await this.db.any<{ trigger_name: string }>(
242
- `
243
- SELECT event_object_table
244
- ,trigger_name
245
- FROM information_schema.triggers
246
- WHERE event_object_table = \${tableName}
247
- ORDER BY event_object_table
248
- `,
249
- { tableName },
250
- );
251
-
252
- // const existingTriggerFuncs = await this.dbo.sql!(`
253
- // SELECT p.oid,proname,prosrc,u.usename
254
- // FROM pg_proc p
255
- // JOIN pg_user u ON u.usesysid = p.proowner
256
- // WHERE prorettype = 2279;
257
- // `, {}, { returnType: "rows" }) as { proname: string }[];
258
-
259
- Object.entries(triggers).forEach(([triggerFuncName, trigger]) => {
260
- const funcNameParsed = asName(triggerFuncName);
261
-
262
- let addedFunc = false;
263
- const addFuncDef = () => {
264
- if (addedFunc) return;
265
- addedFunc = true;
266
- queries.push(`
267
- CREATE OR REPLACE FUNCTION ${funcNameParsed}()
268
- RETURNS trigger
269
- LANGUAGE plpgsql
270
- AS
271
- $$
272
-
273
- ${trigger.query}
274
-
275
- $$;
276
- `);
277
- };
278
-
279
- trigger.actions.forEach((action) => {
280
- const triggerActionName = triggerFuncName + "_" + action;
281
-
282
- const triggerActionNameParsed = asName(triggerActionName);
283
- if (isDropped) {
284
- queries.push(`DROP TRIGGER IF EXISTS ${triggerActionNameParsed} ON ${tableName};`);
285
- }
286
-
287
- if (isDropped || !existingTriggers.some((t) => t.trigger_name === triggerActionName)) {
288
- addFuncDef();
289
- const newTableName = action !== "delete" ? "NEW TABLE AS new_table" : "";
290
- const oldTableName = action !== "insert" ? "OLD TABLE AS old_table" : "";
291
- const transitionTables =
292
- trigger.forEach === "row" ? "" : `REFERENCING ${newTableName} ${oldTableName}`;
293
- queries.push(`
294
- CREATE TRIGGER ${triggerActionNameParsed}
295
- ${trigger.type} ${action} ON ${tableName}
296
- ${transitionTables}
297
- FOR EACH ${trigger.forEach}
298
- EXECUTE PROCEDURE ${funcNameParsed}();
299
- `);
300
- }
301
- });
302
- });
303
- }
238
+ queries.push(...(await getTableTriggerQueries(this.db, tableName, tableConf, asName)));
304
239
  }
305
240
 
306
241
  if (queries.length) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prostgles-server",
3
- "version": "4.2.604",
3
+ "version": "4.2.605",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",