From: Jason Etheridge Date: Sun, 19 May 2019 21:33:10 +0000 (-0400) Subject: migration_tools.munge_sf9_qualifying_match X-Git-Url: http://git.equinoxoli.org/?p=migration-tools.git;a=commitdiff_plain;h=d8bb3e1ac2a233d00249cf940ce77213f1fe5674 migration_tools.munge_sf9_qualifying_match --- diff --git a/sql/base/base.sql b/sql/base/base.sql index 0e6c24a..cf0120a 100644 --- a/sql/base/base.sql +++ b/sql/base/base.sql @@ -4361,6 +4361,58 @@ return $marc_xml->as_xml_record(); $function$; +DROP FUNCTION IF EXISTS migration_tools.munge_sf9_qualifying_match(TEXT,TEXT,TEXT); +CREATE OR REPLACE FUNCTION migration_tools.munge_sf9_qualifying_match(marc_xml TEXT, qualifying_match TEXT, new_9_to_set TEXT, force TEXT) + RETURNS TEXT + LANGUAGE plperlu +AS $function$ +use strict; +use warnings; + +use MARC::Record; +use MARC::File::XML (BinaryEncoding => 'utf8'); + +binmode(STDERR, ':bytes'); +binmode(STDOUT, ':utf8'); +binmode(STDERR, ':utf8'); + +my $marc_xml = shift; +my $qualifying_match = shift; +my $new_9_to_set = shift; +my $force = shift; + +$marc_xml =~ s/(.........)./${1}a/; + +eval { + $marc_xml = MARC::Record->new_from_xml($marc_xml); +}; +if ($@) { + #elog("could not parse $bibid: $@\n"); + import MARC::File::XML (BinaryEncoding => 'utf8'); + return $marc_xml; +} + +my @uris = $marc_xml->field('856'); +return $marc_xml->as_xml_record() unless @uris; + +foreach my $field (@uris) { + if ($field->as_string() =~ qr/$qualifying_match/) { + my $ind1 = $field->indicator('1'); + if (!defined $ind1) { next; } + if ($ind1 ne '1' && $ind1 ne '4' && $force eq 'false') { next; } + if ($ind1 ne '1' && $ind1 ne '4' && $force eq 'true') { $field->set_indicator(1,'4'); } + my $ind2 = $field->indicator('2'); + if (!defined $ind2) { next; } + if ($ind2 ne '0' && $ind2 ne '1' && $force eq 'false') { next; } + if ($ind2 ne '0' && $ind2 ne '1' && $force eq 'true') { $field->set_indicator(2,'0'); } + $field->add_subfields( '9' => $new_9_to_set ); + } +} + +return $marc_xml->as_xml_record(); + +$function$; + DROP FUNCTION IF EXISTS migration_tools.owner_change_sf9_substring_match(TEXT,TEXT,TEXT,TEXT); CREATE OR REPLACE FUNCTION migration_tools.owner_change_sf9_substring_match (marc_xml TEXT, substring_old_value TEXT, new_value TEXT, fix_indicators TEXT) RETURNS TEXT