@@ -, +, @@ --- misc/record_batches.pl | 61 ++++++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 27 deletions(-) mode change 100644 => 100755 misc/record_batches.pl --- a/misc/record_batches.pl +++ a/misc/record_batches.pl @@ -5,12 +5,12 @@ use C4::Context; use Getopt::Long; use Pod::Usage; -my $gt_biblionumber; +my $start_biblionumber; my $batch_size; my $help; GetOptions( - 'gt_biblionumber=i' => \$gt_biblionumber, - 'batch_size=i' => \$batch_size, + 'startbiblionumber=i' => \$start_biblionumber, + 'batchsize=i' => \$batch_size, 'h|help|?' => \$help ); if ($help) { @@ -18,31 +18,38 @@ if ($help) { } my $dbh = C4::Context->dbh; -my $step = $batch_size || 25000; -my $offset = 0; -my $prev_biblionumber; -my ($max_biblionumber) = @{ $dbh->selectcol_arrayref(qq{SELECT MAX(`biblionumber`) FROM `biblio`}) }; -my @ranges; -my $biblionumber; +$batch_size ||= 25000; # TODO: Assert positive number + +if (!$start_biblionumber) { + my ($min_biblionumber) = @{ $dbh->selectcol_arrayref(qq{SELECT MIN(`biblionumber`) FROM `biblio`}) }; + $start_biblionumber = $min_biblionumber; +} while (1) { - my $query = $gt_biblionumber ? - qq{SELECT `biblionumber` FROM `biblio` WHERE `biblionumber` >= $gt_biblionumber ORDER BY `biblionumber` ASC LIMIT 1 OFFSET $offset} : - qq{SELECT `biblionumber` FROM `biblio` ORDER BY `biblionumber` ASC LIMIT 1 OFFSET $offset}; - my ($biblionumber) = @{ $dbh->selectcol_arrayref($query) }; - if (!$biblionumber) { - push @ranges, [$prev_biblionumber, $max_biblionumber]; + my $offset = $batch_size - 1; + my $query = + qq{SELECT `biblionumber` FROM `biblio` WHERE `biblionumber` >= $start_biblionumber ORDER BY `biblionumber` ASC LIMIT 2 OFFSET $offset}; + my ($end_biblionumber, $next_biblionumber) = @{ $dbh->selectcol_arrayref($query) }; + if (!$end_biblionumber) { + if ($start_biblionumber) { + my ($max_biblionumber) = @{ $dbh->selectcol_arrayref(qq{SELECT MAX(`biblionumber`) FROM `biblio`}) }; + if($max_biblionumber >= $start_biblionumber) { + # @TODO: Option for argument and range separator? + print join(' ', ($start_biblionumber, $max_biblionumber)) . "\n"; + + } + } last; } - elsif ($prev_biblionumber) { - push @ranges, [$prev_biblionumber, $biblionumber - 1]; + else { + print join(' ', ($start_biblionumber, $end_biblionumber)) . "\n"; + } + if ($next_biblionumber) { + $start_biblionumber = $next_biblionumber; + } + else { + last; } - $prev_biblionumber = $biblionumber; - $offset += $step; -} - -foreach my $range (@ranges) { - print join(' ', @{$range}) . "\n"; # @TODO: Option for argument and range separtor? } =head1 NAME @@ -51,7 +58,7 @@ record batches - This script outputs ranges of biblionumbers =head1 SYNOPSIS -record_batches.pl [-h|--help] [--gt_biblionumber=BIBLIONUMBER] +record_batches.pl [-h|--help] [--start_biblionumber=BIBLIONUMBER] =head1 OPTIONS @@ -61,8 +68,8 @@ record_batches.pl [-h|--help] [--gt_biblionumber=BIBLIONUMBER] Print a brief help message. -=item B<--gt_biblionumber> +=item B<--startbiblionumber> - --gt_biblionumber=BIBLIONUMBER Output batches with biblionumber >= BIBLIONUMBER + --startbiblionumber=BIBLIONUMBER Output batches with biblionumber >= BIBLIONUMBER -=item B<--batch_size> +=item B<--batchsize> --