From: Mike Rylander Date: Wed, 30 Apr 2014 22:38:29 +0000 (-0400) Subject: LP#1312945: baseline schema update X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=ef3b92d663580d41c482f6dec83ccca52b22c5a2;p=Evergreen.git LP#1312945: baseline schema update Signed-off-by: Mike Rylander Signed-off-by: Srey Seng Signed-off-by: Galen Charlton --- diff --git a/Open-ILS/src/sql/Pg/999.functions.global.sql b/Open-ILS/src/sql/Pg/999.functions.global.sql index e57158d9f9..1757fe63b3 100644 --- a/Open-ILS/src/sql/Pg/999.functions.global.sql +++ b/Open-ILS/src/sql/Pg/999.functions.global.sql @@ -1555,22 +1555,32 @@ BEGIN AND linking_subfield IS NOT NULL AND main_entry IS NOT NULL LOOP - link := SUBSTRING( - (XPATH('//*[@tag="' || acsaf.tag || '"]/*[@code="' || - acsaf.linking_subfield || '"]/text()', rec_marc_xml))[1]::TEXT, - '\d+$' - ); + -- Loop over the trailing-number contents of all linking subfields + FOR link IN + SELECT SUBSTRING( x::TEXT, '\d+$' ) + FROM UNNEST( + XPATH( + '//*[@tag="' + || acsaf.tag + || '"]/*[@code="' + || acsaf.linking_subfield + || '"]/text()', + rec_marc_xml + ) + ) x + LOOP - -- Ignore links that are null, malformed, circular, or point to - -- non-existent authority records. - IF link IS NOT NULL AND link::BIGINT <> rec_id THEN - PERFORM * FROM authority.record_entry WHERE id = link::BIGINT; - IF FOUND THEN - aal.target := link::BIGINT; - aal.field := acsaf.id; - RETURN NEXT aal; + -- Ignore links that are null, malformed, circular, or point to + -- non-existent authority records. + IF link IS NOT NULL AND link::BIGINT <> rec_id THEN + PERFORM * FROM authority.record_entry WHERE id = link::BIGINT; + IF FOUND THEN + aal.target := link::BIGINT; + aal.field := acsaf.id; + RETURN NEXT aal; + END IF; END IF; - END IF; + END LOOP; END LOOP; END; $func$ LANGUAGE PLPGSQL;