예제 #1
0
 /**
  * Remove a batch of users
  *
  * @param DatabaseBase $dbw
  * @param int[] $batch list of user IDs to remove
  */
 private function removeBatch(DatabaseBase $dbw, array $batch)
 {
     $rows = 0;
     $dbw->begin(__METHOD__);
     // remove entries from user table
     $dbw->delete(self::USER_TABLE, ['user_id' => $batch], __METHOD__);
     $rows += $dbw->affectedRows();
     // remove entries from user_properties table
     $dbw->delete('user_properties', ['up_user' => $batch], __METHOD__);
     $rows += $dbw->affectedRows();
     $dbw->commit(__METHOD__);
     $this->info('Batch removed', ['batch' => count($batch), 'rows' => $rows]);
 }
예제 #2
0
 /**
  * Perform a cleanup for a set of wikis
  *
  * @param DatabaseBase $db database handler
  * @param string $table name of table to clean up
  * @param string $wiki_id_column table column name to use when querying for wiki ID
  * @param Array $city_ids IDs of wikis to remove from the table
  */
 private function doTableCleanup(DatabaseBase $db, $table, array $city_ids, $wiki_id_column = 'wiki_id')
 {
     $start = microtime(true);
     $db->delete($table, [$wiki_id_column => $city_ids], __METHOD__);
     $rows = $db->affectedRows();
     // just in case MW decides to start a transaction automagically
     $db->commit(__METHOD__);
     Wikia\Logger\WikiaLogger::instance()->info(__METHOD__, ['table' => $table, 'cities' => join(', ', $city_ids), 'count' => count($city_ids), 'took' => round(microtime(true) - $start, 4), 'rows' => $rows]);
     $this->output(sprintf("%s: %s - removed %d rows\n", date('Y-m-d H:i:s'), $table, $rows));
     // throttle delete queries
     if ($rows > 0) {
         sleep(5);
     }
 }
 /**
  * @param DatabaseBase $dbw
  * @param string $table
  * @param string $column
  * @param string $wiki
  */
 function doDeletes($dbw, $table, $column, $wiki)
 {
     if (!$dbw->tableExists($table)) {
         $this->error("Maintenance script cannot be run on this wiki as there is no {$table} table", 1);
     }
     $this->output("{$table}:\n");
     $count = 0;
     do {
         $wikiQuoted = $dbw->addQuotes($wiki);
         $dbw->query("DELETE FROM {$table} WHERE {$column}={$wikiQuoted} LIMIT 500", __METHOD__);
         $affected = $dbw->affectedRows();
         $count += $affected;
         $this->output("{$count}\n");
         wfWaitForSlaves();
     } while ($affected === 500);
     $this->output("{$count} {$table} rows deleted\n");
 }
 /**
  * @param DatabaseBase $dbw
  * @param string $table
  * @param string $column
  * @param string $wiki
  */
 function doDeletes($dbw, $table, $column, $wiki)
 {
     if (!$dbw->tableExists($table)) {
         $this->error("Maintenance script cannot be run on this wiki as there is no {$table} table", 1);
     }
     $this->output("{$table}:\n");
     $count = 0;
     do {
         // https://bugzilla.wikimedia.org/show_bug.cgi?id=52868
         //$dbw->delete(
         //	$table,
         //	array( $column => $wiki ),
         //	__METHOD__,
         //	array( 'LIMIT' => 500 ),
         //);
         $wikiQuoted = $dbw->addQuotes($wiki);
         $dbw->query("DELETE FROM {$table} WHERE {$column}={$wikiQuoted} LIMIT 500", __METHOD__);
         $affected = $dbw->affectedRows();
         $count += $affected;
         $this->output("{$count}\n");
         wfWaitForSlaves();
     } while ($affected === 500);
     $this->output("{$count} {$table} rows deleted\n");
 }
예제 #5
0
파일: sql.php 프로젝트: whysasse/kmwiki
 /**
  * Print the results, callback for $db->sourceStream()
  * @param ResultWrapper $res The results object
  * @param DatabaseBase $db
  */
 public function sqlPrintResult($res, $db)
 {
     if (!$res) {
         // Do nothing
         return;
     } elseif (is_object($res) && $res->numRows()) {
         foreach ($res as $row) {
             $this->output(print_r($row, true));
         }
     } else {
         $affected = $db->affectedRows();
         $this->output("Query OK, {$affected} row(s) affected\n");
     }
 }
예제 #6
0
 /**
  * Add row to the redirect table if this is a redirect, remove otherwise.
  *
  * @param DatabaseBase $dbw
  * @param Title $redirectTitle Title object pointing to the redirect target,
  *   or NULL if this is not a redirect
  * @param null|bool $lastRevIsRedirect If given, will optimize adding and
  *   removing rows in redirect table.
  * @return bool True on success, false on failure
  * @private
  */
 public function updateRedirectOn($dbw, $redirectTitle, $lastRevIsRedirect = null)
 {
     // Always update redirects (target link might have changed)
     // Update/Insert if we don't know if the last revision was a redirect or not
     // Delete if changing from redirect to non-redirect
     $isRedirect = !is_null($redirectTitle);
     if (!$isRedirect && $lastRevIsRedirect === false) {
         return true;
     }
     if ($isRedirect) {
         $this->insertRedirectEntry($redirectTitle);
     } else {
         // This is not a redirect, remove row from redirect table
         $where = array('rd_from' => $this->getId());
         $dbw->delete('redirect', $where, __METHOD__);
     }
     if ($this->getTitle()->getNamespace() == NS_FILE) {
         RepoGroup::singleton()->getLocalRepo()->invalidateImageRedirect($this->getTitle());
     }
     return $dbw->affectedRows() != 0;
 }