]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0518.schema.extract_fixed_fields_from_leader.sql
LP1079041 - making state not required (continued)
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0518.schema.extract_fixed_fields_from_leader.sql
1 BEGIN;
2
3 INSERT INTO config.upgrade_log (version) VALUES ('0518'); -- miker
4 CREATE OR REPLACE FUNCTION vandelay.marc21_extract_fixed_field( marc TEXT, ff TEXT ) RETURNS TEXT AS $func$
5 DECLARE
6     rtype       TEXT;
7     ff_pos      RECORD;
8     tag_data    RECORD;
9     val         TEXT;
10 BEGIN
11     rtype := (vandelay.marc21_record_type( marc )).code;
12     FOR ff_pos IN SELECT * FROM config.marc21_ff_pos_map WHERE fixed_field = ff AND rec_type = rtype ORDER BY tag DESC LOOP
13         IF ff_pos.tag = 'ldr' THEN
14             val := oils_xpath_string('//*[local-name()="leader"]', marc);
15             IF val IS NOT NULL THEN
16                 val := SUBSTRING( val, ff_pos.start_pos + 1, ff_pos.length );
17                 RETURN val;
18             END IF;
19         ELSE 
20             FOR tag_data IN SELECT value FROM UNNEST( oils_xpath( '//*[@tag="' || UPPER(ff_pos.tag) || '"]/text()', marc ) ) x(value) LOOP
21                 val := SUBSTRING( tag_data.value, ff_pos.start_pos + 1, ff_pos.length );
22                 RETURN val;
23             END LOOP;
24         END IF;
25         val := REPEAT( ff_pos.default_val, ff_pos.length );
26         RETURN val;
27     END LOOP;
28
29     RETURN NULL;
30 END;
31 $func$ LANGUAGE PLPGSQL;
32
33 COMMIT;
34