Aaron Schulz has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/312107

Change subject: Inject schema vars into DatabaseMysql
......................................................................

Inject schema vars into DatabaseMysql

Also fix broken patchSql.php maintenance script

Change-Id: I45bccb0e2e10bd06651a551fa08ed0c66d11eb6a
---
M includes/installer/DatabaseUpdater.php
M includes/installer/MysqlUpdater.php
M includes/libs/rdbms/database/DatabaseMysqlBase.php
M maintenance/Maintenance.php
M maintenance/patchSql.php
M maintenance/sql.php
6 files changed, 40 insertions(+), 20 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/07/312107/1

diff --git a/includes/installer/DatabaseUpdater.php 
b/includes/installer/DatabaseUpdater.php
index 0e4b098..0d0da08 100644
--- a/includes/installer/DatabaseUpdater.php
+++ b/includes/installer/DatabaseUpdater.php
@@ -170,14 +170,14 @@
        }
 
        /**
-        * @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';
@@ -403,6 +403,20 @@
        }
 
        /**
+        * 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
         *
         * @param array $what What updates to perform
@@ -410,6 +424,8 @@
        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'] ) ) {
diff --git a/includes/installer/MysqlUpdater.php 
b/includes/installer/MysqlUpdater.php
index 65af086..83c97aa 100644
--- a/includes/installer/MysqlUpdater.php
+++ b/includes/installer/MysqlUpdater.php
@@ -1122,4 +1122,16 @@
                        'Making rev_page_id index non-unique'
                );
        }
+
+       public function getSchemaVars() {
+               $vars = [];
+               $vars['wgDBTableOptions'] = str_replace( 'TYPE', 'ENGINE', 
$GLOBALS['wgDBTableOptions'] );
+               $vars['wgDBTableOptions'] = str_replace(
+                       'CHARSET=mysql4',
+                       'CHARSET=binary',
+                       $vars['wgDBTableOptions']
+               );
+
+               return $vars;
+       }
 }
diff --git a/includes/libs/rdbms/database/DatabaseMysqlBase.php 
b/includes/libs/rdbms/database/DatabaseMysqlBase.php
index 7f67b6e..561da22 100644
--- a/includes/libs/rdbms/database/DatabaseMysqlBase.php
+++ b/includes/libs/rdbms/database/DatabaseMysqlBase.php
@@ -1270,21 +1270,6 @@
        }
 
        /**
-        * @return array
-        */
-       protected function getDefaultSchemaVars() {
-               $vars = parent::getDefaultSchemaVars();
-               $vars['wgDBTableOptions'] = str_replace( 'TYPE', 'ENGINE', 
$GLOBALS['wgDBTableOptions'] );
-               $vars['wgDBTableOptions'] = str_replace(
-                       'CHARSET=mysql4',
-                       'CHARSET=binary',
-                       $vars['wgDBTableOptions']
-               );
-
-               return $vars;
-       }
-
-       /**
         * Get status information from SHOW STATUS in an associative array
         *
         * @param string $which
diff --git a/maintenance/Maintenance.php b/maintenance/Maintenance.php
index 7e0fb45..e1a4dc6 100644
--- a/maintenance/Maintenance.php
+++ b/maintenance/Maintenance.php
@@ -1241,7 +1241,7 @@
         * @param integer $db DB index (DB_REPLICA/DB_MASTER)
         * @param array $groups; default: empty array
         * @param string|bool $wiki; default: current wiki
-        * @return IDatabase
+        * @return Database
         */
        protected function getDB( $db, $groups = [], $wiki = false ) {
                if ( is_null( $this->mDb ) ) {
diff --git a/maintenance/patchSql.php b/maintenance/patchSql.php
index 43fbd38..0c37fee 100644
--- a/maintenance/patchSql.php
+++ b/maintenance/patchSql.php
@@ -45,11 +45,13 @@
 
        public function execute() {
                $dbw = $this->getDB( DB_MASTER );
+               $updater = DatabaseUpdater::newForDB( $dbw, $this );
+
                foreach ( $this->mArgs as $arg ) {
                        $files = [
                                $arg,
-                               $dbw->patchPath( $arg ),
-                               $dbw->patchPath( "patch-$arg.sql" ),
+                               $updater->patchPath( $dbw, $arg ),
+                               $updater->patchPath( $dbw, "patch-$arg.sql" ),
                        ];
                        foreach ( $files as $file ) {
                                if ( file_exists( $file ) ) {
diff --git a/maintenance/sql.php b/maintenance/sql.php
index a9fe45a..fb6a801 100644
--- a/maintenance/sql.php
+++ b/maintenance/sql.php
@@ -80,6 +80,11 @@
                        $this->error( "The server selected ({$db->getServer()}) 
is not a replica DB.", 1 );
                }
 
+               if ( $index === DB_MASTER ) {
+                       $updater = DatabaseUpdater::newForDB( $db, $this );
+                       $db->setSchemaVars( $updater->getSchemaVars() );
+               }
+
                if ( $this->hasArg( 0 ) ) {
                        $file = fopen( $this->getArg( 0 ), 'r' );
                        if ( !$file ) {

-- 
To view, visit https://gerrit.wikimedia.org/r/312107
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I45bccb0e2e10bd06651a551fa08ed0c66d11eb6a
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Aaron Schulz <asch...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to