cleaned up version of arguments
[migration-tools.git] / eg_staged_bib_overlay
index de7ed3c..d4e788a 100755 (executable)
@@ -33,8 +33,9 @@ my $dbpw;
 my $dbhost;
 my $batch;
 my $cutoff;
-my $wait = 1;
+my $wait = 0;
 my $output;
+my $link_skipped;
 
 my $ret = GetOptions(
     'action:s'      => \$action,
@@ -47,6 +48,7 @@ my $ret = GetOptions(
     'cutoff:s'      => \$cutoff,
     'wait:i'        => \$wait,
     'output:s'      => \$output,
+    'link-skipped'  => \$link_skipped,
 );
 
 abort('must specify --action') unless defined $action;
@@ -119,7 +121,7 @@ if ($action eq 'link_auth_auth') {
     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') {
@@ -181,7 +183,11 @@ This program has several modes controlled by the --action switch:
                                   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.
@@ -275,14 +281,19 @@ sub handle_stage_bibs {
             $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;
@@ -376,7 +387,7 @@ sub handle_load_bibs {
                 FROM $schema.$batch
                 WHERE to_import
                 AND NOT imported
-                ORDER BY id
+                ORDER BY bib_id DESC
                 LIMIT 1
             )
         });
@@ -439,25 +450,31 @@ sub handle_stage_auths {
             $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;
@@ -577,6 +594,7 @@ sub handle_load_new_auths {
             )
         });
         $dbh->commit;
+        sleep $wait;
     }
 }
 
@@ -798,13 +816,27 @@ sub handle_link_auth_bib {
     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;