X-Git-Url: http://git.equinoxoli.org/?p=migration-tools.git;a=blobdiff_plain;f=sql%2Fbase%2F01-marc.sql;h=3ee78bd16568a3fdc801deb63f62b920761b3277;hp=89984b153ea96f9a4ae20a5fd8d0f1996ce79233;hb=45802a4fca9e570657cb40abdf92084d87b713a8;hpb=69d372219d148bfeac918251d40b51b51eb5e774 diff --git a/sql/base/01-marc.sql b/sql/base/01-marc.sql index 89984b1..3ee78bd 100644 --- a/sql/base/01-marc.sql +++ b/sql/base/01-marc.sql @@ -1,3 +1,82 @@ +CREATE OR REPLACE FUNCTION migration_tools.set_leader (TEXT, INT, TEXT) RETURNS TEXT AS $$ + my ($marcxml, $pos, $value) = @_; + + use MARC::Record; + use MARC::File::XML; + + my $xml = $marcxml; + eval { + my $marc = MARC::Record->new_from_xml($marcxml, 'UTF-8'); + my $leader = $marc->leader(); + substr($leader, $pos, 1) = $value; + $marc->leader($leader); + $xml = $marc->as_xml_record; + $xml =~ s/^<\?.+?\?>$//mo; + $xml =~ s/\n//sgo; + $xml =~ s/>\s+new_from_xml($marcxml, 'UTF-8'); + my $f008 = $marc->field('008'); + + if ($f008) { + my $field = $f008->data(); + substr($field, $pos, 1) = $value; + $f008->update($field); + $xml = $marc->as_xml_record; + $xml =~ s/^<\?.+?\?>$//mo; + $xml =~ s/\n//sgo; + $xml =~ s/>\s+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_formatted(); + } + + foreach $field ( $to_insert->fields() ) { + if (!grep {$_ eq $field->as_formatted()} @incumbents) { + $marc->insert_fields_ordered( ($field) ); + } + } + + $xml = $marc->as_xml_record; + $xml =~ s/^<\?.+?\?>$//mo; + $xml =~ s/\n//sgo; + $xml =~ s/>\s+