From 9ea62fca3faeea6ffc2960917bfab58cc4bf3f4b Mon Sep 17 00:00:00 2001 From: Chris Sharp Date: Mon, 23 Jan 2017 20:30:28 -0500 Subject: [PATCH] we already have 0742 --- .../Pg/version-upgrade/2.3.0-2.3.1-upgrade-db.sql | 266 ++++++++++----------- 1 file changed, 133 insertions(+), 133 deletions(-) diff --git a/Open-ILS/src/sql/Pg/version-upgrade/2.3.0-2.3.1-upgrade-db.sql b/Open-ILS/src/sql/Pg/version-upgrade/2.3.0-2.3.1-upgrade-db.sql index 8f3f907354..02779455c1 100644 --- a/Open-ILS/src/sql/Pg/version-upgrade/2.3.0-2.3.1-upgrade-db.sql +++ b/Open-ILS/src/sql/Pg/version-upgrade/2.3.0-2.3.1-upgrade-db.sql @@ -135,138 +135,138 @@ INSERT INTO config.upgrade_log (version, applied_to) VALUES ('2.3.1', :eg_versio -- $func$ LANGUAGE PLPGSQL; -SELECT evergreen.upgrade_deps_block_check('0742', :eg_version); - --- Prepare for the July 2013 introduction of OCLC's "on" prefix --- Per LP# 1049171 - -CREATE OR REPLACE FUNCTION maintain_control_numbers() RETURNS TRIGGER AS $func$ -use strict; -use MARC::Record; -use MARC::File::XML (BinaryEncoding => 'UTF-8'); -use MARC::Charset; -use Encode; -use Unicode::Normalize; - -MARC::Charset->assume_unicode(1); - -my $record = MARC::Record->new_from_xml($_TD->{new}{marc}); -my $schema = $_TD->{table_schema}; -my $rec_id = $_TD->{new}{id}; - -# Short-circuit if maintaining control numbers per MARC21 spec is not enabled -my $enable = spi_exec_query("SELECT enabled FROM config.global_flag WHERE name = 'cat.maintain_control_numbers'"); -if (!($enable->{processed}) or $enable->{rows}[0]->{enabled} eq 'f') { - return; -} - -# Get the control number identifier from an OU setting based on $_TD->{new}{owner} -my $ou_cni = 'EVRGRN'; - -my $owner; -if ($schema eq 'serial') { - $owner = $_TD->{new}{owning_lib}; -} else { - # are.owner and bre.owner can be null, so fall back to the consortial setting - $owner = $_TD->{new}{owner} || 1; -} - -my $ous_rv = spi_exec_query("SELECT value FROM actor.org_unit_ancestor_setting('cat.marc_control_number_identifier', $owner)"); -if ($ous_rv->{processed}) { - $ou_cni = $ous_rv->{rows}[0]->{value}; - $ou_cni =~ s/"//g; # Stupid VIM syntax highlighting" -} else { - # Fall back to the shortname of the OU if there was no OU setting - $ous_rv = spi_exec_query("SELECT shortname FROM actor.org_unit WHERE id = $owner"); - if ($ous_rv->{processed}) { - $ou_cni = $ous_rv->{rows}[0]->{shortname}; - } -} - -my ($create, $munge) = (0, 0); - -my @scns = $record->field('035'); - -foreach my $id_field ('001', '003') { - my $spec_value; - my @controls = $record->field($id_field); - - if ($id_field eq '001') { - $spec_value = $rec_id; - } else { - $spec_value = $ou_cni; - } - - # Create the 001/003 if none exist - if (scalar(@controls) == 1) { - # Only one field; check to see if we need to munge it - unless (grep $_->data() eq $spec_value, @controls) { - $munge = 1; - } - } else { - # Delete the other fields, as with more than 1 001/003 we do not know which 003/001 to match - foreach my $control (@controls) { - $record->delete_field($control); - } - $record->insert_fields_ordered(MARC::Field->new($id_field, $spec_value)); - $create = 1; - } -} - -my $cn = $record->field('001')->data(); -# Special handling of OCLC numbers, often found in records that lack 003 -if ($cn =~ /^o(c[nm]|n)\d/) { - $cn =~ s/^o(c[nm]|n)0*(\d+)/$2/; - $record->field('003')->data('OCoLC'); - $create = 0; -} - -# Now, if we need to munge the 001, we will first push the existing 001/003 -# into the 035; but if the record did not have one (and one only) 001 and 003 -# to begin with, skip this process -if ($munge and not $create) { - - my $scn = "(" . $record->field('003')->data() . ")" . $cn; - - # Do not create duplicate 035 fields - unless (grep $_->subfield('a') eq $scn, @scns) { - $record->insert_fields_ordered(MARC::Field->new('035', '', '', 'a' => $scn)); - } -} - -# Set the 001/003 and update the MARC -if ($create or $munge) { - $record->field('001')->data($rec_id); - $record->field('003')->data($ou_cni); - - my $xml = $record->as_xml_record(); - $xml =~ s/\n//sgo; - $xml =~ s/^<\?xml.+\?\s*>//go; - $xml =~ s/>\s+entityize() - # to avoid having to set PERL5LIB for PostgreSQL as well - - # If we are going to convert non-ASCII characters to XML entities, - # we had better be dealing with a UTF8 string to begin with - $xml = decode_utf8($xml); - - $xml = NFC($xml); - - # Convert raw ampersands to entities - $xml =~ s/&(?!\S+;)/&/gso; - - # Convert Unicode characters to entities - $xml =~ s/([\x{0080}-\x{fffd}])/sprintf('&#x%X;',ord($1))/sgoe; - - $xml =~ s/[\x00-\x1f]//go; - $_TD->{new}{marc} = $xml; - - return "MODIFY"; -} - -return; -$func$ LANGUAGE PLPERLU; +-- SELECT evergreen.upgrade_deps_block_check('0742', :eg_version); +-- +-- -- Prepare for the July 2013 introduction of OCLC's "on" prefix +-- -- Per LP# 1049171 +-- +-- CREATE OR REPLACE FUNCTION maintain_control_numbers() RETURNS TRIGGER AS $func$ +-- use strict; +-- use MARC::Record; +-- use MARC::File::XML (BinaryEncoding => 'UTF-8'); +-- use MARC::Charset; +-- use Encode; +-- use Unicode::Normalize; +-- +-- MARC::Charset->assume_unicode(1); +-- +-- my $record = MARC::Record->new_from_xml($_TD->{new}{marc}); +-- my $schema = $_TD->{table_schema}; +-- my $rec_id = $_TD->{new}{id}; +-- +-- # Short-circuit if maintaining control numbers per MARC21 spec is not enabled +-- my $enable = spi_exec_query("SELECT enabled FROM config.global_flag WHERE name = 'cat.maintain_control_numbers'"); +-- if (!($enable->{processed}) or $enable->{rows}[0]->{enabled} eq 'f') { +-- return; +-- } +-- +-- # Get the control number identifier from an OU setting based on $_TD->{new}{owner} +-- my $ou_cni = 'EVRGRN'; +-- +-- my $owner; +-- if ($schema eq 'serial') { +-- $owner = $_TD->{new}{owning_lib}; +-- } else { +-- # are.owner and bre.owner can be null, so fall back to the consortial setting +-- $owner = $_TD->{new}{owner} || 1; +-- } +-- +-- my $ous_rv = spi_exec_query("SELECT value FROM actor.org_unit_ancestor_setting('cat.marc_control_number_identifier', $owner)"); +-- if ($ous_rv->{processed}) { +-- $ou_cni = $ous_rv->{rows}[0]->{value}; +-- $ou_cni =~ s/"//g; # Stupid VIM syntax highlighting" +-- } else { +-- # Fall back to the shortname of the OU if there was no OU setting +-- $ous_rv = spi_exec_query("SELECT shortname FROM actor.org_unit WHERE id = $owner"); +-- if ($ous_rv->{processed}) { +-- $ou_cni = $ous_rv->{rows}[0]->{shortname}; +-- } +-- } +-- +-- my ($create, $munge) = (0, 0); +-- +-- my @scns = $record->field('035'); +-- +-- foreach my $id_field ('001', '003') { +-- my $spec_value; +-- my @controls = $record->field($id_field); +-- +-- if ($id_field eq '001') { +-- $spec_value = $rec_id; +-- } else { +-- $spec_value = $ou_cni; +-- } +-- +-- # Create the 001/003 if none exist +-- if (scalar(@controls) == 1) { +-- # Only one field; check to see if we need to munge it +-- unless (grep $_->data() eq $spec_value, @controls) { +-- $munge = 1; +-- } +-- } else { +-- # Delete the other fields, as with more than 1 001/003 we do not know which 003/001 to match +-- foreach my $control (@controls) { +-- $record->delete_field($control); +-- } +-- $record->insert_fields_ordered(MARC::Field->new($id_field, $spec_value)); +-- $create = 1; +-- } +-- } +-- +-- my $cn = $record->field('001')->data(); +-- # Special handling of OCLC numbers, often found in records that lack 003 +-- if ($cn =~ /^o(c[nm]|n)\d/) { +-- $cn =~ s/^o(c[nm]|n)0*(\d+)/$2/; +-- $record->field('003')->data('OCoLC'); +-- $create = 0; +-- } +-- +-- # Now, if we need to munge the 001, we will first push the existing 001/003 +-- # into the 035; but if the record did not have one (and one only) 001 and 003 +-- # to begin with, skip this process +-- if ($munge and not $create) { +-- +-- my $scn = "(" . $record->field('003')->data() . ")" . $cn; +-- +-- # Do not create duplicate 035 fields +-- unless (grep $_->subfield('a') eq $scn, @scns) { +-- $record->insert_fields_ordered(MARC::Field->new('035', '', '', 'a' => $scn)); +-- } +-- } +-- +-- # Set the 001/003 and update the MARC +-- if ($create or $munge) { +-- $record->field('001')->data($rec_id); +-- $record->field('003')->data($ou_cni); +-- +-- my $xml = $record->as_xml_record(); +-- $xml =~ s/\n//sgo; +-- $xml =~ s/^<\?xml.+\?\s*>//go; +-- $xml =~ s/>\s+entityize() +-- # to avoid having to set PERL5LIB for PostgreSQL as well +-- +-- # If we are going to convert non-ASCII characters to XML entities, +-- # we had better be dealing with a UTF8 string to begin with +-- $xml = decode_utf8($xml); +-- +-- $xml = NFC($xml); +-- +-- # Convert raw ampersands to entities +-- $xml =~ s/&(?!\S+;)/&/gso; +-- +-- # Convert Unicode characters to entities +-- $xml =~ s/([\x{0080}-\x{fffd}])/sprintf('&#x%X;',ord($1))/sgoe; +-- +-- $xml =~ s/[\x00-\x1f]//go; +-- $_TD->{new}{marc} = $xml; +-- +-- return "MODIFY"; +-- } +-- +-- return; +-- $func$ LANGUAGE PLPERLU; COMMIT; -- 2.11.0