35 $maxLtId = (int)$dbr->newSelectQueryBuilder()
36 ->select(
'MAX(lt_id)' )
37 ->from(
'linktarget' )
38 ->caller( __METHOD__ )
42 $maxLtId = min( [ $maxLtId - 1, (
int)( $maxLtId * 0.99 ) ] );
44 $ltCounter = (int)$this->
getOption(
'start', 0 );
46 $this->
output(
"Deleting unused linktarget rows...\n" );
49 while ( $ltCounter < $maxLtId ) {
50 $batchMaxLtId = min( $ltCounter + $this->
getBatchSize(), $maxLtId ) + 1;
51 $this->
output(
"Checking lt_id between $ltCounter and $batchMaxLtId...\n" );
52 $queryBuilder = $dbr->newSelectQueryBuilder()
53 ->select( [
'lt_id' ] )
54 ->from(
'linktarget' );
55 $queryBuilder->where( [
56 $dbr->expr(
'lt_id',
'<', $batchMaxLtId ),
57 $dbr->expr(
'lt_id',
'>', $ltCounter )
59 foreach ( $linksMigration::$mapping as $table => $tableData ) {
60 $queryBuilder->leftJoin( $table,
null, $tableData[
'target_id'] .
'=lt_id' );
61 $queryBuilder->andWhere( [
62 $tableData[
'target_id'] =>
null
65 $ltIdsToDelete = $queryBuilder->caller( __METHOD__ )->fetchFieldValues();
66 if ( !$ltIdsToDelete ) {
73 $queryBuilder = $dbr->newSelectQueryBuilder()
74 ->select( [
'lt_id' ] )
75 ->from(
'linktarget' )
77 'lt_id' => $ltIdsToDelete,
79 foreach ( $linksMigration::$mapping as $table => $tableData ) {
80 $queryBuilder->leftJoin( $table,
null, $tableData[
'target_id'] .
'=lt_id' );
81 $queryBuilder->andWhere( [
82 $tableData[
'target_id'] =>
null
85 $ltIdsToDelete = $queryBuilder->caller( __METHOD__ )->fetchFieldValues();
86 if ( !$ltIdsToDelete ) {
92 $dbw->newDeleteQueryBuilder()
93 ->deleteFrom(
'linktarget' )
94 ->where( [
'lt_id' => $ltIdsToDelete ] )
95 ->caller( __METHOD__ )->execute();
97 $deleted += count( $ltIdsToDelete );
102 $sleep = (int)$this->
getOption(
'sleep', 0 );
109 "Completed clean up linktarget table, "
110 .
"$deleted rows deleted.\n"