From 7aa7dfc0b3a13d24379e3e7bc407a29714b3a04f Mon Sep 17 00:00:00 2001 From: Shawn Boyette Date: Thu, 25 Jun 2009 17:31:50 +0000 Subject: [PATCH 1/1] removing DBMD, phase I --- .../lib/Equinox/Migration/MapDrivenMARCXMLProc.pm | 25 +++++++++---------- Equinox-Migration/t/03-MapDrivenMARCXMLProc.t | 26 ++++++++----------- extract_holdings | 3 +- 3 files changed, 24 insertions(+), 30 deletions(-) diff --git a/Equinox-Migration/lib/Equinox/Migration/MapDrivenMARCXMLProc.pm b/Equinox-Migration/lib/Equinox/Migration/MapDrivenMARCXMLProc.pm index 194a593..dc45baf 100644 --- a/Equinox-Migration/lib/Equinox/Migration/MapDrivenMARCXMLProc.pm +++ b/Equinox-Migration/lib/Equinox/Migration/MapDrivenMARCXMLProc.pm @@ -14,11 +14,11 @@ Equinox::Migration::MapDrivenMARCXMLProc =head1 VERSION -Version 1.003 +Version 1.004 =cut -our $VERSION = '1.003'; +our $VERSION = '1.004'; my $dstore; my $sfmap; @@ -63,13 +63,14 @@ sub new { mods => \@mods ); # initialize datastore - die "Datastore file 'EMMXSSTORAGE.dbmd' already exists. Exiting.\n" - if (-e "EMMXSSTORAGE.dbmd"); - $dstore = DBM::Deep->new( file => "EMMXSSTORAGE.dbmd", - max_buckets => 64, - #data_sector_size => 256, - autoflush => 0, - ); + #die "Datastore file 'EMMXSSTORAGE.dbmd' already exists. Exiting.\n" + # if (-e "EMMXSSTORAGE.dbmd"); + #$dstore = DBM::Deep->new( file => "EMMXSSTORAGE.dbmd", + # max_buckets => 64, + # #data_sector_size => 256, + # autoflush => 0, + # ); + $dstore = {}; $reccount = 0; # next record ptr $dstore->{tags} = $sfmap->tags; # list of all tags $self->{data} = $dstore; @@ -86,8 +87,6 @@ sub new { return $self; } -sub DESTROY { unlink "EMMXSSTORAGE.dbmd" } - =head2 parse_record Extracts data from the next record, per the mapping file. @@ -107,7 +106,7 @@ sub parse_record { $reccount++; # check for required fields - check_required(); + check_required($crec); push @{ $dstore->{recs} }, $crec; print STDERR "$reccount\n" @@ -187,8 +186,8 @@ sub process_subs { sub check_required { + my ($crec) = @_; my $mods = $sfmap->mods; - my $crec = $dstore->{crec}; for my $tag_id (keys %{$mods->{required}}) { for my $code (@{$mods->{required}{$tag_id}}) { diff --git a/Equinox-Migration/t/03-MapDrivenMARCXMLProc.t b/Equinox-Migration/t/03-MapDrivenMARCXMLProc.t index 8c0d0f9..e4a06a8 100644 --- a/Equinox-Migration/t/03-MapDrivenMARCXMLProc.t +++ b/Equinox-Migration/t/03-MapDrivenMARCXMLProc.t @@ -49,7 +49,6 @@ is ($rec->{tags}[0]{tag}, 999, 'tag id 4'); is ($rec->{tags}[0]{uni}{a}, "FIC DEV", 'subfield value 4'); $rec = shift @{ $mp->{data}{recs} }; is ($rec, undef, 'no more records'); -$mp->DESTROY; # with map-01, 999$a and 999$q are captured. q only exists on the second # record; the others should the placeholder value of '' @@ -63,28 +62,26 @@ is ($rec->{tags}[0]{uni}{j}, undef, 'we shouldnt have captured this, even if it $rec = shift @{ $mp->{data}{recs} }; is ($rec->{tags}[0]{uni}{a}, "MYS 2", '999$a'); is ($rec->{tags}[0]{uni}{q}, "TEST", '999$q does exist here'); -$mp->DESTROY; # map-02 adds 999$x *not* as multi, producing a fatal error on the last record -#eval { $mp = Equinox::Migration::MapDrivenMARCXMLProc->new( marcfile => 't/corpus/mdmp-0.txt', -# mapfile => 't/corpus/mdmpmap-02.txt'); -# }; -#$@ =~ /^(Multiple occurances of a non-multi field: 999x at rec 4)/; -#is ($1, "Multiple occurances of a non-multi field: 999x at rec 4", -# '999$x not declared multi, but is'); +eval { $mp = Equinox::Migration::MapDrivenMARCXMLProc->new( marcfile => 't/corpus/mdmp-0.txt', + mapfile => 't/corpus/mdmpmap-02.txt'); + }; +$@ =~ /^(Multiple occurances of a non-multi field: 999x at rec 4)/; +is ($1, "Multiple occurances of a non-multi field: 999x at rec 4", + '999$x not declared multi, but is'); # map-03 has 999$s as required, producing a fatal on record X -#$mp = Equinox::Migration::MapDrivenMARCXMLProc->new( marcfile => 't/corpus/mdmp-0.txt', -# mapfile => 't/corpus/mdmpmap-03.txt'); -#eval { $rec = $mp->parse_record }; -#is ($@, "Required mapping 999s not found in rec 1\n", '999$s removed from this record'); -#eval { $rec = $mp->parse_record }; -#is ($@, "", '999$s exists here tho'); +eval { $mp = Equinox::Migration::MapDrivenMARCXMLProc->new( marcfile => 't/corpus/mdmp-0.txt', + mapfile => 't/corpus/mdmpmap-03.txt') }; +$@ =~ /^(.+)\n/; +is ($1, "Required mapping 999s not found in rec 1", '999$s removed from this record'); # map-04 has fields in 999 and 250, and multi data $mp = Equinox::Migration::MapDrivenMARCXMLProc->new( marcfile => 't/corpus/mdmp-0.txt', mapfile => 't/corpus/mdmpmap-04.txt'); $rec = shift @{ $mp->{data}{recs} }; +is (scalar @{ $rec->{tags} }, 2, "2 tags captured"); is ($rec->{tags}[0]{tag}, 250, 'should be 250'); is ($rec->{tags}[0]{uni}{a}, "1st ed.", '999$a'); is ($rec->{tags}[1]{tag}, 999, 'should be 999'); @@ -101,7 +98,6 @@ is_deeply ($rec->{tags}[0]{multi}{'x'}, ['FICTION','FICTION2','FICTION3','FICTIO '999$x - multi'); is ($rec->{tmap}{250}, undef, 'tag map test 2a'); is_deeply ($rec->{tmap}{999}, [0], 'tag map test 2b'); -$mp->DESTROY; # map-05 is map-04 with a "no digits" filter on 999$x $mp = Equinox::Migration::MapDrivenMARCXMLProc->new( marcfile => 't/corpus/mdmp-0.txt', diff --git a/extract_holdings b/extract_holdings index fadcf8d..91febc9 100755 --- a/extract_holdings +++ b/extract_holdings @@ -50,9 +50,8 @@ sub extract_holdings { print HOLDINGS "BEGIN;\n\negid\thseq\t" unless $j; my $rec = $m->{data}{recs}[$i]; my $k = 0; # holding-within-record pointer - # for each holdings tag in the record... - while ( $rec->{tmap}{ $c->{holdings} }[$k] ) { + while ( defined $rec->{tmap}{ $c->{holdings} }[$k] ) { my $holdidx = $rec->{tmap}{ $c->{holdings} }[$k]; my $tagid = $rec->{tags}[$holdidx]{tag}; $k++; -- 1.7.2.5