- do {
- // $dbw->delete() doesn't support LIMIT :(
- $where = $moduleList ? "md_module NOT IN ($moduleList)" : '1=1';
- $dbw->query( "DELETE FROM $modDeps WHERE $where LIMIT $limit", __METHOD__ );
+ $i = 1;
+ foreach ( array_chunk( $rows, $this->mBatchSize ) as $chunk ) {
+ // WHERE ( mod=A AND skin=A ) OR ( mod=A AND skin=B) ..
+ $conds = array_map( function ( stdClass $row ) use ( $dbw ) {
+ return $dbw->makeList( (array)$row, IDatabase::LIST_AND );
+ }, $chunk );
+ $conds = $dbw->makeList( $conds, IDatabase::LIST_OR );
+
+ $this->beginTransaction( $dbw, __METHOD__ );
+ $dbw->query( "DELETE FROM $modDeps WHERE $conds", __METHOD__ );