From b7e7625ccb0758f89c0131db5de4dbfcc4d0550a Mon Sep 17 00:00:00 2001 From: tipaul Date: Thu, 23 Sep 2004 16:23:55 +0000 Subject: [PATCH] fixing a major bug in rebuildnonmarc (calculation of itemnumber was wrong & caused SQL bugs everywhere) improving performance by not rewritting the MARC DB, it's useless --- misc/rebuildnonmarc.pl | 68 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 63 insertions(+), 5 deletions(-) diff --git a/misc/rebuildnonmarc.pl b/misc/rebuildnonmarc.pl index 7a9e6096b3..6568a68e3c 100755 --- a/misc/rebuildnonmarc.pl +++ b/misc/rebuildnonmarc.pl @@ -9,6 +9,7 @@ use MARC::Record; use MARC::Batch; use C4::Context; use C4::Biblio; +use Time::HiRes qw(gettimeofday); use Getopt::Long; my ( $input_marc_file, $number) = ('',0); @@ -37,6 +38,10 @@ die; my $dbh = C4::Context->dbh; my $i=0; my $starttime = time(); + +$|=1; # flushes output +my $starttime = gettimeofday; + #1st of all, find item MARC tag. my ($tagfield,$tagsubfield) = &MARCfind_marc_from_kohafield($dbh,"items.itemnumber",''); # $dbh->do("lock tables biblio write, biblioitems write, items write, marc_biblio write, marc_subfield_table write, marc_blob_subfield write, marc_word write, marc_subfield_structure write, stopwords write"); @@ -50,6 +55,9 @@ while (my ($bibid)= $sth->fetchrow) { my @fields = $record->field($tagfield); my @items; my $nbitems=0; + print "."; + my $timeneeded = gettimeofday - $starttime; + print "$i in $timeneeded s\n" unless ($i % 50); $i++; foreach my $field (@fields) { my $item = MARC::Record->new(); @@ -58,17 +66,67 @@ while (my ($bibid)= $sth->fetchrow) { $record->delete_field($field); $nbitems++; } - print "$bibid\n"; +# print "$bibid\n"; # now, create biblio and items with NEWnewXX call. - NEWmodbiblio($dbh,$record,$bibid) unless $test_parameter; + my $frameworkcode = MARCfind_frameworkcode($dbh,$bibid); + localNEWmodbiblio($dbh,$record,$bibid,$frameworkcode) unless $test_parameter; +# warn 'B=>'.$record->as_formatted; # print "biblio done\n"; for (my $i=0;$i<=$#items;$i++) { - my $tmp = MARCmarc2koha($dbh,$items[$i]) unless $test_parameter; # finds the itemnumber -# warn "==> ".$items[$i]->as_formatted; - NEWmoditem($dbh,$items[$i],$bibid,$tmp->{itemnumber}) unless $test_parameter; + my $tmp = MARCmarc2koha($dbh,$items[$i],$frameworkcode) unless $test_parameter; # finds the itemnumber +# warn " I=> ".$items[$i]->as_formatted; + localNEWmoditem($dbh,$items[$i],$bibid,$tmp->{itemnumber},0) unless $test_parameter; # print "1 item done\n"; } } # $dbh->do("unlock tables"); my $timeneeded = time() - $starttime; print "$i MARC record done in $timeneeded seconds\n"; + +# modified NEWmodbiblio to jump the MARC part of the biblio modif +# highly faster +sub localNEWmodbiblio { + my ($dbh,$record,$bibid,$frameworkcode) =@_; + $frameworkcode="" unless $frameworkcode; +# &MARCmodbiblio($dbh,$bibid,$record,$frameworkcode,0); + my $oldbiblio = MARCmarc2koha($dbh,$record,$frameworkcode); + my $oldbiblionumber = C4::Biblio::OLDmodbiblio($dbh,$oldbiblio); + C4::Biblio::OLDmodbibitem($dbh,$oldbiblio); + # now, modify addi authors, subject, addititles. + my ($tagfield,$tagsubfield) = MARCfind_marc_from_kohafield($dbh,"additionalauthors.author",$frameworkcode); + my @addiauthfields = $record->field($tagfield); + foreach my $addiauthfield (@addiauthfields) { + my @addiauthsubfields = $addiauthfield->subfield($tagsubfield); + foreach my $subfieldcount (0..$#addiauthsubfields) { + C4::Biblio::OLDmodaddauthor($dbh,$oldbiblionumber,$addiauthsubfields[$subfieldcount]); + } + } + ($tagfield,$tagsubfield) = MARCfind_marc_from_kohafield($dbh,"bibliosubtitle.subtitle",$frameworkcode); + my @subtitlefields = $record->field($tagfield); + foreach my $subtitlefield (@subtitlefields) { + my @subtitlesubfields = $subtitlefield->subfield($tagsubfield); + foreach my $subfieldcount (0..$#subtitlesubfields) { + C4::Biblio::OLDnewsubtitle($dbh,$oldbiblionumber,$subtitlesubfields[$subfieldcount]); + } + } + ($tagfield,$tagsubfield) = MARCfind_marc_from_kohafield($dbh,"bibliosubject.subject",$frameworkcode); + my @subj = $record->field($tagfield); + my @subjects; + foreach my $subject (@subj) { + my @subjsubfield = $subject->subfield($tagsubfield); + foreach my $subfieldcount (0..$#subjsubfield) { + push @subjects,$subjsubfield[$subfieldcount]; + } + } + C4::Biblio::OLDmodsubject($dbh,$oldbiblionumber,1,@subjects); + return 1; +} + +sub localNEWmoditem { + my ( $dbh, $record, $bibid, $itemnumber, $delete ) = @_; +# warn "NEWmoditem $bibid / $itemnumber / $delete ".$record->as_formatted; +# &MARCmoditem( $dbh, $record, $bibid, $itemnumber, $delete ); + my $frameworkcode=MARCfind_frameworkcode($dbh,$bibid); + my $olditem = MARCmarc2koha( $dbh, $record,$frameworkcode ); + C4::Biblio::OLDmoditem( $dbh, $olditem ); +} -- 2.39.5