/** * Get the text of the current revision. No side-effects... * * @return String|bool The text of the current revision. False on failure */ public function getRawText() { $this->loadLastEdit(); if ($this->mLastRevision) { return $this->mLastRevision->getRawText(); } return false; }
public function execute() { $db = wfGetDB(DB_MASTER); if (!$db->tableExists('revision')) { $this->error("revision table does not exist", true); } $this->output("Populating rev_len column\n"); $start = $db->selectField('revision', 'MIN(rev_id)', false, __FUNCTION__); $end = $db->selectField('revision', 'MAX(rev_id)', false, __FUNCTION__); if (is_null($start) || is_null($end)) { $this->output("...revision table seems to be empty.\n"); $db->insert('updatelog', array('ul_key' => 'populate rev_len'), __METHOD__, 'IGNORE'); return; } # Do remaining chunks $blockStart = intval($start); $blockEnd = intval($start) + $this->mBatchSize - 1; $count = 0; $missing = 0; while ($blockStart <= $end) { $this->output("...doing rev_id from {$blockStart} to {$blockEnd}\n"); $res = $db->select('revision', Revision::selectFields(), array("rev_id >= {$blockStart}", "rev_id <= {$blockEnd}", "rev_len IS NULL"), __METHOD__); # Go through and update rev_len from these rows. foreach ($res as $row) { $rev = new Revision($row); $text = $rev->getRawText(); if (!is_string($text)) { # This should not happen, but sometimes does (bug 20757) $this->output("Text of revision {$row->rev_id} unavailable!\n"); $missing++; } else { # Update the row... $db->update('revision', array('rev_len' => strlen($text)), array('rev_id' => $row->rev_id), __METHOD__); $count++; } } $blockStart += $this->mBatchSize; $blockEnd += $this->mBatchSize; wfWaitForSlaves(5); } $logged = $db->insert('updatelog', array('ul_key' => 'populate rev_len'), __METHOD__, 'IGNORE'); if ($logged) { $this->output("rev_len population complete ... {$count} rows changed ({$missing} missing)\n"); return true; } else { $this->output("Could not insert rev_len population row.\n"); return false; } }
/** * @param $row * @param $table * @param $idCol * @param $prefix * @return bool */ protected function upgradeRow($row, $table, $idCol, $prefix) { $db = $this->getDB(DB_MASTER); if ($table === 'archive') { $rev = Revision::newFromArchiveRow($row); } else { $rev = new Revision($row); } $text = $rev->getRawText(); if (!is_string($text)) { # This should not happen, but sometimes does (bug 20757) $this->output("Text of revision with {$idCol}={$row->{$idCol}} unavailable!\n"); return false; } else { $db->update($table, array("{$prefix}_sha1" => Revision::base36Sha1($text)), array($idCol => $row->{$idCol}), __METHOD__); return true; } }