From aef7810e6b06c35114ab867e805aa75aa1424534 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Mon, 5 Oct 2020 11:13:56 -0400 Subject: [PATCH] LPXXX Support stacked A/T Validators Signed-off-by: Bill Erickson --- .../XXXX.schema.at-stacked-validator-check.sql | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.at-stacked-validator-check.sql 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 index 0000000000..77cd56c679 --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.at-stacked-validator-check.sql @@ -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; + -- 2.11.0