]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0354.schema.vandelay_template_overlay_fix.sql
Stamped upgrade script for "lp 823496: do not fail to index personal names that have...
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0354.schema.vandelay_template_overlay_fix.sql
1 BEGIN;
2
3 INSERT INTO config.upgrade_log (version) VALUES ('0354'); -- berick
4
5 CREATE OR REPLACE FUNCTION vandelay.template_overlay_bib_record ( v_marc TEXT, eg_id BIGINT, merge_profile_id INT ) RETURNS BOOL AS $$
6 DECLARE
7     merge_profile   vandelay.merge_profile%ROWTYPE;
8     dyn_profile     vandelay.compile_profile%ROWTYPE;
9     editor_string   TEXT;
10     editor_id       INT;
11     source_marc     TEXT;
12     target_marc     TEXT;
13     eg_marc         TEXT;
14     replace_rule    TEXT;
15     match_count     INT;
16 BEGIN
17
18     SELECT  b.marc INTO eg_marc
19       FROM  biblio.record_entry b
20       WHERE b.id = eg_id
21       LIMIT 1;
22
23     IF eg_marc IS NULL OR v_marc IS NULL THEN
24         -- RAISE NOTICE 'no marc for template or bib record';
25         RETURN FALSE;
26     END IF;
27
28     dyn_profile := vandelay.compile_profile( v_marc );
29
30     IF merge_profile_id IS NOT NULL THEN
31         SELECT * INTO merge_profile FROM vandelay.merge_profile WHERE id = merge_profile_id;
32         IF FOUND THEN
33             dyn_profile.add_rule := BTRIM( dyn_profile.add_rule || ',' || COALESCE(merge_profile.add_spec,''), ',');
34             dyn_profile.strip_rule := BTRIM( dyn_profile.strip_rule || ',' || COALESCE(merge_profile.strip_spec,''), ',');
35             dyn_profile.replace_rule := BTRIM( dyn_profile.replace_rule || ',' || COALESCE(merge_profile.replace_spec,''), ',');
36             dyn_profile.preserve_rule := BTRIM( dyn_profile.preserve_rule || ',' || COALESCE(merge_profile.preserve_spec,''), ',');
37         END IF;
38     END IF;
39
40     IF dyn_profile.replace_rule <> '' AND dyn_profile.preserve_rule <> '' THEN
41         -- RAISE NOTICE 'both replace [%] and preserve [%] specified', dyn_profile.replace_rule, dyn_profile.preserve_rule;
42         RETURN FALSE;
43     END IF;
44
45     IF dyn_profile.replace_rule <> '' THEN
46         source_marc = v_marc;
47         target_marc = eg_marc;
48         replace_rule = dyn_profile.replace_rule;
49     ELSE
50         source_marc = eg_marc;
51         target_marc = v_marc;
52         replace_rule = dyn_profile.preserve_rule;
53     END IF;
54
55     UPDATE  biblio.record_entry
56       SET   marc = vandelay.merge_record_xml( target_marc, source_marc, dyn_profile.add_rule, replace_rule, dyn_profile.strip_rule )
57       WHERE id = eg_id;
58
59     IF NOT FOUND THEN
60         -- RAISE NOTICE 'update of biblio.record_entry failed';
61         RETURN FALSE;
62     END IF;
63
64     RETURN TRUE;
65
66 END;
67 $$ LANGUAGE PLPGSQL;
68
69 COMMIT;