[Koha-patches] [PATCH] Improve performance and fault tolerance for sync_items...
Joe Atzberger
joe.atzberger at liblime.com
Mon Mar 23 22:25:21 CET 2009
Pulled the GetMarcFromKohaField outside the loop, since we only need to
check it once. Same for $item_sth. Added safety checks for success of
delete_field and GetMarcItem, with warnings on failure.
---
misc/maintenance/sync_items_in_marc_bib.pl | 23 ++++++++++++++++-------
1 files changed, 16 insertions(+), 7 deletions(-)
diff --git a/misc/maintenance/sync_items_in_marc_bib.pl b/misc/maintenance/sync_items_in_marc_bib.pl
index d2f62e1..159c48f 100755
--- a/misc/maintenance/sync_items_in_marc_bib.pl
+++ b/misc/maintenance/sync_items_in_marc_bib.pl
@@ -29,13 +29,17 @@ if (not $result or $want_help or not $do_update) {
exit 0;
}
-my $num_bibs_processed = 0;
-my $num_bibs_modified = 0;
+my $num_bibs_processed = 0;
+my $num_bibs_modified = 0;
my $num_marc_items_deleted = 0;
-my $num_marc_items_added = 0;
-my $num_bad_bibs = 0;
+my $num_marc_items_added = 0;
+my $num_bad_bibs = 0;
my $dbh = C4::Context->dbh;
$dbh->{AutoCommit} = 0;
+
+our ($itemtag, $itemsubfield) = GetMarcFromKohaField("items.itemnumber", '');
+our ($item_sth) = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ?");
+
process_bibs();
$dbh->commit();
@@ -81,18 +85,23 @@ sub process_bib {
my $bib_modified = 0;
# delete any item tags
- my ($itemtag, $itemsubfield) = GetMarcFromKohaField("items.itemnumber", '');
foreach my $field ($bib->field($itemtag)) {
- $bib->delete_field($field);
+ unless ($bib->delete_field($field)) {
+ warn "Could not delete item in $itemtag for biblionumber $biblionumber";
+ next;
+ }
$num_marc_items_deleted++;
$bib_modified = 1;
}
# add back items from items table
- my $item_sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ?");
$item_sth->execute($biblionumber);
while (my $itemnumber = $item_sth->fetchrow_array) {
my $marc_item = C4::Items::GetMarcItem($biblionumber, $itemnumber);
+ unless ($marc_item) {
+ warn "FAILED C4::Items::GetMarcItem for biblionumber=$biblionumber, itemnumber=$itemnumber";
+ next;
+ }
foreach my $item_field ($marc_item->field($itemtag)) {
$bib->insert_fields_ordered($item_field);
$num_marc_items_added++;
--
1.5.6.5
More information about the Koha-patches
mailing list