diff --git a/packages/meta/db-meta-schema/revert/schemas/collections_public/schema.sql b/packages/meta/db-meta-schema/revert/schemas/collections_public/schema.sql index ce20108b..058fcd32 100644 --- a/packages/meta/db-meta-schema/revert/schemas/collections_public/schema.sql +++ b/packages/meta/db-meta-schema/revert/schemas/collections_public/schema.sql @@ -1,6 +1,6 @@ BEGIN; -DROP SCHEMA collections_public; +DROP SCHEMA collections_public CASCADE; COMMIT; diff --git a/packages/security/default-roles/revert/roles/administrator/role.sql b/packages/security/default-roles/revert/roles/administrator/role.sql index 7d37b49d..9568b117 100644 --- a/packages/security/default-roles/revert/roles/administrator/role.sql +++ b/packages/security/default-roles/revert/roles/administrator/role.sql @@ -2,6 +2,21 @@ BEGIN; -DROP ROLE administrator; +DO $revert$ +BEGIN + IF EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'administrator') THEN + REVOKE anonymous FROM administrator; + REVOKE authenticated FROM administrator; + REASSIGN OWNED BY administrator TO CURRENT_USER; + DROP OWNED BY administrator CASCADE; + BEGIN + DROP ROLE administrator; + EXCEPTION + WHEN dependent_objects_still_exist THEN + RAISE NOTICE 'Skipping drop of administrator role because dependent objects remain elsewhere'; + END; + END IF; +END; +$revert$; COMMIT; diff --git a/packages/security/default-roles/revert/roles/anonymous/role.sql b/packages/security/default-roles/revert/roles/anonymous/role.sql index 7fe39a3d..111a5f70 100644 --- a/packages/security/default-roles/revert/roles/anonymous/role.sql +++ b/packages/security/default-roles/revert/roles/anonymous/role.sql @@ -2,6 +2,19 @@ BEGIN; -DROP ROLE anonymous; +DO $revert$ +BEGIN + IF EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'anonymous') THEN + REASSIGN OWNED BY anonymous TO CURRENT_USER; + DROP OWNED BY anonymous CASCADE; + BEGIN + DROP ROLE anonymous; + EXCEPTION + WHEN dependent_objects_still_exist THEN + RAISE NOTICE 'Skipping drop of anonymous role because dependent objects remain elsewhere'; + END; + END IF; +END; +$revert$; COMMIT; diff --git a/packages/security/default-roles/revert/roles/authenticated/role.sql b/packages/security/default-roles/revert/roles/authenticated/role.sql index fc2d088c..03cbb9d8 100644 --- a/packages/security/default-roles/revert/roles/authenticated/role.sql +++ b/packages/security/default-roles/revert/roles/authenticated/role.sql @@ -2,6 +2,19 @@ BEGIN; -DROP ROLE authenticated; +DO $revert$ +BEGIN + IF EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'authenticated') THEN + REASSIGN OWNED BY authenticated TO CURRENT_USER; + DROP OWNED BY authenticated CASCADE; + BEGIN + DROP ROLE authenticated; + EXCEPTION + WHEN dependent_objects_still_exist THEN + RAISE NOTICE 'Skipping drop of authenticated role because dependent objects remain elsewhere'; + END; + END IF; +END; +$revert$; COMMIT; diff --git a/packages/utils/verify/deploy/procedures/verify_function.sql b/packages/utils/verify/deploy/procedures/verify_function.sql index 823e1e2b..b74eaf42 100644 --- a/packages/utils/verify/deploy/procedures/verify_function.sql +++ b/packages/utils/verify/deploy/procedures/verify_function.sql @@ -9,12 +9,26 @@ CREATE FUNCTION verify_function (_name text, _user text DEFAULT NULL) AS $$ DECLARE check_user text; + func_oid oid; BEGIN IF (_user IS NOT NULL) THEN check_user = _user; ELSE check_user = CURRENT_USER; END IF; + IF position('(' IN _name) > 0 THEN + func_oid = to_regprocedure(_name); + IF func_oid IS NULL THEN + RAISE EXCEPTION 'Nonexistent function --> %', _name + USING HINT = 'Please check'; + END IF; + IF has_function_privilege(check_user, func_oid, 'execute') THEN + RETURN TRUE; + ELSE + RAISE EXCEPTION 'Nonexistent function --> %', _name + USING HINT = 'Please check'; + END IF; + END IF; IF EXISTS ( SELECT has_function_privilege(check_user, p.oid, 'execute') @@ -34,4 +48,3 @@ $$ LANGUAGE 'plpgsql' IMMUTABLE; COMMIT; - diff --git a/scripts/test-all-packages.js b/scripts/test-all-packages.js index bffeab04..f1e57e80 100755 --- a/scripts/test-all-packages.js +++ b/scripts/test-all-packages.js @@ -128,7 +128,7 @@ function runPgpmCommand(command, dbname, packageName, packagePath, projectRoot) return result.success; } -async function testPackage(packagePath, projectRoot, useDocker) { +function testPackage(packagePath, projectRoot, useDocker) { const packageName = path.basename(packagePath); const dbname = dbsafename(packagePath);