From cbc86823ba6d366d0490a2de0bfe5775efeeb98a Mon Sep 17 00:00:00 2001 From: Andreas Romeyke <andreas.romeyke@slub-dresden.de> Date: Thu, 28 Mar 2024 12:51:35 +0100 Subject: [PATCH] - added handling, if LZA-ID does not exist (generate a dummy LZA-ID 'SLUB:LZA:migration_from_rosetta:unknown_xxxxxx') --- perl/exit_strategy.pl | 90 +++++++++++++++++++++++-------------------- 1 file changed, 49 insertions(+), 41 deletions(-) diff --git a/perl/exit_strategy.pl b/perl/exit_strategy.pl index 9bb680d..014a7e5 100644 --- a/perl/exit_strategy.pl +++ b/perl/exit_strategy.pl @@ -254,49 +254,57 @@ SQL_DELETE_PLAN # $ret{"files"} = \@files; # $ret{"dcrecords"} = \@dcrecords; ############################################################################### -sub write_addsql ($dbh, $plans, $refhash) { - my $iefile = basename($refhash->{"filename"}); - my ($ieid,$ieversion); - if ($iefile =~ m/^V(\d+)-(IE\d*)\.xml$/) { - $ieversion=$1; $ieid=$2; - } else { - die "Could not detect PID and Version from IEFile '$iefile'\n"; - } - my $lza_id_kv = List::Util::first { - my ($dckey,$dcvalue) = @{$_}; - ($dckey eq 'dc:identifier') - and (check_lzaid($dcvalue)) - } @{$refhash->{"dcrecords"}}; - my $lza_id = @{$lza_id_kv}[1]; - if (! defined $lza_id) { $lza_id = "";} - # start SQL insert - eval {$plans->{aip}->execute($ieid, $lza_id, $ieversion)} or die "sql problem detected with $ieid ($ieversion), plz check if there is a dublette dir, ", $dbh->errstr; - # FIXME if multiple locations exists - - eval{$plans->{ie}->execute( $ieid, $ieversion, $iefile, $sourcetype)} or die "sql problem detected with $ieid ($ieversion, $iefile, $sourcetype), ", $dbh->errstr; - foreach my $location (@{$refhash->{"files"}}) { - my $file = basename($location); # FIXME if multiple locations - eval {$plans->{file}->execute($ieid, $ieversion, $file)} or die "sql problem detected with $ieid ($ieversion, $file), ", $dbh->errstr; - eval {$plans->{locat}->execute($ieid, $ieversion, $file, $location, $sourcetype)} or die "sql problem detected with $ieid ($ieversion, $file, $location, $sourcetype), ", $dbh->errstr; - } - foreach my $dcpair (@{$refhash->{"dcrecords"}}) { - my ($dckey,$dcvalue) = @{$dcpair}; - # quote ' in dcvalue - $dcvalue=~tr/'/"/; - eval {$plans->{dc}->execute($ieid, $ieversion, $dckey, $dcvalue)} or die "sql problem detected with $ieid ($ieversion, $dckey, $dcvalue), ", $dbh->errstr; - } - if ($refhash->{'purged'}) { - my @purged = @{$refhash->{'purged'}}; - foreach my $purge (@purged) { - # TODO: call plan plans->{deleted} - my $state = $purge->{'state'}; - my $reason = $purge->{'reason'}; - my $date = $purge->{'date'}; - my $authorized_by = $purge->{'authorized_by'}; - eval {$plans->{deleted}->execute($ieid, $ieversion, $state, $reason, $date, $authorized_by)} or die "sql problem detected with $ieid ($ieversion, $state, $reason, $date, $authorized_by), ", $dbh->errstr; +{ + my $lza_id_counter = 0; + sub write_addsql($dbh, $plans, $refhash) { + my $iefile = basename($refhash->{"filename"}); + my ($ieid, $ieversion); + if ($iefile =~ m/^V(\d+)-(IE\d*)\.xml$/) { + $ieversion = $1; + $ieid = $2; + } + else { + die "Could not detect PID and Version from IEFile '$iefile'\n"; } + my $lza_id_kv = List::Util::first { + my ($dckey, $dcvalue) = @{$_}; + ($dckey eq 'dc:identifier') + and (check_lzaid($dcvalue)) + } @{$refhash->{"dcrecords"}}; + my $lza_id = @{$lza_id_kv}[1]; + if (!defined $lza_id) { + $lza_id = sprintf("SLUB:LZA:migration_from_rosetta:unknown_%05lu", $lza_id_counter++); + warn ("no lza id detected on $refhash->{filename}, using $lza_id now!"); + } + # start SQL insert + eval {$plans->{aip}->execute($ieid, $lza_id, $ieversion)} or die "sql problem detected with $ieid ($ieversion), plz check if there is a dublette dir, ", $dbh->errstr; + # FIXME if multiple locations exists + + eval {$plans->{ie}->execute($ieid, $ieversion, $iefile, $sourcetype)} or die "sql problem detected with $ieid ($ieversion, $iefile, $sourcetype), ", $dbh->errstr; + foreach my $location (@{$refhash->{"files"}}) { + my $file = basename($location); # FIXME if multiple locations + eval {$plans->{file}->execute($ieid, $ieversion, $file)} or die "sql problem detected with $ieid ($ieversion, $file), ", $dbh->errstr; + eval {$plans->{locat}->execute($ieid, $ieversion, $file, $location, $sourcetype)} or die "sql problem detected with $ieid ($ieversion, $file, $location, $sourcetype), ", $dbh->errstr; + } + foreach my $dcpair (@{$refhash->{"dcrecords"}}) { + my ($dckey, $dcvalue) = @{$dcpair}; + # quote ' in dcvalue + $dcvalue =~ tr/'/"/; + eval {$plans->{dc}->execute($ieid, $ieversion, $dckey, $dcvalue)} or die "sql problem detected with $ieid ($ieversion, $dckey, $dcvalue), ", $dbh->errstr; + } + if ($refhash->{'purged'}) { + my @purged = @{$refhash->{'purged'}}; + foreach my $purge (@purged) { + # TODO: call plan plans->{deleted} + my $state = $purge->{'state'}; + my $reason = $purge->{'reason'}; + my $date = $purge->{'date'}; + my $authorized_by = $purge->{'authorized_by'}; + eval {$plans->{deleted}->execute($ieid, $ieversion, $state, $reason, $date, $authorized_by)} or die "sql problem detected with $ieid ($ieversion, $state, $reason, $date, $authorized_by), ", $dbh->errstr; + } + } + return 1; } - return 1; } -- GitLab