1 --Upgrade Script for 2.5.0 to 2.5.1
2 \set eg_version '''2.5.1'''
4 INSERT INTO config.upgrade_log (version, applied_to) VALUES ('2.5.1', :eg_version);
6 SELECT evergreen.upgrade_deps_block_check('0848', :eg_version);
8 CREATE OR REPLACE FUNCTION authority.normalize_heading( marcxml TEXT, no_thesaurus BOOL ) RETURNS TEXT AS $func$
10 acsaf authority.control_set_authority_field%ROWTYPE;
21 auth_id INT DEFAULT COALESCE(NULLIF(oils_xpath_string('//*[@tag="901"]/*[local-name()="subfield" and @code="c"]', marcxml), ''), '0')::INT;
23 SELECT control_set INTO cset FROM authority.record_entry WHERE id = auth_id;
26 SELECT control_set INTO cset
27 FROM authority.control_set_authority_field
28 WHERE tag IN ( SELECT UNNEST(XPATH('//*[starts-with(@tag,"1")]/@tag',marcxml::XML)::TEXT[]))
32 thes_code := vandelay.marc21_extract_fixed_field(marcxml,'Subj');
33 IF thes_code IS NULL THEN
35 ELSIF thes_code = 'z' THEN
36 thes_code := COALESCE( oils_xpath_string('//*[@tag="040"]/*[@code="f"][1]', marcxml), '' );
40 FOR acsaf IN SELECT * FROM authority.control_set_authority_field WHERE control_set = cset AND main_entry IS NULL LOOP
41 tag_used := acsaf.tag;
42 nfi_used := acsaf.nfi;
45 FOR tag_node IN SELECT unnest(oils_xpath('//*[@tag="'||tag_used||'"]',marcxml)) LOOP
46 FOR sf_node IN SELECT unnest(oils_xpath('//*[contains("'||acsaf.sf_list||'",@code)]',tag_node)) LOOP
48 tmp_text := oils_xpath_string('.', sf_node);
49 sf := oils_xpath_string('./@code', sf_node);
51 IF first_sf AND tmp_text IS NOT NULL AND nfi_used IS NOT NULL THEN
53 tmp_text := SUBSTRING(
58 oils_xpath_string('./@ind'||nfi_used, tag_node),
73 IF tmp_text IS NOT NULL AND tmp_text <> '' THEN
74 heading_text := heading_text || E'\u2021' || sf || ' ' || tmp_text;
78 EXIT WHEN heading_text <> '';
81 EXIT WHEN heading_text <> '';
84 IF heading_text <> '' THEN
85 IF no_thesaurus IS TRUE THEN
86 heading_text := tag_used || ' ' || public.naco_normalize(heading_text);
88 heading_text := tag_used || '_' || COALESCE(nfi_used,'-') || '_' || thes_code || ' ' || public.naco_normalize(heading_text);
91 heading_text := 'NOHEADING_' || thes_code || ' ' || MD5(marcxml);
96 $func$ LANGUAGE PLPGSQL IMMUTABLE;
98 CREATE OR REPLACE FUNCTION authority.simple_heading_set( marcxml TEXT ) RETURNS SETOF authority.simple_heading AS $func$
100 res authority.simple_heading%ROWTYPE;
101 acsaf authority.control_set_authority_field%ROWTYPE;
111 auth_id INT DEFAULT oils_xpath_string('//*[@tag="901"]/*[local-name()="subfield" and @code="c"]', marcxml)::INT;
114 res.record := auth_id;
116 SELECT control_set INTO cset
117 FROM authority.control_set_authority_field
118 WHERE tag IN ( SELECT UNNEST(XPATH('//*[starts-with(@tag,"1")]/@tag',marcxml::XML)::TEXT[]) )
121 FOR acsaf IN SELECT * FROM authority.control_set_authority_field WHERE control_set = cset LOOP
123 res.atag := acsaf.id;
124 tag_used := acsaf.tag;
125 nfi_used := acsaf.nfi;
127 FOR tmp_xml IN SELECT UNNEST(XPATH('//*[@tag="'||tag_used||'"]', marcxml::XML)) LOOP
129 heading_text := public.naco_normalize(
131 oils_xpath_string('//*[contains("'||acsaf.sf_list||'",@code)]',tmp_xml::TEXT, ' '),
136 IF nfi_used IS NOT NULL THEN
138 sort_text := SUBSTRING(
143 oils_xpath_string('./@ind'||nfi_used, tmp_xml::TEXT),
155 sort_text := heading_text;
158 IF heading_text IS NOT NULL AND heading_text <> '' THEN
159 res.value := heading_text;
160 res.sort_value := sort_text;
170 $func$ LANGUAGE PLPGSQL IMMUTABLE;