my $cutoff;
my $wait = 1;
my $output;
+my $link_skipped;
my $ret = GetOptions(
'action:s' => \$action,
'cutoff:s' => \$cutoff,
'wait:i' => \$wait,
'output:s' => \$output,
+ 'link-skipped' => \$link_skipped,
);
abort('must specify --action') unless defined $action;
handle_link_auth_auth($dbh, $schema, $batch);
}
if ($action eq 'link_auth_bib') {
- handle_link_auth_bib($dbh, $schema, $batch);
+ handle_link_auth_bib($dbh, $schema, $batch, $link_skipped);
}
if ($action eq 'export_skipped_bibs') {
or added in this batch.
--action link_auth_bib - run authority_control_fields.pl for
the bibs that were overlaid in this
- batch.
+ batch. Add --link-skipped to specify
+ that bibs that were matched but
+ skipped due to having be edited after
+ the cutoff should be linked (rather
+ than linking the imported bibs)
--action export_skipped_bibs - export to ISO2709 file whose name is
specified by --output those bibs
that had been edited after the cutoff.
$dbh->commit;
$dbh->begin_work;
}
- my $marc = MARC::Record->new_from_usmarc($_);
- my $bibid = $marc->subfield('901', 'c');
- if ($bibid !~ /^\d+$/) {
- print STDERR "Record $i is suspect; skipping\n";
+ eval {
+ my $marc = MARC::Record->new_from_usmarc($_);
+ my $bibid = $marc->subfield('901', 'c');
+ if ($bibid !~ /^\d+$/) {
+ die('Subfield 901$c is not numeric or missing.');
+ }
+ my $xml = OpenILS::Application::AppUtils->entityize($marc->as_xml_record());
+ $ins->execute($xml, $bibid);
+ };
+ if ($@) {
+ warn("Record $i is bad: $@; skipping.");
next;
}
- my $xml = OpenILS::Application::AppUtils->entityize($marc->as_xml_record());
- $ins->execute($xml, $bibid);
}
$dbh->commit;
report_progress("Records staged", $i) if 0 != $i % 100;
FROM $schema.$batch
WHERE to_import
AND NOT imported
- ORDER BY id
+ ORDER BY bib_id DESC
LIMIT 1
)
});
$dbh->commit;
$dbh->begin_work;
}
- my $marc = MARC::Record->new_from_usmarc($_);
- my $authid = $marc->subfield('901', 'c');
- if (defined($authid) && $authid !~ /^\d+$/) {
- undef $authid;
- }
- my $lccn = $marc->subfield('010', 'a');
- if (defined $lccn) {
- $lccn =~ s/^\s+//;
- $lccn =~ s/\s+$//;
- $lccn =~ s/\s+/ /g;
- }
- my $cancelled_lccn = $marc->subfield('010', 'z');
- if (defined $cancelled_lccn) {
- $cancelled_lccn =~ s/^\s+//;
- $cancelled_lccn =~ s/\s+$//;
- $cancelled_lccn =~ s/\s+/ /g;
+ eval {
+ my $marc = MARC::Record->new_from_usmarc($_);
+ my $authid = $marc->subfield('901', 'c');
+ if (defined($authid) && $authid !~ /^\d+$/) {
+ undef $authid;
+ }
+ my $lccn = $marc->subfield('010', 'a');
+ if (defined $lccn) {
+ $lccn =~ s/^\s+//;
+ $lccn =~ s/\s+$//;
+ $lccn =~ s/\s+/ /g;
+ }
+ my $cancelled_lccn = $marc->subfield('010', 'z');
+ if (defined $cancelled_lccn) {
+ $cancelled_lccn =~ s/^\s+//;
+ $cancelled_lccn =~ s/\s+$//;
+ $cancelled_lccn =~ s/\s+/ /g;
+ }
+ my $xml = OpenILS::Application::AppUtils->entityize($marc->as_xml_record());
+ $ins->execute($xml, $authid, $lccn, $cancelled_lccn, $xml);
+ };
+ if ($@) {
+ warn("Record $i is bad: $@; skipping.");
+ next;
}
- my $xml = OpenILS::Application::AppUtils->entityize($marc->as_xml_record());
- $ins->execute($xml, $authid, $lccn, $cancelled_lccn, $xml);
}
$dbh->commit;
report_progress("Records staged", $i) if 0 != $i % 100;
)
});
$dbh->commit;
+ sleep $wait;
}
}
my $dbh = shift;
my $schema = shift;
my $batch = shift;
+ my $link_skipped = shift;
+
+ my $query;
+ if ($link_skipped) {
+ $query = qq{
+ SELECT bib_id AS id
+ FROM $schema.$batch
+ WHERE NOT imported
+ AND skip_reason ~ '^edit'
+ ORDER BY 1
+ };
+ } else {
+ $query = qq{
+ SELECT bib_id AS id
+ FROM $schema.$batch
+ WHERE imported
+ ORDER BY 1
+ };
+ }
- my $sth = $dbh->prepare(qq{
- SELECT bib_id AS id
- FROM $schema.$batch
- WHERE imported
- ORDER BY 1
- });
+ my $sth = $dbh->prepare($query);
$sth->execute();
my @ids = map { $_->{id} } @{ $sth->fetchall_arrayref({}) };
my $i = 0;