]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0946.schema.batch_settings_retrieve_function.sql
LP#1643709: Stamping upgrade scripts
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0946.schema.batch_settings_retrieve_function.sql
1 BEGIN;
2
3 SELECT evergreen.upgrade_deps_block_check('0946', :eg_version);
4
5 CREATE OR REPLACE FUNCTION actor.org_unit_ancestor_setting_batch( org_id INT, VARIADIC setting_names TEXT[] ) RETURNS SETOF actor.org_unit_setting AS $$
6 DECLARE
7     setting RECORD;
8     setting_name TEXT;
9     cur_org INT;
10 BEGIN
11     FOREACH setting_name IN ARRAY setting_names
12     LOOP
13         cur_org := org_id;
14         LOOP
15             SELECT INTO setting * FROM actor.org_unit_setting WHERE org_unit = cur_org AND name = setting_name;
16             IF FOUND THEN
17                 RETURN NEXT setting;
18                 EXIT;
19             END IF;
20             SELECT INTO cur_org parent_ou FROM actor.org_unit WHERE id = cur_org;
21             EXIT WHEN cur_org IS NULL;
22         END LOOP;
23     END LOOP;
24     RETURN;
25 END;
26 $$ LANGUAGE plpgsql STABLE;
27
28 COMMENT ON FUNCTION actor.org_unit_ancestor_setting_batch( INT, VARIADIC TEXT[] ) IS $$
29 For each setting name passed, search "up" the org_unit tree until
30 we find the first occurrence of an org_unit_setting with the given name.
31 $$;
32
33 COMMIT;