From 8d3199945421985b1fad1ceade269c62f44e342b Mon Sep 17 00:00:00 2001 From: Ben Ostrowsky Date: Fri, 20 Aug 2010 16:25:32 +0000 Subject: [PATCH] Added function: insert_tags (marc, '') Inserts into the proper numerical order, ignoring fields that are duplicates of each other. --- sql/base/base.sql | 36 ++++++++++++++++++++++++++++++++++++ 1 files changed, 36 insertions(+), 0 deletions(-) diff --git a/sql/base/base.sql b/sql/base/base.sql index bbe557c..0e61798 100644 --- a/sql/base/base.sql +++ b/sql/base/base.sql @@ -776,3 +776,39 @@ CREATE OR REPLACE FUNCTION migration_tools.is_blank (TEXT) RETURNS BOOLEAN AS $$ END; $$ LANGUAGE PLPGSQL STRICT STABLE; + +CREATE OR REPLACE FUNCTION migration_tools.insert_tags (TEXT, TEXT) RETURNS TEXT AS $$ + + my ($marcxml, $tags) = @_; + + use MARC::Record; + use MARC::File::XML; + + my $xml = $marcxml; + + eval { + my $marc = MARC::Record->new_from_xml($marcxml, 'UTF-8'); + my $to_insert = MARC::Record->new_from_xml("$tags", 'UTF-8'); + + my @incumbents = (); + + foreach my $field ( $marc->fields() ) { + push @incumbents, $field->as_string(); + } + + foreach $field ( $to_insert->fields() ) { + if (!grep {$_ eq $field->as_string()} @incumbents) { + $marc->insert_fields_ordered( ($field) ); + } + } + + $xml = $marc->as_xml_record; + $xml =~ s/^<\?.+?\?>$//mo; + $xml =~ s/\n//sgo; + $xml =~ s/>\s+