###############################################################################
=pod
-=item B<stagebibs> --file foo.xml
+=item B<stagebibs> --file foo.mrc.xml
Takes a load of bibs from a UTF-8 MARC XML file and loads them into mig staging
-table of bibio_record_entry. This is done with no checking of file validity
+table of bibio_record_entry_legacy. This is done with no checking of file validity
so records should be checked before hand and cleaned.
-Takes one optional arguments:
+Takes three optional arguments:
---source
+
+--source
+
+Takes a numeric value and set the x_source of the bib record to that. Defaults to
+2 which is local system.
+
+--x_source
Sets an x_source value on the staging table to the one supplied instead of the
default of none.
+--auth foo.mrc.xml
+
+This will load bibs into the authority_record_entry_legacy.
+
+--serial foo.mrc.xml
+
+This will load bibs into the serial_record_entry_legacy.
+
=back
=cut
my $mig_bin = "$FindBin::Bin/";
use lib "$FindBin::Bin/";
use Mig;
+use Getopt::Long;
pod2usage(-verbose => 2) if defined $ARGV[0] && $ARGV[0] eq '--help';
pod2usage(-verbose => 1) if ! $ARGV[1];
-my $next_arg_is_file = 0;
my $append = 0;
-my $next_arg_is_source = 0;
-my $next_arg_is_stage = 0;
+my $base_table = 'biblio_record_entry';
my $stage_table = 'biblio_record_entry_legacy';
-my $source = 'default';
-my $file_is_xml = 0;
+my $auth = '';
+my $serial = '';
+my $source = 2;
+my $x_source = 'default';
my $dbh = Mig::db_connect();
my $infile;
my $i = 0;
my $batch;
binmode STDIN, ':utf8';
-foreach my $arg (@ARGV) {
- if ($arg eq '--file') {
- $next_arg_is_file = 1;
- next;
- }
- if ($next_arg_is_file) {
- $infile = $arg;
- $next_arg_is_file = 0;
- next;
- }
- if ($arg eq '--source') {
- $next_arg_is_source = 1;
- next;
- }
- if ($next_arg_is_source) {
- $source = $arg;
- $next_arg_is_source = 0;
- next;
- }
+my $ret = GetOptions(
+ 'file:s' => \$infile,
+ 'serial:s' => \$serial,
+ 'auth:s' => \$auth,
+ 'x_source:s' => \$x_source,
+ 'source:i' => \$source,
+ 'base_table:s' => \$base_table,
+ 'stage_table:s' => \$stage_table
+);
+
+#if in file is empty then fail
+#if auth and serial = 1 fail
+
+if ($serial == 1) {
+ $base_table = 'authority_record_entry';
+ $stage_table = 'authority_record_entry_legacy';
}
-my $bre_test = check_for_table($dbh,'biblio_record_entry');
-my $bre_legacy_test = check_for_table($dbh,'biblio_record_entry_legacy');
-if ($bre_test == 0 and $bre_legacy_test == 0 ) { create_child_bre($dbh); rename_child_bre($dbh); }
-if ($bre_test == 1 and $bre_legacy_test == 0 ) { rename_child_bre($dbh); }
+if ($auth == 1) {
+ $base_table = 'serial_record_entry';
+ $stage_table = 'serial_record_entry_legacy';
+}
-my $xmig_test = check_for_column($dbh,'biblio_record_entry','x_migrate');
-if ($xmig_test == 0) { add_column($dbh,'biblio_record_entry','x_migrate','BOOLEAN DEFAULT TRUE'); }
+if ($auth == 1 and $serial == 1) { abort('are you sure you want to load these as authorities and serials?'); }
-my $xsource_test = check_for_column($dbh,'biblio_record_entry','x_source');
-if ($xsource_test == 0) { add_column($dbh,'biblio_record_entry','x_source','TEXT'); }
+my $bre_test = check_for_table($dbh,$base_table);
+my $bre_legacy_test = check_for_table($dbh,$stage_table);
+if ($bre_test == 0 and $bre_legacy_test == 0 ) { create_bre($dbh); create_child_bre($dbh); }
+if ($bre_test == 1 and $bre_legacy_test == 0 ) { create_child_bre($dbh); }
+
+my $xmig_test = check_for_column($dbh,$stage_table,'x_migrate');
+if ($xmig_test == 0) { add_column($dbh,$stage_table,'x_migrate','BOOLEAN DEFAULT TRUE'); }
+
+my $xx_source_test = check_for_column($dbh,$stage_table,'x_source');
+if ($xx_source_test == 0) { add_column($dbh,$stage_table,'x_source','TEXT'); }
#flatten out MARC XML FILE
open my $xml, "<:encoding(utf8)", $infile or abort('could not open MARC XML file');
chomp $line;
$record = $record . $line;
if ($line =~ /<\/record>$/) {
- stage_record($dbh,$record,$source);
+ stage_record($dbh,$record,$x_source,$source);
$record = '';
$i++;
if (($i % 100) == 0) { report_progress('Records stage', $i); }
# beyond here be functions
-sub create_child_bre {
+sub create_bre {
my $dbh = shift;
$dbh->do("DO \$\$
DECLARE
t BOOLEAN;
BEGIN
- SELECT EXISTS(SELECT 1 FROM information_schema.tables WHERE table_schema = '$MIGSCHEMA' AND table_name = 'biblio_record_entry') INTO t;
+ SELECT EXISTS(SELECT 1 FROM information_schema.tables WHERE table_schema = '$MIGSCHEMA' AND table_name = '$base_table') INTO t;
IF t = FALSE THEN
- PERFORM migration_tools.build_specific_base_staging_table ('$MIGSCHEMA','biblio.record_entry');
+ PERFORM migration_tools.build_specific_base_staging_table ('$MIGSCHEMA',REGEXP_REPLACE('$base_table','_','.'));
END IF;
END \$\$;");
return ();
}
-sub rename_child_bre {
+sub create_child_bre {
my $dbh = shift;
$dbh->do("DO \$\$
BEGIN
- ALTER TABLE biblio_record_entry RENAME TO biblio_record_entry_legacy;
+ CREATE TABLE $MIGSCHEMA.$stage_table (x_migrate BOOLEAN DEFAULT TRUE, x_source TEXT) INHERITS ($MIGSCHEMA.$base_table);
END \$\$;");
return ();
sub stage_record {
my $dbh = shift;
my $record = shift;
- my $source = shift;
+ my $x_source = shift;
+ my $source = shift;
my $last_xact = "'$MIGSCHEMA'";
$record = '$_$' . $record . '$_$';
my $sql;
- if ($source eq 'default') { $sql = "INSERT INTO $MIGSCHEMA.biblio_record_entry (last_xact_id,marc) VALUES ($last_xact,$record);"; }
- else { $sql = "INSERT INTO $MIGSCHEMA.biblio_record_entry (last_xact_id,marc,x_source) VALUES ($last_xact,$record,'$source');"; }
+ if ($x_source eq 'default') { $sql = "INSERT INTO $MIGSCHEMA.$stage_table (last_xact_id,marc,source) VALUES ($last_xact,$record,$source);"; }
+ else { $sql = "INSERT INTO $MIGSCHEMA.$stage_table (last_xact_id,marc,x_source,source) VALUES ($last_xact,$record,'$x_source',$source);"; }
my $sth = $dbh->prepare($sql);
$sth->execute();
return;