/** * Constructor * * @param $db DatabaseBase object to perform updates on * @param $shared bool Whether to perform updates on shared tables * @param $maintenance Maintenance Maintenance object which created us */ protected function __construct(DatabaseBase &$db, $shared, Maintenance $maintenance = null) { $this->db = $db; $this->db->setFlag(DBO_DDLMODE); // For Oracle's handling of schema files $this->shared = $shared; if ($maintenance) { $this->maintenance = $maintenance; } else { $this->maintenance = new FakeMaintenance(); } $this->initOldGlobals(); $this->loadExtensions(); wfRunHooks('LoadExtensionSchemaUpdates', array($this)); }
/** * Create database tables from scratch. * * @return Status */ public function createTables() { $status = $this->getConnection(); if (!$status->isOK()) { return $status; } $this->db->selectDB($this->getVar('wgDBname')); if ($this->db->tableExists('archive', __METHOD__)) { $status->warning('config-install-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($this->db->getSchemaPath()); if ($error !== true) { $this->db->reportQueryError($error, 0, '', __METHOD__); $this->db->rollback(__METHOD__); $status->fatal('config-install-tables-failed', $error); } else { $this->db->commit(__METHOD__); } // Resume normal operations if ($status->isOk()) { $this->enableLB(); } return $status; }
/** * Apply a SQL source file to the database as part of running an installation step. * * @param string $sourceFileMethod * @param string $stepName * @param string $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(array($this->db, $sourceFileMethod))); 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 = array( 'ul_key' => $key ); if ( $val && $this->canUseNewUpdatelog() ) { $values['ul_value'] = $val; } $this->db->insert( 'updatelog', $values, __METHOD__, 'IGNORE' ); $this->db->setFlag( DBO_DDLMODE ); }