LP#1568195: fix retrieving big OUS batches
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / XXXX.schema.make_ous_batch_retrieve_func_nonvariadic.sql
1 BEGIN;
2
3 --SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version);
4
5 -- note: it is not necessary to explicitly drop the previous VARIADIC
6 -- version of this stored procedure; create or replace function...
7 -- suffices.
8 CREATE OR REPLACE FUNCTION actor.org_unit_ancestor_setting_batch( org_id INT, setting_names TEXT[] ) RETURNS SETOF actor.org_unit_setting AS $$
9 DECLARE
10     setting RECORD;
11     setting_name TEXT;
12     cur_org INT;
13 BEGIN
14     FOREACH setting_name IN ARRAY setting_names
15     LOOP
16         cur_org := org_id;
17         LOOP
18             SELECT INTO setting * FROM actor.org_unit_setting WHERE org_unit = cur_org AND name = setting_name;
19             IF FOUND THEN
20                 RETURN NEXT setting;
21                 EXIT;
22             END IF;
23             SELECT INTO cur_org parent_ou FROM actor.org_unit WHERE id = cur_org;
24             EXIT WHEN cur_org IS NULL;
25         END LOOP;
26     END LOOP;
27     RETURN;
28 END;
29 $$ LANGUAGE plpgsql STABLE;
30
31 COMMENT ON FUNCTION actor.org_unit_ancestor_setting_batch( INT,  TEXT[] ) IS $$
32 For each setting name passed, search "up" the org_unit tree until
33 we find the first occurrence of an org_unit_setting with the given name.
34 $$;
35
36 COMMIT;