* @file
* @ingroup Deployment
*/
+use MediaWiki\MediaWikiServices;
require_once __DIR__ . '/../../maintenance/Maintenance.php';
/**
* Handle to the database subclass
*
- * @var DatabaseBase
+ * @var Database
*/
protected $db;
/**
* Constructor
*
- * @param DatabaseBase $db To perform updates on
+ * @param Database $db To perform updates on
* @param bool $shared Whether to perform updates on shared tables
* @param Maintenance $maintenance Maintenance object which created us
*/
- protected function __construct( DatabaseBase &$db, $shared, Maintenance $maintenance = null ) {
+ protected function __construct( Database &$db, $shared, Maintenance $maintenance = null ) {
$this->db = $db;
$this->db->setFlag( DBO_DDLMODE ); // For Oracle's handling of schema files
$this->shared = $shared;
}
/**
- * @param DatabaseBase $db
+ * @param Database $db
* @param bool $shared
* @param Maintenance $maintenance
*
* @throws MWException
* @return DatabaseUpdater
*/
- public static function newForDB( &$db, $shared = false, $maintenance = null ) {
+ public static function newForDB( Database $db, $shared = false, $maintenance = null ) {
$type = $db->getType();
if ( in_array( $type, Installer::getDBTypes() ) ) {
$class = ucfirst( $type ) . 'Updater';
/**
* Get a database connection to run updates
*
- * @return DatabaseBase
+ * @return Database
*/
public function getDB() {
return $this->db;
}
}
+ /**
+ * Get appropriate schema variables in the current database connection.
+ *
+ * This should be called after any request data has been imported, but before
+ * any write operations to the database. The result should be passed to the DB
+ * setSchemaVars() method.
+ *
+ * @return array
+ * @since 1.28
+ */
+ public function getSchemaVars() {
+ return []; // DB-type specific
+ }
+
/**
* Do all the updates
*
public function doUpdates( $what = [ 'core', 'extensions', 'stats' ] ) {
global $wgVersion;
+ $this->db->setSchemaVars( $this->getSchemaVars() );
+
$what = array_flip( $what );
$this->skipSchema = isset( $what['noschema'] ) || $this->fileHandle !== null;
if ( isset( $what['core'] ) ) {
* @param bool $passSelf Whether to pass this object we calling external functions
*/
private function runUpdates( array $updates, $passSelf ) {
+ $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+
$updatesDone = [];
$updatesSkipped = [];
foreach ( $updates as $params ) {
flush();
if ( $ret !== false ) {
$updatesDone[] = $origParams;
- wfGetLBFactory()->waitForReplication();
+ $lbFactory->waitForReplication();
} else {
$updatesSkipped[] = [ $func, $params, $origParams ];
}