Merge "Add semantic tags to license info text"
[lhc/web/wiklou.git] / includes / installer / MysqlUpdater.php
index c63c59c..bc7725e 100644 (file)
@@ -20,8 +20,8 @@
  * @file
  * @ingroup Deployment
  */
-use Wikimedia\Rdbms\Field;
 use Wikimedia\Rdbms\MySQLField;
+use Wikimedia\Rdbms\IDatabase;
 use MediaWiki\MediaWikiServices;
 
 /**
@@ -267,7 +267,7 @@ class MysqlUpdater extends DatabaseUpdater {
 
                        // 1.25
                        // note this patch covers other _comment and _description fields too
-                       [ 'modifyField', 'recentchanges', 'rc_comment', 'patch-editsummary-length.sql' ],
+                       [ 'doExtendCommentLengths' ],
 
                        // 1.26
                        [ 'dropTable', 'hitcounter' ],
@@ -329,6 +329,12 @@ class MysqlUpdater extends DatabaseUpdater {
                        [ 'renameIndex', 'l10n_cache', 'lc_lang_key', 'PRIMARY', false,
                                'patch-l10n_cache-primary-key.sql' ],
                        [ 'doUnsignedSyncronisation' ],
+
+                       // 1.31
+                       [ 'addTable', 'slots', 'patch-slots.sql' ],
+                       [ 'addTable', 'content', 'patch-content.sql' ],
+                       [ 'addTable', 'slot_roles', 'patch-slot_roles.sql' ],
+                       [ 'addTable', 'content_models', 'patch-content_models.sql' ],
                ];
        }
 
@@ -390,7 +396,7 @@ class MysqlUpdater extends DatabaseUpdater {
                global $IP;
 
                if ( !$this->doTable( 'interwiki' ) ) {
-                       return true;
+                       return;
                }
 
                if ( $this->db->tableExists( "interwiki", __METHOD__ ) ) {
@@ -531,25 +537,12 @@ class MysqlUpdater extends DatabaseUpdater {
                                ) );
                        }
                        $sql = "SELECT cur_title, cur_namespace, cur_id, cur_timestamp FROM $cur WHERE ";
-                       $firstCond = true;
+                       $dupeTitles = [];
                        foreach ( $duplicate as $ns => $titles ) {
-                               if ( $firstCond ) {
-                                       $firstCond = false;
-                               } else {
-                                       $sql .= ' OR ';
-                               }
-                               $sql .= "( cur_namespace = {$ns} AND cur_title in (";
-                               $first = true;
-                               foreach ( $titles as $t ) {
-                                       if ( $first ) {
-                                               $sql .= $this->db->addQuotes( $t );
-                                               $first = false;
-                                       } else {
-                                               $sql .= ', ' . $this->db->addQuotes( $t );
-                                       }
-                               }
-                               $sql .= ") ) \n";
+                               $dupeTitles[] = "( cur_namespace = {$ns} AND cur_title in ("
+                                       . $this->db->makeList( $titles ) . ") ) \n";
                        }
+                       $sql .= $this->db->makeList( $dupeTitles, IDatabase::LIST_OR );
                        # By sorting descending, the most recent entry will be the first in the list.
                        # All following entries will be deleted by the next while-loop.
                        $sql .= 'ORDER BY cur_namespace, cur_title, cur_timestamp DESC';
@@ -1181,6 +1174,22 @@ class MysqlUpdater extends DatabaseUpdater {
                );
        }
 
+       protected function doExtendCommentLengths() {
+               $table = $this->db->tableName( 'revision' );
+               $res = $this->db->query( "SHOW COLUMNS FROM $table LIKE 'rev_comment'" );
+               $row = $this->db->fetchObject( $res );
+
+               if ( $row && ( $row->Type !== "varbinary(767)" || $row->Default !== "" ) ) {
+                       $this->applyPatch(
+                               'patch-editsummary-length.sql',
+                               false,
+                               'Extending edit summary lengths (and setting defaults)'
+                       );
+               } else {
+                       $this->output( '...comment fields are up to date' );
+               }
+       }
+
        public function getSchemaVars() {
                global $wgDBTableOptions;