36 $maxLtId = (int)$dbr->newSelectQueryBuilder()
37 ->select(
'MAX(lt_id)' )
38 ->from(
'linktarget' )
39 ->caller( __METHOD__ )
43 $maxLtId = min( [ $maxLtId - 1, (
int)( $maxLtId * 0.99 ) ] );
45 $ltCounter = (int)$this->
getOption(
'start', 0 );
47 $this->
output(
"Deleting unused linktarget rows...\n" );
50 while ( $ltCounter < $maxLtId ) {
51 $batchMaxLtId = min( $ltCounter + $this->
getBatchSize(), $maxLtId ) + 1;
52 $this->
output(
"Checking lt_id between $ltCounter and $batchMaxLtId...\n" );
53 $queryBuilder = $dbr->newSelectQueryBuilder()
54 ->select( [
'lt_id' ] )
55 ->from(
'linktarget' );
56 $queryBuilder->where( [
57 $dbr->expr(
'lt_id',
'<', $batchMaxLtId ),
58 $dbr->expr(
'lt_id',
'>', $ltCounter )
60 foreach ( $linksMigration::$mapping as $table => $tableData ) {
61 $queryBuilder->leftJoin( $table,
null, $tableData[
'target_id'] .
'=lt_id' );
62 $queryBuilder->andWhere( [
63 $tableData[
'target_id'] =>
null
66 $ltIdsToDelete = $queryBuilder->caller( __METHOD__ )->fetchFieldValues();
67 if ( !$ltIdsToDelete ) {
74 $queryBuilder = $dbr->newSelectQueryBuilder()
75 ->select( [
'lt_id' ] )
76 ->from(
'linktarget' )
78 'lt_id' => $ltIdsToDelete,
80 foreach ( $linksMigration::$mapping as $table => $tableData ) {
81 $queryBuilder->leftJoin( $table,
null, $tableData[
'target_id'] .
'=lt_id' );
82 $queryBuilder->andWhere( [
83 $tableData[
'target_id'] =>
null
86 $queryBuilder->leftJoin(
'existencelinks',
null,
'exl_target_id=lt_id' )
87 ->andWhere( [
'exl_target_id' =>
null ] );
88 $ltIdsToDelete = $queryBuilder->caller( __METHOD__ )->fetchFieldValues();
89 if ( !$ltIdsToDelete ) {
95 $dbw->newDeleteQueryBuilder()
96 ->deleteFrom(
'linktarget' )
97 ->where( [
'lt_id' => $ltIdsToDelete ] )
98 ->caller( __METHOD__ )->execute();
100 $deleted += count( $ltIdsToDelete );
105 $sleep = (int)$this->
getOption(
'sleep', 0 );
112 "Completed clean up linktarget table, "
113 .
"$deleted rows deleted.\n"