Bugzilla – Attachment 23575 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), 4.77 KB, created by
Stéphane Delaune
on 2013-12-16 13:20:08 UTC
(
hide
)
Description:
proposed patch
Filename:
MIME Type:
Creator:
Stéphane Delaune
Created:
2013-12-16 13:20:08 UTC
Size:
4.77 KB
patch
obsolete
>From c1f7f07b78ea849e0b96f31d1f787adb0722a959 Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?St=C3=A9phane=20Delaune?= <stephane.delaune@biblibre.com> >Date: Mon, 16 Dec 2013 14:14:04 +0100 >Subject: [PATCH] Bug 11399: batch Rebuild Items Tables > >--- > misc/batchRebuildItemsTables.pl | 103 +++++++++++++++++++++++++++++++++++++++ > 1 file changed, 103 insertions(+) > create mode 100755 misc/batchRebuildItemsTables.pl > >diff --git a/misc/batchRebuildItemsTables.pl b/misc/batchRebuildItemsTables.pl >new file mode 100755 >index 0000000..7166b16 >--- /dev/null >+++ b/misc/batchRebuildItemsTables.pl >@@ -0,0 +1,103 @@ >+#!/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 utf8; >+#use open qw/ :std :utf8 /; >+my $count = 0; >+my $errorcount = 0; >+my $starttime = gettimeofday; >+my @errors; >+my %opt; >+my ($confirm, $help, $test_parameter, $where); >+GetOptions( >+ 'c' => \$confirm, >+ 'h' => \$help, >+ 't' => \$test_parameter, >+ 'where:s' => \$where, >+); >+ >+if ($help || (!$confirm)) { >+ print <<EOF >+This script rebuilds the non-MARC DB items table from the MARC values. >+You can/must use it when you change your mapping. >+ >+Syntax: >+\t./batchRebuildItemsTables.pl -h (or without arguments => shows this screen) >+\t./batchRebuildBiblioTables.pl -c (c like confirm => rebuild non marc DB (may be long) >+\t-t => test only, change nothing in DB >+\t-where => optionnal where condition on default query (eg. -where 'biblio.biblionumber < 100') >+EOF >+; >+ exit; >+} >+#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); >+ >+#warn $query; >+#sub defnonull { my $var = shift; defined $var and $var ne "" } >+#__END__ >+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