]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0879.function.vandelay_record_attr_to_flat.sql
LP#1806968 Teach Vandelay to pass correct auth tracker type
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0879.function.vandelay_record_attr_to_flat.sql
1 BEGIN;
2
3 SELECT evergreen.upgrade_deps_block_check('0879', :eg_version);
4
5 CREATE OR REPLACE FUNCTION vandelay._get_expr_push_jrow(
6     node vandelay.match_set_point,
7     tags_rstore HSTORE
8 ) RETURNS VOID AS $$
9 DECLARE
10     jrow        TEXT;
11     my_alias    TEXT;
12     op          TEXT;
13     tagkey      TEXT;
14     caseless    BOOL;
15     jrow_count  INT;
16     my_using    TEXT;
17     my_join     TEXT;
18 BEGIN
19     -- remember $1 is tags_rstore, and $2 is svf_rstore
20
21     caseless := FALSE;
22     SELECT COUNT(*) INTO jrow_count FROM _vandelay_tmp_jrows;
23     IF jrow_count > 0 THEN
24         my_using := ' USING (record)';
25         my_join := 'FULL OUTER JOIN';
26     ELSE
27         my_using := '';
28         my_join := 'FROM';
29     END IF;
30
31     IF node.tag IS NOT NULL THEN
32         caseless := (node.tag IN ('020', '022', '024'));
33         tagkey := node.tag;
34         IF node.subfield IS NOT NULL THEN
35             tagkey := tagkey || node.subfield;
36         END IF;
37     END IF;
38
39     IF node.negate THEN
40         IF caseless THEN
41             op := 'NOT LIKE';
42         ELSE
43             op := '<>';
44         END IF;
45     ELSE
46         IF caseless THEN
47             op := 'LIKE';
48         ELSE
49             op := '=';
50         END IF;
51     END IF;
52
53     my_alias := 'n' || node.id::TEXT;
54
55     jrow := my_join || ' (SELECT *, ';
56     IF node.tag IS NOT NULL THEN
57         jrow := jrow  || node.quality ||
58             ' AS quality FROM metabib.full_rec mfr WHERE mfr.tag = ''' ||
59             node.tag || '''';
60         IF node.subfield IS NOT NULL THEN
61             jrow := jrow || ' AND mfr.subfield = ''' ||
62                 node.subfield || '''';
63         END IF;
64         jrow := jrow || ' AND (';
65         jrow := jrow || vandelay._node_tag_comparisons(caseless, op, tags_rstore, tagkey);
66         jrow := jrow || ')) ' || my_alias || my_using || E'\n';
67     ELSE    -- svf
68         jrow := jrow || 'id AS record, ' || node.quality ||
69             ' AS quality FROM metabib.record_attr_flat mraf WHERE mraf.attr = ''' ||
70             node.svf || ''' AND mraf.value ' || op || ' $2->''' || node.svf || ''') ' ||
71             my_alias || my_using || E'\n';
72     END IF;
73     INSERT INTO _vandelay_tmp_jrows (j) VALUES (jrow);
74 END;
75 $$ LANGUAGE PLPGSQL;
76
77 COMMIT;
78