Instead of exiting the do...while loop only once a query returns zero
rows, exit whenever fewer rows than the batch size are returned. This
could save quite a bit of time when the highest nonexistent page_id
found is a relatively low one.
Follows-up
40e300b8273d.
Bug: T44180
Change-Id: I14d2d48c2405fcc0bd05a3181ba6293caef5298c
$this->output( "0.." );
do {
$this->output( "0.." );
do {
- $list = $dbr->selectFieldValues(
+ $ids = $dbr->selectFieldValues(
array( 'DISTINCT', 'ORDER BY' => $field, 'LIMIT' => $batchSize )
);
array( 'DISTINCT', 'ORDER BY' => $field, 'LIMIT' => $batchSize )
);
- if ( $list ) {
- $counter += count( $list );
+ $numIds = count( $ids );
+ if ( $numIds ) {
+ $counter += $numIds;
- $dbw->delete( $table, array( $field => $list ), __METHOD__ );
+ $dbw->delete( $table, array( $field => $ids ), __METHOD__ );
$this->output( $counter . ".." );
$this->output( $counter . ".." );
- $start = $list[count( $list ) - 1] + 1;
+ $start = $ids[$numIds - 1] + 1;
+ } while ( $numIds >= $batchSize );
$this->output( "\n" );
wfWaitForSlaves();
$this->output( "\n" );
wfWaitForSlaves();