Bugzilla – Attachment 23593 Details for
Bug 11399
batch rebuild items tables
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
proposed patch
0001-Bug-11399-batch-Rebuild-Items-Tables.patch (text/plain), 5.30 KB, created by
Stéphane Delaune
on 2013-12-17 11:50:56 UTC
(
hide
)
Description:
proposed patch
Filename:
MIME Type:
Creator:
Stéphane Delaune
Created:
2013-12-17 11:50:56 UTC
Size:
5.30 KB
patch
obsolete
>From bf32ada8b2f99e3518331613862e4fd06d803d58 Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?St=C3=A9phane=20Delaune?= <stephane.delaune@biblibre.com> >Date: Tue, 17 Dec 2013 12:46:39 +0100 >Subject: [PATCH] Bug 11399: batch Rebuild Items Tables > >You can/must use it when you change items mapping. >this script rebuilds the non-MARC DB items table from the MARC values > >usage : batchRebuildItemsTables.pl [ -h ][ -c ][ -t ][ -where ] > >Options: > -h --help (or without arguments) shows this help message > -c Confirm: rebuild non marc DB (may be long) > -t test only, change nothing in DB > --where add where condition on default query > (eg. -where 'biblio.biblionumber<100') >--- > misc/batchRebuildItemsTables.pl | 107 +++++++++++++++++++++++++++++++++++++++ > 1 file changed, 107 insertions(+) > create mode 100755 misc/batchRebuildItemsTables.pl > >diff --git a/misc/batchRebuildItemsTables.pl b/misc/batchRebuildItemsTables.pl >new file mode 100755 >index 0000000..2ffd6ca >--- /dev/null >+++ b/misc/batchRebuildItemsTables.pl >@@ -0,0 +1,107 @@ >+#!/usr/bin/perl >+use 5.10.0; >+use strict; >+use warnings; >+use Getopt::Long; >+use C4::Context; >+use C4::Biblio; >+use C4::Items; >+use MARC::Record; >+use MARC::Field; >+use Data::Dumper; >+use Time::HiRes qw(gettimeofday); >+use Pod::Usage; >+ >+=head1 NAME >+ >+batchRebuildBiblioTables.pl - rebuilds the non-MARC DB items table from the MARC values >+ >+You can/must use it when you change items mapping. >+ >+=head1 SYNOPSIS >+ >+batchRebuildItemsTables.pl [ -h ][ -c ][ -t ][ --where ] >+ >+ Options: >+ -h --help (or without arguments) shows this help message >+ -c Confirm: rebuild non marc DB (may be long) >+ -t test only, change nothing in DB >+ --where add where condition on default query (eg. --where 'biblio.biblionumber<100') >+ >+=cut >+ >+ >+my $count = 0; >+my $errorcount = 0; >+my $starttime = gettimeofday; >+my @errors; >+my %opt; >+my ($confirm, $help, $test_parameter, $where); >+GetOptions( >+ 'c' => \$confirm, >+ 'help|h' => \$help, >+ 't' => \$test_parameter, >+ 'where:s' => \$where, >+) or pod2usage(2); >+ >+pod2usage(1) if ($help || (!$confirm)); >+print "### Database will not be modified ###\n" if $test_parameter; >+#dbh >+my $dbh = C4::Context->dbh; >+$dbh->{AutoCommit} = 0; >+#sysprefs >+C4::Context->disable_syspref_cache() if ( defined( C4::Context->disable_syspref_cache() ) ); >+my $CataloguingLog = C4::Context->preference('CataloguingLog'); >+my $dontmerge = C4::Context->preference('dontmerge'); >+$dontmerge="0" unless defnonull($dontmerge); >+$dbh->do("UPDATE systempreferences SET value=0 WHERE variable='CataloguingLog'"); >+$dbh->do("UPDATE systempreferences SET value=1 where variable='dontmerge'"); >+$dbh->commit() unless $test_parameter; >+my ($itemfield,$itemnumbersubfield) = &GetMarcFromKohaField("items.itemnumber",''); >+#dbh query init >+my $query = qq{SELECT biblio.biblionumber AS biblionumber, biblioitems.biblioitemnumber AS biblioitemnumber, biblio.frameworkcode AS frameworkcode FROM biblio JOIN biblioitems ON biblio.biblionumber=biblioitems.biblionumber}; >+$query.=qq{ WHERE $where } if ($where); >+ >+my $sth = $dbh->prepare($query); >+$sth->execute(); >+while ( my ( $biblionumber, $biblioitemnumber, $frameworkcode ) = $sth->fetchrow ) >+{ >+ $count++; >+ warn $count unless $count %1000; >+ my $extkey; >+ my $record = GetMarcBiblio($biblionumber,1); >+ unless ($record){ push @errors, "bad record biblionumber $biblionumber"; next; } >+ my ($tmptestfields,$tmptestdirectory,$reclen,$tmptestbaseaddress) = MARC::File::USMARC::_build_tag_directory($record); >+ if ($reclen > 99999) { push @errors, "bad record length for biblionumber $biblionumber (length : $reclen) "; next; } >+ #print "\n################################ record before ##################################\n".$record->as_formatted;#!test >+ unless ($test_parameter) { >+ my $rqitemnumber=$dbh->prepare("SELECT itemnumber, biblionumber from items where itemnumber = ? and biblionumber = ?"); >+ foreach my $itemfield ($record->field($itemfield)){ >+ my $marcitem=MARC::Record->new(); >+ $marcitem->encoding('UTF-8'); >+ $marcitem->append_fields($itemfield); >+ my $itemnum; my @itemnumbers = $itemfield->subfield($itemnumbersubfield); >+ foreach my $itemnumber ( @itemnumbers ){ >+ $rqitemnumber->execute($itemnumber, $biblionumber); >+ if( my $row = $rqitemnumber->fetchrow_hashref ){ $itemnum = $row->{itemnumber};} >+ } >+ eval{ if($itemnum){ ModItemFromMarc($marcitem,$biblionumber,$itemnum) }else{ die("$biblionumber"); } }; >+ if ($@){ warn "Problem with : $biblionumber : $@"; warn $record->as_formatted; } >+ } >+ } >+ unless ($test_parameter) { >+ $dbh->commit() unless $count %1000; >+ } >+} >+ >+$dbh->do("UPDATE systempreferences SET value=$CataloguingLog WHERE variable='CataloguingLog'"); >+$dbh->do("UPDATE systempreferences SET value=$dontmerge where variable='dontmerge'"); >+$dbh->commit() unless $test_parameter; >+my $timeneeded = time() - $starttime; >+print "$count MARC record done in $timeneeded seconds\n"; >+if (scalar(@errors) > 0) { >+ print "Some biblionumber could not be processed though: ", join(" ", @errors); >+} >+ >+sub defnonull { my $var = shift; defined $var and $var ne "" } >+__END__ >-- >1.7.9.5 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 11399
:
23575
|
23593
|
29156
|
31518
|
32511
|
32512