From: Michael Glass Date: Tue, 9 Jun 2015 23:20:59 +0000 (-0700) Subject: KMAIN 1765 Fix authority reingest causing invalid entries X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=344e89b83f1f46bcb1b54a78cad69f0f78f634e8;p=working%2FEvergreen.git KMAIN 1765 Fix authority reingest causing invalid entries Restore old authority heading extraction code which grabs authority browse headings properly and adds joiner text. new file: KCLS/sql/kmain-1765/KMAIN-1765-reingest-causing-false-browse-headings-rollback.sql new file: KCLS/sql/kmain-1765/KMAIN-1765-reingest-causing-false-browse-headings.sql Signed-off-by: Michael Glass --- diff --git a/KCLS/sql/kmain-1765/KMAIN-1765-reingest-causing-false-browse-headings-rollback.sql b/KCLS/sql/kmain-1765/KMAIN-1765-reingest-causing-false-browse-headings-rollback.sql new file mode 100644 index 0000000000..ae6ab2eb6f --- /dev/null +++ b/KCLS/sql/kmain-1765/KMAIN-1765-reingest-causing-false-browse-headings-rollback.sql @@ -0,0 +1,84 @@ +-- Function: authority.simple_heading_set(text) + +DROP FUNCTION authority.simple_heading_set(text); + +CREATE OR REPLACE FUNCTION authority.simple_heading_set(marcxml text) + RETURNS SETOF authority.simple_heading AS +$BODY$ +DECLARE + res authority.simple_heading%ROWTYPE; + acsaf authority.control_set_authority_field%ROWTYPE; + tag_used TEXT; + nfi_used TEXT; + sf TEXT; + cset INT; + heading_text TEXT; + sort_text TEXT; + tmp_text TEXT; + tmp_xml TEXT; + first_sf BOOL; + auth_id INT DEFAULT oils_xpath_string('//*[@tag="901"]/*[local-name()="subfield" and @code="c"]', marcxml)::INT; +BEGIN + + res.record := auth_id; + + SELECT control_set INTO cset + FROM authority.control_set_authority_field + WHERE tag IN ( SELECT UNNEST(XPATH('//*[starts-with(@tag,"1")]/@tag',marcxml::XML)::TEXT[]) ) + LIMIT 1; + + FOR acsaf IN SELECT * FROM authority.control_set_authority_field WHERE control_set = cset LOOP + + res.atag := acsaf.id; + tag_used := acsaf.tag; + nfi_used := acsaf.nfi; + + FOR tmp_xml IN SELECT UNNEST(XPATH('//*[@tag="'||tag_used||'"]', marcxml::XML)) LOOP + + heading_text := public.naco_normalize( + COALESCE( + oils_xpath_string('//*[contains("'||acsaf.sf_list||'",@code)]',tmp_xml::TEXT, ' '), + '' + ) + ); + + IF nfi_used IS NOT NULL THEN + + sort_text := SUBSTRING( + heading_text FROM + COALESCE( + NULLIF( + REGEXP_REPLACE( + oils_xpath_string('./@ind'||nfi_used, tmp_xml::TEXT), + $$\D+$$, + '', + 'g' + ), + '' + )::INT, + 0 + ) + 1 + ); + + ELSE + sort_text := heading_text; + END IF; + + IF heading_text IS NOT NULL AND heading_text <> '' THEN + res.value := heading_text; + res.sort_value := sort_text; + RETURN NEXT res; + END IF; + + END LOOP; + + END LOOP; + + RETURN; +END; +$BODY$ + LANGUAGE plpgsql IMMUTABLE + COST 100 + ROWS 1000; +ALTER FUNCTION authority.simple_heading_set(text) + OWNER TO evergreen; diff --git a/KCLS/sql/kmain-1765/KMAIN-1765-reingest-causing-false-browse-headings.sql b/KCLS/sql/kmain-1765/KMAIN-1765-reingest-causing-false-browse-headings.sql new file mode 100644 index 0000000000..d14d063d05 --- /dev/null +++ b/KCLS/sql/kmain-1765/KMAIN-1765-reingest-causing-false-browse-headings.sql @@ -0,0 +1,83 @@ +-- Function: authority.simple_heading_set(text) + +DROP FUNCTION authority.simple_heading_set(text); + +CREATE OR REPLACE FUNCTION authority.simple_heading_set(marcxml text) + RETURNS SETOF authority.simple_heading AS +$BODY$ +DECLARE + res authority.simple_heading%ROWTYPE; + acsaf authority.control_set_authority_field%ROWTYPE; + tag_used TEXT; + nfi_used TEXT; + sf TEXT; + cset INT; + heading_text TEXT; + joiner_text TEXT; + sort_text TEXT; + tmp_text TEXT; + tmp_xml TEXT; + first_sf BOOL; + auth_id INT DEFAULT COALESCE(NULLIF(oils_xpath_string('//*[@tag="901"]/*[local-name()="subfield" and @code="c"]', marcxml), ''), '0')::INT; +BEGIN + --ver1.0 + SELECT control_set INTO cset FROM authority.record_entry WHERE id = auth_id; + + IF cset IS NULL THEN + SELECT control_set INTO cset + FROM authority.control_set_authority_field + WHERE tag IN ( SELECT UNNEST(XPATH('//*[starts-with(@tag,"1")]/@tag',marcxml::XML)::TEXT[])) + LIMIT 1; + END IF; + + res.record := auth_id; + + FOR acsaf IN SELECT * FROM authority.control_set_authority_field WHERE control_set = cset LOOP + + res.atag := acsaf.id; + tag_used := acsaf.tag; + nfi_used := acsaf.nfi; + joiner_text := COALESCE(acsaf.joiner, ' '); + + FOR tmp_xml IN SELECT UNNEST(XPATH('//*[@tag="'||tag_used||'"]', marcxml::XML)) LOOP + + heading_text := COALESCE( + oils_xpath_string('./*[contains("'||acsaf.display_sf_list||'",@code)]', tmp_xml::TEXT, joiner_text), + '' + ); + IF nfi_used IS NOT NULL THEN + sort_text := SUBSTRING( + heading_text FROM + COALESCE( + NULLIF( + REGEXP_REPLACE( + oils_xpath_string('./@ind'||nfi_used, tmp_xml::TEXT), + $$\D+$$, + '', + 'g' + ), + '' + )::INT, + 0 + ) + 1 + ); + ELSE + sort_text := heading_text; + END IF; + IF heading_text IS NOT NULL AND heading_text <> '' THEN + res.value := heading_text; + res.sort_value := public.naco_normalize(sort_text); + res.index_vector = to_tsvector('keyword'::regconfig, res.sort_value); + RETURN NEXT res; + END IF; + END LOOP; + END LOOP; + + RETURN; +END; +$BODY$ + LANGUAGE plpgsql IMMUTABLE + COST 100 + ROWS 1000; +ALTER FUNCTION authority.simple_heading_set(text) + OWNER TO evergreen;