22 require_once __DIR__ .
'/../Maintenance.php';
28 $endId = $dbr->newSelectQueryBuilder()
29 ->select(
'MAX(old_id)' )
31 ->caller( __METHOD__ )->fetchField();
36 $binSize = intval( 10 ** ( floor( log10( $endId ) ) - 3 ) );
37 if ( $binSize < 100 ) {
40 echo
"Using bin size of $binSize\n";
45 IF(old_flags LIKE
'%external%',
46 IF(old_text REGEXP
'^DB://[[:alnum:]]+/[0-9]+/[0-9a-f]{32}$',
48 IF(old_text REGEXP
'^DB://[[:alnum:]]+/[0-9]+/[0-9]{1,6}$',
50 IF(old_text REGEXP
'^DB://[[:alnum:]]+/[0-9]+$',
56 IF(old_flags LIKE
'%object%',
57 TRIM(
'"' FROM SUBSTRING_INDEX(SUBSTRING_INDEX(old_text,
':', 3),
':', -1)),
63 for ( $rangeStart = 0; $rangeStart < $endId; $rangeStart += $binSize ) {
64 if ( $rangeStart / $binSize % 10 == 0 ) {
67 $res = $dbr->newSelectQueryBuilder()
68 ->select( [
'old_flags',
'class' => $classSql,
'count' =>
'COUNT(*)' ] )
70 ->where( [
'old_id >= ' . intval( $rangeStart ) ] )
71 ->andWhere( [
'old_id < ' . intval( $rangeStart + $binSize ) ] )
72 ->groupBy( [
'old_flags',
'class' ] )
73 ->caller( __METHOD__ )->fetchResultSet();
75 foreach ( $res as $row ) {
76 $flags = $row->old_flags;
77 if ( $flags ===
'' ) {
83 if ( !isset( $stats[$flags][$class] ) ) {
84 $stats[$flags][$class] = [
86 'first' => $rangeStart,
90 $entry =& $stats[$flags][$class];
91 $entry[
'count'] += $count;
92 $entry[
'last'] = max( $entry[
'last'], $rangeStart + $binSize );
98 $format =
"%-29s %-39s %-19s %-29s\n";
99 printf( $format,
"Flags",
"Class",
"Count",
"old_id range" );
100 echo str_repeat(
'-', 120 ) .
"\n";
101 foreach ( $stats as $flags => $flagStats ) {
102 foreach ( $flagStats as $class => $entry ) {
103 printf( $format, $flags, $class, $entry[
'count'],
104 sprintf(
"%-13d - %-13d", $entry[
'first'], $entry[
'last'] ) );
111 require_once RUN_MAINTENANCE_IF_MAIN;
Abstract maintenance class for quickly writing and churning out maintenance scripts with minimal effo...
getDB( $db, $groups=[], $dbDomain=false)
Returns a database to be used by current maintenance script.
fatalError( $msg, $exitCode=1)
Output a message and terminate the current script.
execute()
Do the actual work.