32 $endId = $dbr->newSelectQueryBuilder()
33 ->select(
'MAX(old_id)' )
35 ->caller( __METHOD__ )->fetchField();
40 $binSize = intval( 10 ** ( floor( log10( $endId ) ) - 3 ) );
41 if ( $binSize < 100 ) {
44 echo
"Using bin size of $binSize\n";
49 IF(old_flags LIKE
'%external%',
50 IF(old_text REGEXP
'^DB://[[:alnum:]]+/[0-9]+/[0-9a-f]{32}$',
52 IF(old_text REGEXP
'^DB://[[:alnum:]]+/[0-9]+/[0-9]{1,6}$',
54 IF(old_text REGEXP
'^DB://[[:alnum:]]+/[0-9]+$',
60 IF(old_flags LIKE
'%object%',
61 TRIM(
'"' FROM SUBSTRING_INDEX(SUBSTRING_INDEX(old_text,
':', 3),
':', -1)),
67 for ( $rangeStart = 0; $rangeStart < $endId; $rangeStart += $binSize ) {
68 if ( $rangeStart / $binSize % 10 == 0 ) {
71 $res = $dbr->newSelectQueryBuilder()
72 ->select( [
'old_flags',
'class' => $classSql,
'count' =>
'COUNT(*)' ] )
74 ->where( $dbr->expr(
'old_id',
'>=', intval( $rangeStart ) ) )
75 ->andWhere( $dbr->expr(
'old_id',
'<', intval( $rangeStart + $binSize ) ) )
76 ->groupBy( [
'old_flags',
'class' ] )
77 ->caller( __METHOD__ )->fetchResultSet();
79 foreach ( $res as $row ) {
80 $flags = $row->old_flags;
81 if ( $flags ===
'' ) {
87 if ( !isset( $stats[$flags][$class] ) ) {
88 $stats[$flags][$class] = [
90 'first' => $rangeStart,
94 $entry =& $stats[$flags][$class];
95 $entry[
'count'] += $count;
96 $entry[
'last'] = max( $entry[
'last'], $rangeStart + $binSize );
102 $format =
"%-29s %-39s %-19s %-29s\n";
103 printf( $format,
"Flags",
"Class",
"Count",
"old_id range" );
104 echo str_repeat(
'-', 120 ) .
"\n";
105 foreach ( $stats as $flags => $flagStats ) {
106 foreach ( $flagStats as $class => $entry ) {
107 printf( $format, $flags, $class, $entry[
'count'],
108 sprintf(
"%-13d - %-13d", $entry[
'first'], $entry[
'last'] ) );