/** * Apply a SQL source file to the database as part of running an installation step. * * @param string $sourceFileMethod * @param string $stepName * @param bool $archiveTableMustNotExist * @return Status */ private function stepApplySourceFile($sourceFileMethod, $stepName, $archiveTableMustNotExist = false) { $status = $this->getConnection(); if (!$status->isOK()) { return $status; } $this->db->selectDB($this->getVar('wgDBname')); if ($archiveTableMustNotExist && $this->db->tableExists('archive', __METHOD__)) { $status->warning("config-{$stepName}-tables-exist"); $this->enableLB(); return $status; } $this->db->setFlag(DBO_DDLMODE); // For Oracle's handling of schema files $this->db->begin(__METHOD__); $error = $this->db->sourceFile(call_user_func([$this, $sourceFileMethod], $this->db)); if ($error !== true) { $this->db->reportQueryError($error, 0, '', __METHOD__); $this->db->rollback(__METHOD__); $status->fatal("config-{$stepName}-tables-failed", $error); } else { $this->db->commit(__METHOD__); } // Resume normal operations if ($status->isOK()) { $this->enableLB(); } return $status; }
/** * Helper function: Add a key to the updatelog table * Obviously, only use this for updates that occur after the updatelog table was * created! * @param string $key Name of key to insert * @param string $val [optional] Value to insert along with the key */ public function insertUpdateRow($key, $val = null) { $this->db->clearFlag(DBO_DDLMODE); $values = ['ul_key' => $key]; if ($val && $this->canUseNewUpdatelog()) { $values['ul_value'] = $val; } $this->db->insert('updatelog', $values, __METHOD__, 'IGNORE'); $this->db->setFlag(DBO_DDLMODE); }