LP#1743650: Bib vis testing needs different handling
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / XXXX.function.special-bib-vis-handling.sql
1 BEGIN;
2
3 CREATE OR REPLACE FUNCTION asset.patron_default_visibility_mask () RETURNS TABLE (b_attrs TEXT, c_attrs TEXT)  AS $f$
4 DECLARE
5     copy_flags      TEXT; -- "c" attr
6
7     owning_lib      TEXT; -- "c" attr
8     circ_lib        TEXT; -- "c" attr
9     status          TEXT; -- "c" attr
10     location        TEXT; -- "c" attr
11     location_group  TEXT; -- "c" attr
12
13     luri_org        TEXT; -- "b" attr
14     bib_sources     TEXT; -- "b" attr
15
16     bib_tests       TEXT := '';
17 BEGIN
18     copy_flags      := asset.all_visible_flags(); -- Will always have at least one
19
20     owning_lib      := NULLIF(asset.owning_lib_default(),'!()');
21
22     circ_lib        := NULLIF(asset.circ_lib_default(),'!()');
23     status          := NULLIF(asset.status_default(),'!()');
24     location        := NULLIF(asset.location_default(),'!()');
25     location_group  := NULLIF(asset.location_group_default(),'!()');
26
27     -- LURIs will be handled at the perl layer directly
28     -- luri_org        := NULLIF(asset.luri_org_default(),'!()');
29     bib_sources     := NULLIF(asset.bib_source_default(),'()');
30
31
32     IF luri_org IS NOT NULL AND bib_sources IS NOT NULL THEN
33         bib_tests := '('||ARRAY_TO_STRING( ARRAY[luri_org,bib_sources], '|')||')&('||luri_org||')&';
34     ELSIF luri_org IS NOT NULL THEN
35         bib_tests := luri_org || '&';
36     ELSIF bib_sources IS NOT NULL THEN
37         bib_tests := bib_sources || '|';
38     END IF;
39
40     RETURN QUERY SELECT bib_tests,
41         '('||ARRAY_TO_STRING(
42             ARRAY[copy_flags,owning_lib,circ_lib,status,location,location_group]::TEXT[],
43             '&'
44         )||')';
45 END;
46 $f$ LANGUAGE PLPGSQL STABLE ROWS 1;
47
48 COMMIT;
49