From bdf02a6d84ea7438a260a49766f1d6fd730d2f85 Mon Sep 17 00:00:00 2001 From: prostgles Date: Thu, 16 May 2024 17:19:14 +0300 Subject: [PATCH] fix unsubscribe disables triggers --- lib/PubSubManager/getInitQuery.ts | 8 +++++--- package-lock.json | 4 ++-- package.json | 2 +- tests/isomorphicQueries.spec.ts | 30 ++++++++++++++++++++++++------ tests/server/package-lock.json | 2 +- 5 files changed, 33 insertions(+), 13 deletions(-) diff --git a/lib/PubSubManager/getInitQuery.ts b/lib/PubSubManager/getInitQuery.ts index 7bc19f02..49edc30b 100644 --- a/lib/PubSubManager/getInitQuery.ts +++ b/lib/PubSubManager/getInitQuery.ts @@ -244,7 +244,7 @@ BEGIN ) || COALESCE(( - SELECT ', ' || string_agg(format(E' %I AS ( \n %s \n ) ', related_view_name, related_view_def), ', ') + SELECT ', ' || string_agg(format(E' %s AS ( \n %s \n ) ', related_view_name, related_view_def), ', ') FROM ( SELECT DISTINCT related_view_name, related_view_def FROM prostgles.v_triggers @@ -356,7 +356,9 @@ BEGIN --RAISE NOTICE 'DELETE trigger_add_remove_func table: % ', ' ' || COALESCE((SELECT concat_ws(' ', string_agg(table_name, ' & '), count(*), min(inserted) ) FROM prostgles.app_triggers) , ' 0 '); --RAISE NOTICE 'DELETE trigger_add_remove_func old_table: % ', '' || COALESCE((SELECT concat_ws(' ', string_agg(table_name, ' & '), count(*), min(inserted) ) FROM old_table), ' 0 '); - select count(*) from old_table into changed_triggers_count; + SELECT count(*) + FROM old_table + INTO changed_triggers_count; /* Disable actual triggers if needed */ FOR trw IN @@ -427,7 +429,7 @@ BEGIN 'prostgles_triggers_' || trw.table_name || '_update', 'prostgles_triggers_' || trw.table_name || '_delete' ) - ) = 3 AND false + ) = 3 THEN query := concat_ws(E'\n', format(' ALTER TABLE %s ENABLE TRIGGER %I ;', trw.table_name, 'prostgles_triggers_' || trw.table_name || '_insert'), diff --git a/package-lock.json b/package-lock.json index 9c72c4a2..35403a90 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "prostgles-server", - "version": "4.2.65", + "version": "4.2.66", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "prostgles-server", - "version": "4.2.65", + "version": "4.2.66", "license": "MIT", "dependencies": { "bluebird": "^3.7.2", diff --git a/package.json b/package.json index 9f1546ae..9b508f8f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "prostgles-server", - "version": "4.2.65", + "version": "4.2.66", "description": "", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/tests/isomorphicQueries.spec.ts b/tests/isomorphicQueries.spec.ts index 82f5e804..4049f42a 100644 --- a/tests/isomorphicQueries.spec.ts +++ b/tests/isomorphicQueries.spec.ts @@ -7,7 +7,7 @@ import { //@ts-ignore describe } from "node:test"; -import { pickKeys } from "prostgles-types"; +import { SubscriptionHandler, pickKeys } from "prostgles-types"; export const isomorphicQueries = async (db: DBOFullyTyped | DBHandlerClient, log: (msg: string, extra?: any) => void) => { @@ -466,6 +466,27 @@ export const isomorphicQueries = async (db: DBOFullyTyped | DBHandlerClient, log assert.equal(+res, 1) }); + + const testToEnsureTriggersAreDisabled = async (sub: SubscriptionHandler, table_name: string) => { + const getTableTriggers = async (table_name: string) => { + return await db.sql?.(` + SELECT tgname, tgenabled = 'O' as enabled + FROM pg_catalog.pg_trigger + WHERE tgname like format('prostgles_triggers_%s_', \${table_name}) || '%' + `, + { table_name }, + { returnType: "rows" } + ) as { tgname: string; enabled: boolean; }[]; + } + await sub.unsubscribe(); + let validTriggers = await getTableTriggers(table_name) + assert.equal(validTriggers.filter(t => t.enabled).length, 3); + await db.sql?.(`DELETE FROM prostgles.app_triggers`, []); // WHERE table_name = $1 + validTriggers = await getTableTriggers(table_name) + assert.equal(validTriggers.length, 3); + assert.equal(validTriggers.filter(t => t.enabled).length, 0); + } + await test("subscribe", async () => { await tryRunP("subscribe", async (resolve, reject) => { await db.various.insert!({ id: 99 }); @@ -474,7 +495,7 @@ export const isomorphicQueries = async (db: DBOFullyTyped | DBHandlerClient, log if(item && item.name === "zz3zz3"){ await db.various.delete!({ name: "zz3zz3" }); - await sub.unsubscribe(); + await testToEnsureTriggersAreDisabled(sub, "various"); resolve(true) } }); @@ -490,9 +511,6 @@ export const isomorphicQueries = async (db: DBOFullyTyped | DBHandlerClient, log await db.various.insert!({ id: 99 }); const start = Date.now(); // name: "zz3zz" const sub = await db.various.subscribeOne!({ id: 99 }, { throttle: 1700 }, async item => { - // const item = items[0] - // console.log(item) - const now = Date.now(); if(item && item.name === "zz3zz2" && now - start > 1600 && now - start < 1800){ await db.various.delete!({ name: "zz3zz2" }); @@ -1005,7 +1023,7 @@ export const isomorphicQueries = async (db: DBOFullyTyped | DBHandlerClient, log if(runs < 2){ return; } - await sub.unsubscribe(); + await testToEnsureTriggersAreDisabled(sub, `"""quoted0"""`); resolve(true); } }); diff --git a/tests/server/package-lock.json b/tests/server/package-lock.json index ac41ae2b..5d25f17c 100644 --- a/tests/server/package-lock.json +++ b/tests/server/package-lock.json @@ -21,7 +21,7 @@ }, "../..": { "name": "prostgles-server", - "version": "4.2.65", + "version": "4.2.66", "license": "MIT", "dependencies": { "bluebird": "^3.7.2",