public function finishWrite() { if ($this->readOnly) { return; } elseif (is_null($this->currentLang)) { throw new MWException(__CLASS__ . ': must call startWrite() before finishWrite()'); } $this->dbw->startAtomic(__METHOD__); try { $this->dbw->delete('l10n_cache', ['lc_lang' => $this->currentLang], __METHOD__); foreach (array_chunk($this->batch, 500) as $rows) { $this->dbw->insert('l10n_cache', $rows, __METHOD__); } $this->writesDone = true; } catch (DBQueryError $e) { if ($this->dbw->wasReadOnlyError()) { $this->readOnly = true; // just avoid site down time } else { throw $e; } } $this->dbw->endAtomic(__METHOD__); $this->currentLang = null; $this->batch = []; }
/** * 删除一条数据主键为$id的记录, * @param $id * @param $where 指定匹配字段,默认为主键 * @return true/false */ public final function del($id, $where = null) { if ($where == null) { $where = $this->primary; } return $this->db->delete($id, $this->table, $where); }
/** * Add row to the redirect table if this is a redirect, remove otherwise. * * @param IDatabase $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 = ['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; }