return only the one applicable OU setting value
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / XXXX.fix_aous_lookup.sql
1 -- Evergreen DB patch XXXX.fix_aous_lookup.sql
2 --
3 -- Correct actor.org_unit_ancestor_setting so that it returns
4 -- at most one setting value, rather than the entire set
5 -- of values defined for the OU and its ancestors.
6 --
7 BEGIN;
8
9
10 -- check whether patch can be applied
11 SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version);
12
13 -- FIXME: add/check SQL statements to perform the upgrade
14 CREATE OR REPLACE FUNCTION actor.org_unit_ancestor_setting( setting_name TEXT, org_id INT ) RETURNS SETOF actor.org_unit_setting AS $$
15 DECLARE
16     setting RECORD;
17     cur_org INT;
18 BEGIN
19     cur_org := org_id;
20     LOOP
21         SELECT INTO setting * FROM actor.org_unit_setting WHERE org_unit = cur_org AND name = setting_name;
22         IF FOUND THEN
23             RETURN NEXT setting;
24             EXIT;
25         END IF;
26         SELECT INTO cur_org parent_ou FROM actor.org_unit WHERE id = cur_org;
27         EXIT WHEN cur_org IS NULL;
28     END LOOP;
29     RETURN;
30 END;
31 $$ LANGUAGE plpgsql STABLE ROWS 1;
32
33
34 COMMIT;