X-Git-Url: http://git.equinoxoli.org/?p=migration-tools.git;a=blobdiff_plain;f=mig-bin%2Fmig-stagebibs;h=c86a5720934ff5baf96c7cdaebc15a5def458a20;hp=1801f02ef06ce70bf4868dbd6a54cf06ed62249e;hb=4c85e82ef5d5867c10f9d5a5f4b014b843759d83;hpb=3282699cdc8a2f7701617f496588d4fad3641467 diff --git a/mig-bin/mig-stagebibs b/mig-bin/mig-stagebibs index 1801f02..c86a572 100755 --- a/mig-bin/mig-stagebibs +++ b/mig-bin/mig-stagebibs @@ -3,19 +3,27 @@ ############################################################################### =pod -=item B --file foo.xml +=item B --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 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 @@ -40,54 +48,59 @@ use UNIVERSAL; 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 $auth = ''; +my $serial = ''; my $source = 'default'; -my $file_is_xml = 0; 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, + 'source:s' => \$source, + 'base_table:s' => \$base_table, + 'stage_table:s' => \$stage_table, + 'captions:s' => \$captions, + 'debug:s' => \$debug +); + +#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'; +} + +if ($auth == 1) { + $base_table = 'serial_record_entry'; + $stage_table = 'serial_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 and $serial == 1) { abort('are you sure you want to load these as authorities and serials?'); } + +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,'biblio_record_entry','x_migrate'); -if ($xmig_test == 0) { add_column($dbh,'biblio_record_entry','x_migrate','BOOLEAN DEFAULT TRUE'); } +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 $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 $xsource_test = check_for_column($dbh,$stage_table,'x_source'); +if ($xsource_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'); @@ -111,26 +124,26 @@ print "Finis.\n"; # 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 (); @@ -158,8 +171,8 @@ sub stage_record { 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 ($source eq 'default') { $sql = "INSERT INTO $MIGSCHEMA.$stage_table (last_xact_id,marc) VALUES ($last_xact,$record);"; } + else { $sql = "INSERT INTO $MIGSCHEMA.$stage_table (last_xact_id,marc,x_source) VALUES ($last_xact,$record,'$source');"; } my $sth = $dbh->prepare($sql); $sth->execute(); return;