LPXXX Support stacked A/T Validators user/berick/lpxxx-stacked-at-validators
authorBill Erickson <berickxx@gmail.com>
Mon, 5 Oct 2020 15:13:56 +0000 (11:13 -0400)
committerBill Erickson <berickxx@gmail.com>
Mon, 5 Oct 2020 15:13:56 +0000 (11:13 -0400)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/src/sql/Pg/upgrade/XXXX.schema.at-stacked-validator-check.sql [new file with mode: 0644]

diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.at-stacked-validator-check.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.at-stacked-validator-check.sql
new file mode 100644 (file)
index 0000000..77cd56c
--- /dev/null
@@ -0,0 +1,33 @@
+BEGIN;
+
+-- SELECT evergreen.upgrade_deps_block_check('TODO', :eg_version);
+
+ALTER TABLE action_trigger.event_definition 
+    DROP CONSTRAINT IF EXISTS "event_definition_validator_fkey";
+DROP TRIGGER IF EXISTS valid_at_validator ON action_trigger.event_definition;
+
+CREATE OR REPLACE FUNCTION action_trigger.validator_is_valid() RETURNS TRIGGER AS $FUNK$
+DECLARE
+    validator_mod TEXT;
+BEGIN
+
+    /* Validators are a comma-separated list of module names */
+
+    FOR validator_mod IN SELECT REGEXP_SPLIT_TO_TABLE(NEW.validator, ',') LOOP
+        PERFORM * FROM action_trigger.validator WHERE module = validator_mod;
+        IF NOT FOUND THEN
+            RAISE EXCEPTION '% is not a valid validator', validator_mod;
+        END IF;
+    END LOOP;
+
+    RETURN NULL;
+END;
+$FUNK$ LANGUAGE PLPGSQL STABLE;
+
+CREATE CONSTRAINT TRIGGER valid_at_validator 
+    AFTER INSERT OR UPDATE ON action_trigger.event_definition
+    DEFERRABLE INITIALLY DEFERRED FOR EACH ROW
+    EXECUTE PROCEDURE action_trigger.validator_is_valid();
+
+COMMIT;
+