Merge "Special:Newpages feed now shows first revision instead of latest revision"
[lhc/web/wiklou.git] / includes / installer / MysqlInstaller.php
index 09051f4..0250b6f 100644 (file)
@@ -51,7 +51,7 @@ class MysqlInstaller extends DatabaseInstaller {
 
        public $supportedEngines = [ 'InnoDB', 'MyISAM' ];
 
-       public $minimumVersion = '5.0.3';
+       public $minimumVersion = '5.5.8';
 
        public $webUserPrivs = [
                'DELETE',
@@ -179,8 +179,8 @@ class MysqlInstaller extends DatabaseInstaller {
 
                # Determine existing default character set
                if ( $conn->tableExists( "revision", __METHOD__ ) ) {
-                       $revision = $conn->buildLike( $this->getVar( 'wgDBprefix' ) . 'revision' );
-                       $res = $conn->query( "SHOW TABLE STATUS $revision", __METHOD__ );
+                       $revision = $this->escapeLikeInternal( $this->getVar( 'wgDBprefix' ) . 'revision', '\\' );
+                       $res = $conn->query( "SHOW TABLE STATUS LIKE '$revision'", __METHOD__ );
                        $row = $conn->fetchObject( $res );
                        if ( !$row ) {
                                $this->parent->showMessage( 'config-show-table-status' );
@@ -221,6 +221,16 @@ class MysqlInstaller extends DatabaseInstaller {
                $wgDBpassword = $this->getVar( '_InstallPassword' );
        }
 
+       /**
+        * @param string $s
+        * @return string
+        */
+       protected function escapeLikeInternal( $s, $escapeChar = '`' ) {
+               return str_replace( [ $escapeChar, '%', '_' ],
+                       [ "{$escapeChar}{$escapeChar}", "{$escapeChar}%", "{$escapeChar}_" ],
+                       $s );
+       }
+
        /**
         * Get a list of storage engines that are available and supported
         *
@@ -574,7 +584,7 @@ class MysqlInstaller extends DatabaseInstaller {
                                                        // If we couldn't create for some bizzare reason and the
                                                        // user probably doesn't exist, skip the grant
                                                        $this->db->rollback( __METHOD__ );
-                                                       $status->warning( 'config-install-user-create-failed', $dbUser, $dqe->getText() );
+                                                       $status->warning( 'config-install-user-create-failed', $dbUser, $dqe->getMessage() );
                                                }
                                        }
                                } else {
@@ -594,7 +604,7 @@ class MysqlInstaller extends DatabaseInstaller {
                                $this->db->commit( __METHOD__ );
                        } catch ( DBQueryError $dqe ) {
                                $this->db->rollback( __METHOD__ );
-                               $status->fatal( 'config-install-user-grant-failed', $dbUser, $dqe->getText() );
+                               $status->fatal( 'config-install-user-grant-failed', $dbUser, $dqe->getMessage() );
                        }
                }