46 $blockQuery = DatabaseBlock::getQueryInfo();
48 $max = $db->newSelectQueryBuilder()
49 ->select(
'MAX(ipb_user)' )
51 ->caller( __METHOD__ )
56 for ( $from = 1; $from <= $max; $from += $batchSize ) {
57 $to = min( $max, $from + $batchSize - 1 );
58 $this->
output(
"Cleaning up duplicate ipb_user ($from-$to of $max)\n" );
62 $res = $db->newSelectQueryBuilder()
63 ->select(
'ipb_user' )
66 'ipb_user >= ' . $from,
67 'ipb_user <= ' . (
int)$to,
69 ->groupBy(
'ipb_user' )
70 ->having(
'COUNT(*) > 1' )
71 ->caller( __METHOD__ )
73 foreach ( $res as $row ) {
75 $res2 = $db->newSelectQueryBuilder()
76 ->select( $blockQuery[
'fields'] )
77 ->tables( $blockQuery[
'tables'] )
79 'ipb_user' => $row->ipb_user,
81 ->joinConds( $blockQuery[
'joins'] )
82 ->caller( __METHOD__ )
84 foreach ( $res2 as $row2 ) {
85 $block = DatabaseBlock::newFromRow( $row2 );
93 if ( $keep ===
null && $block->getExpiry() !== $bestBlock->getExpiry() ) {
95 $keep = $block->getExpiry() > $bestBlock->getExpiry();
97 if ( $keep ===
null ) {
98 if ( $block->isCreateAccountBlocked() xor $bestBlock->isCreateAccountBlocked() ) {
99 $keep = $block->isCreateAccountBlocked();
100 } elseif ( $block->isEmailBlocked() xor $bestBlock->isEmailBlocked() ) {
101 $keep = $block->isEmailBlocked();
102 } elseif ( $block->isUsertalkEditAllowed() xor $bestBlock->isUsertalkEditAllowed() ) {
103 $keep = $block->isUsertalkEditAllowed();
108 $delete[] = $bestBlock->getId();
111 $delete[] = $block->getId();
117 $db->newDeleteQueryBuilder()
118 ->deleteFrom(
'ipblocks' )
119 ->where( [
'ipb_id' => $delete ] )
120 ->caller( __METHOD__ )->execute();
125 for ( $from = 1; $from <= $max; $from += $batchSize ) {
126 $to = min( $max, $from + $batchSize - 1 );
127 $this->
output(
"Cleaning up mismatched user name ($from-$to of $max)\n" );
129 $res = $db->newSelectQueryBuilder()
130 ->select( [
'ipb_id',
'user_name' ] )
131 ->tables( [
'ipblocks',
'user' ] )
133 'ipb_user = user_id',
134 "ipb_user >= " . $from,
135 "ipb_user <= " . (
int)$to,
136 'ipb_address != user_name',
138 ->caller( __METHOD__ )
140 foreach ( $res as $row ) {
143 [
'ipb_address' => $row->user_name ],
144 [
'ipb_id' => $row->ipb_id ],
150 $this->
output(
"Done!\n" );