From: Mike Rylander Date: Tue, 26 Nov 2013 17:44:41 +0000 (-0500) Subject: Push 0848 into the baseline schema X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=f68328d52fb62c3d401186f2d6da08c24d9ae914;p=Evergreen.git Push 0848 into the baseline schema Signed-off-by: Mike Rylander --- diff --git a/Open-ILS/src/sql/Pg/011.schema.authority.sql b/Open-ILS/src/sql/Pg/011.schema.authority.sql index 4ac6b2cdea..071e7c39f6 100644 --- a/Open-ILS/src/sql/Pg/011.schema.authority.sql +++ b/Open-ILS/src/sql/Pg/011.schema.authority.sql @@ -152,12 +152,14 @@ DECLARE tag_used TEXT; nfi_used TEXT; sf TEXT; + sf_node TEXT; + tag_node TEXT; thes_code TEXT; cset INT; heading_text TEXT; tmp_text TEXT; first_sf BOOL; - auth_id INT DEFAULT COALESCE(NULLIF(oils_xpath_string('//*[@tag="901"]/*[local-name()="subfield" and @code="c"]', marcxml), ''), '0')::INT; + auth_id INT DEFAULT COALESCE(NULLIF(oils_xpath_string('//*[@tag="901"]/*[local-name()="subfield" and @code="c"]', marcxml), ''), '0')::INT; BEGIN SELECT control_set INTO cset FROM authority.record_entry WHERE id = auth_id; @@ -180,35 +182,43 @@ BEGIN tag_used := acsaf.tag; nfi_used := acsaf.nfi; first_sf := TRUE; - FOR sf IN SELECT * FROM regexp_split_to_table(acsaf.sf_list,'') LOOP - tmp_text := oils_xpath_string('//*[@tag="'||tag_used||'"]/*[@code="'||sf||'"]', marcxml); - IF first_sf AND tmp_text IS NOT NULL AND nfi_used IS NOT NULL THEN - - tmp_text := SUBSTRING( - tmp_text FROM - COALESCE( - NULLIF( - REGEXP_REPLACE( - oils_xpath_string('//*[@tag="'||tag_used||'"]/@ind'||nfi_used, marcxml), - $$\D+$$, - '', - 'g' - ), - '' - )::INT, - 0 - ) + 1 - ); - - END IF; - - first_sf := FALSE; + FOR tag_node IN SELECT unnest(oils_xpath('//*[@tag="'||tag_used||'"]',marcxml)) LOOP + FOR sf_node IN SELECT unnest(oils_xpath('//*[contains("'||acsaf.sf_list||'",@code)]',tag_node)) LOOP + + tmp_text := oils_xpath_string('.', sf_node); + sf := oils_xpath_string('./@code', sf_node); + + IF first_sf AND tmp_text IS NOT NULL AND nfi_used IS NOT NULL THEN + + tmp_text := SUBSTRING( + tmp_text FROM + COALESCE( + NULLIF( + REGEXP_REPLACE( + oils_xpath_string('./@ind'||nfi_used, tag_node), + $$\D+$$, + '', + 'g' + ), + '' + )::INT, + 0 + ) + 1 + ); + + END IF; + + first_sf := FALSE; + + IF tmp_text IS NOT NULL AND tmp_text <> '' THEN + heading_text := heading_text || E'\u2021' || sf || ' ' || tmp_text; + END IF; + END LOOP; - IF tmp_text IS NOT NULL AND tmp_text <> '' THEN - heading_text := heading_text || E'\u2021' || sf || ' ' || tmp_text; - END IF; + EXIT WHEN heading_text <> ''; END LOOP; + EXIT WHEN heading_text <> ''; END LOOP; @@ -272,14 +282,14 @@ BEGIN nfi_used := acsaf.nfi; FOR tmp_xml IN SELECT UNNEST(XPATH('//*[@tag="'||tag_used||'"]', marcxml::XML)) LOOP - heading_text := ''; - FOR sf IN SELECT * FROM regexp_split_to_table(acsaf.sf_list,'') LOOP - heading_text := heading_text || COALESCE( ' ' || oils_xpath_string('//*[@code="'||sf||'"]',tmp_xml::TEXT), ''); - END LOOP; + heading_text := public.naco_normalize( + COALESCE( + oils_xpath_string('//*[contains("'||acsaf.sf_list||'",@code)]',tmp_xml::TEXT, ' '), + '' + ) + ); - heading_text := public.naco_normalize(heading_text); - IF nfi_used IS NOT NULL THEN sort_text := SUBSTRING( @@ -287,7 +297,7 @@ BEGIN COALESCE( NULLIF( REGEXP_REPLACE( - oils_xpath_string('//*[@tag="'||tag_used||'"]/@ind'||nfi_used, marcxml), + oils_xpath_string('./@ind'||nfi_used, tmp_xml::TEXT), $$\D+$$, '', 'g'