View | Details | Raw Unified | Return to bug 21872
Collapse All | Expand All

(-)a/misc/record_batches.pl (-28 / +35 lines)
Lines 5-16 use C4::Context; Link Here
5
use Getopt::Long;
5
use Getopt::Long;
6
use Pod::Usage;
6
use Pod::Usage;
7
7
8
my $gt_biblionumber;
8
my $start_biblionumber;
9
my $batch_size;
9
my $batch_size;
10
my $help;
10
my $help;
11
GetOptions(
11
GetOptions(
12
    'gt_biblionumber=i' => \$gt_biblionumber,
12
    'startbiblionumber=i' => \$start_biblionumber,
13
    'batch_size=i' => \$batch_size,
13
    'batchsize=i' => \$batch_size,
14
    'h|help|?' => \$help
14
    'h|help|?' => \$help
15
);
15
);
16
if ($help) {
16
if ($help) {
Lines 18-48 if ($help) { Link Here
18
}
18
}
19
19
20
my $dbh = C4::Context->dbh;
20
my $dbh = C4::Context->dbh;
21
my $step = $batch_size || 25000;
21
$batch_size ||= 25000; # TODO: Assert positive number
22
my $offset = 0;
22
23
my $prev_biblionumber;
23
if (!$start_biblionumber) {
24
my ($max_biblionumber) = @{ $dbh->selectcol_arrayref(qq{SELECT MAX(`biblionumber`) FROM `biblio`}) };
24
    my ($min_biblionumber) = @{ $dbh->selectcol_arrayref(qq{SELECT MIN(`biblionumber`) FROM `biblio`}) };
25
my @ranges;
25
    $start_biblionumber = $min_biblionumber;
26
my $biblionumber;
26
}
27
27
28
my @ranges;
28
while (1) {
29
while (1) {
29
    my $query = $gt_biblionumber ?
30
    my $offset = $batch_size - 1;
30
        qq{SELECT `biblionumber` FROM `biblio` WHERE `biblionumber` >= $gt_biblionumber ORDER BY `biblionumber` ASC LIMIT 1 OFFSET $offset} :
31
    my $query =
31
        qq{SELECT `biblionumber` FROM `biblio` ORDER BY `biblionumber` ASC LIMIT 1 OFFSET $offset};
32
        qq{SELECT `biblionumber` FROM `biblio` WHERE `biblionumber` >= $start_biblionumber ORDER BY `biblionumber` ASC LIMIT 2 OFFSET $offset};
32
    my ($biblionumber) = @{ $dbh->selectcol_arrayref($query) };
33
    my ($end_biblionumber, $next_biblionumber) = @{ $dbh->selectcol_arrayref($query) };
33
    if (!$biblionumber) {
34
    if (!$end_biblionumber) {
34
        push @ranges, [$prev_biblionumber, $max_biblionumber];
35
        if ($start_biblionumber) {
36
            my ($max_biblionumber) = @{ $dbh->selectcol_arrayref(qq{SELECT MAX(`biblionumber`) FROM `biblio`}) };
37
            if($max_biblionumber >= $start_biblionumber) {
38
                # @TODO: Option for argument and range separtor?
39
                print join(' ', ($start_biblionumber, $max_biblionumber)) . "\n";
40
41
            }
42
        }
35
        last;
43
        last;
36
    }
44
    }
37
    elsif ($prev_biblionumber) {
45
    else {
38
        push @ranges, [$prev_biblionumber, $biblionumber - 1];
46
        print join(' ', ($start_biblionumber, $end_biblionumber)) . "\n";
47
    }
48
    if ($next_biblionumber) {
49
        $start_biblionumber = $next_biblionumber;
50
    }
51
    else {
52
        last;
39
    }
53
    }
40
    $prev_biblionumber = $biblionumber;
41
    $offset += $step;
42
}
43
44
foreach my $range (@ranges) {
45
    print join(' ', @{$range}) . "\n"; # @TODO: Option for argument and range separtor?
46
}
54
}
47
55
48
=head1 NAME
56
=head1 NAME
Lines 51-57 record batches - This script outputs ranges of biblionumbers Link Here
51
59
52
=head1 SYNOPSIS
60
=head1 SYNOPSIS
53
61
54
record_batches.pl [-h|--help] [--gt_biblionumber=BIBLIONUMBER]
62
record_batches.pl [-h|--help] [--start_biblionumber=BIBLIONUMBER]
55
63
56
=head1 OPTIONS
64
=head1 OPTIONS
57
65
Lines 61-68 record_batches.pl [-h|--help] [--gt_biblionumber=BIBLIONUMBER] Link Here
61
69
62
Print a brief help message.
70
Print a brief help message.
63
71
64
=item B<--gt_biblionumber>
72
=item B<--startbiblionumber>
65
73
66
 --gt_biblionumber=BIBLIONUMBER Output batches with biblionumber >= BIBLIONUMBER
74
 --startbiblionumber=BIBLIONUMBER Output batches with biblionumber >= BIBLIONUMBER
67
75
68
=item B<--batch_size>
76
=item B<--batchsize>
69
- 

Return to bug 21872