X-Git-Url: http://git.equinoxoli.org/?p=migration-tools.git;a=blobdiff_plain;f=sql%2Fbase%2Fbase.sql;h=0e61798bec9d305ce8cfc65908669828485031ab;hp=bbe557c8c01db08bb2aad1c6d7dafd3dd36ffa3b;hb=8d3199945421985b1fad1ceade269c62f44e342b;hpb=0c17fe0be89991aefd37e063b26169243dfbe02e 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+