LP#1506534: Stamping upgrade script for new z3950_attr_type check
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0963.schema.config_z3950_attr_check.sql
1 BEGIN;
2
3 SELECT evergreen.upgrade_deps_block_check('0963', :eg_version);
4
5 ALTER TABLE config.z3950_index_field_map DROP CONSTRAINT "valid_z3950_attr_type";
6
7 DROP FUNCTION evergreen.z3950_attr_name_is_valid(text);
8
9 CREATE OR REPLACE FUNCTION evergreen.z3950_attr_name_is_valid() RETURNS TRIGGER AS $func$
10 BEGIN
11
12   PERFORM * FROM config.z3950_attr WHERE name = NEW.z3950_attr_type;
13
14   IF FOUND THEN
15     RETURN NULL;
16   END IF;
17
18   RAISE EXCEPTION '% is not a valid Z39.50 attribute type', NEW.z3950_attr_type;
19
20 END;
21 $func$ LANGUAGE PLPGSQL STABLE;
22
23 COMMENT ON FUNCTION evergreen.z3950_attr_name_is_valid() IS $$
24 Used by a config.z3950_index_field_map constraint trigger
25 to verify z3950_attr_type maps.
26 $$;
27
28 CREATE CONSTRAINT TRIGGER valid_z3950_attr_type AFTER INSERT OR UPDATE ON config.z3950_index_field_map
29   DEFERRABLE INITIALLY DEFERRED FOR EACH ROW WHEN (NEW.z3950_attr_type IS NOT NULL)
30   EXECUTE PROCEDURE evergreen.z3950_attr_name_is_valid();
31
32 COMMIT;
33