3 SELECT evergreen.upgrade_deps_block_check('1299', :eg_version);
5 CREATE OR REPLACE FUNCTION vandelay.strip_field(xml text, field text) RETURNS text AS $f$
8 use MARC::File::XML (BinaryEncoding => 'UTF-8');
12 MARC::Charset->assume_unicode(1);
15 my $r = MARC::Record->new_from_xml( $xml );
17 return $xml unless ($r);
19 my $field_spec = shift;
20 my @field_list = split(',', $field_spec);
23 for my $f (@field_list) {
24 $f =~ s/^\s*//; $f =~ s/\s*$//;
25 if ($f =~ /^(.{3})(\w*)(?:\[([^]]*)\])?$/) {
31 $matches =~ s/^\s*//; $matches =~ s/\s*$//;
32 $fields{$field} = { sf => [ split('', $sf) ] };
34 for my $match (split('&&', $matches)) {
35 $match =~ s/^\s*//; $match =~ s/\s*$//;
36 my ($msf,$mre) = split('~', $match);
37 if (length($msf) > 0 and length($mre) > 0) {
38 $msf =~ s/^\s*//; $msf =~ s/\s*$//;
39 $mre =~ s/^\s*//; $mre =~ s/\s*$//;
40 $fields{$field}{match}{$msf} = qr/$mre/;
47 for my $f ( keys %fields) {
48 for my $to_field ($r->field( $f )) {
49 if (exists($fields{$f}{match})) {
50 my @match_list = grep { $to_field->subfield($_) =~ $fields{$f}{match}{$_} } keys %{$fields{$f}{match}};
51 next unless (scalar(@match_list) == scalar(keys %{$fields{$f}{match}}));
54 if ( @{$fields{$f}{sf}} ) {
55 $to_field->delete_subfield(code => $fields{$f}{sf});
57 $r->delete_field( $to_field );
62 $xml = $r->as_xml_record;
63 $xml =~ s/^<\?.+?\?>$//mo;
65 $xml =~ s/>\s+</></sgo;