]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0212.schema.acq.lineitem_attr_ingest_multivalue.sql
LP#1248734: (follow-up) add new indexes to schema update script
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0212.schema.acq.lineitem_attr_ingest_multivalue.sql
1
2 BEGIN;
3
4 INSERT INTO config.upgrade_log (version) VALUES ('0212');
5
6 CREATE OR REPLACE FUNCTION public.ingest_acq_marc ( ) RETURNS TRIGGER AS $function$
7 DECLARE
8     value       TEXT;
9     atype       TEXT;
10     prov        INT;
11     pos         INT;
12     adef        RECORD;
13     xpath_string    TEXT;
14 BEGIN
15     FOR adef IN SELECT *,tableoid FROM acq.lineitem_attr_definition LOOP
16  
17         SELECT relname::TEXT INTO atype FROM pg_class WHERE oid = adef.tableoid;
18  
19         IF (atype NOT IN ('lineitem_usr_attr_definition','lineitem_local_attr_definition')) THEN
20             IF (atype = 'lineitem_provider_attr_definition') THEN
21                 SELECT provider INTO prov FROM acq.lineitem_provider_attr_definition WHERE id = adef.id;
22                 CONTINUE WHEN NEW.provider IS NULL OR prov <> NEW.provider;
23             END IF;
24  
25             IF (atype = 'lineitem_provider_attr_definition') THEN
26                 SELECT xpath INTO xpath_string FROM acq.lineitem_provider_attr_definition WHERE id = adef.id;
27             ELSIF (atype = 'lineitem_marc_attr_definition') THEN
28                 SELECT xpath INTO xpath_string FROM acq.lineitem_marc_attr_definition WHERE id = adef.id;
29             ELSIF (atype = 'lineitem_generated_attr_definition') THEN
30                 SELECT xpath INTO xpath_string FROM acq.lineitem_generated_attr_definition WHERE id = adef.id;
31             END IF;
32  
33             xpath_string := REGEXP_REPLACE(xpath_string,$re$//?text\(\)$$re$,'');
34  
35             pos := 1;
36  
37             LOOP
38                 SELECT extract_acq_marc_field(id, xpath_string || '[' || pos || ']', adef.remove) INTO value FROM acq.lineitem WHERE id = NEW.id;
39  
40                 IF (value IS NOT NULL AND value <> '') THEN
41                     INSERT INTO acq.lineitem_attr (lineitem, definition, attr_type, attr_name, attr_value)
42                         VALUES (NEW.id, adef.id, atype, adef.code, value);
43                 ELSE
44                     EXIT;
45                 END IF;
46  
47                 pos := pos + 1;
48             END LOOP;
49  
50         END IF;
51  
52     END LOOP;
53  
54     RETURN NULL;
55 END;
56 $function$ LANGUAGE PLPGSQL;
57
58 COMMIT;