(bug 31420) Fix weird tablesorter bug where headers spanning multiple rows would...
[lhc/web/wiklou.git] / includes / db / CloneDatabase.php
index 6ca0693..f29e0b2 100644 (file)
@@ -62,9 +62,10 @@ class CloneDatabase {
         * @param $tablesToClone Array An array of tables to clone, unprefixed
         * @param $newTablePrefix String Prefix to assign to the tables
         * @param $oldTablePrefix String Prefix on current tables, if not $wgDBprefix
+        * @param $dropCurrentTables bool
         */
        public function __construct( DatabaseBase $db, array $tablesToClone,
-               $newTablePrefix = 'parsertest', $oldTablePrefix = '', $dropCurrentTables = true )
+               $newTablePrefix, $oldTablePrefix = '', $dropCurrentTables = true )
        {
                $this->db = $db;
                $this->tablesToClone = $tablesToClone;
@@ -85,28 +86,30 @@ class CloneDatabase {
         * Clone the table structure
         */
        public function cloneTableStructure() {
-       
-               sort($this->tablesToClone);
                
                foreach( $this->tablesToClone as $tbl ) {
                        # Clean up from previous aborted run.  So that table escaping
                        # works correctly across DB engines, we need to change the pre-
                        # fix back and forth so tableName() works right.
-                       $this->changePrefix( $this->oldTablePrefix );
-                       $oldTableName = $this->db->tableName( $tbl );
                        
-                       $this->changePrefix( $this->newTablePrefix );
-                       $newTableName = $this->db->tableName( $tbl );
-
-                       if( $this->dropCurrentTables && !in_array( $this->db->getType(), array( 'postgres') ) ) {
-                               $this->db->dropTable( $newTableName, __METHOD__ );
+                       self::changePrefix( $this->oldTablePrefix );
+                       $oldTableName = $this->db->tableName( $tbl, 'raw' );
+                       
+                       self::changePrefix( $this->newTablePrefix );
+                       $newTableName = $this->db->tableName( $tbl, 'raw' );
+                       
+                       if( $this->dropCurrentTables && !in_array( $this->db->getType(), array( 'postgres' ) ) ) {
+                               $this->db->dropTable( $tbl, __METHOD__ );
+                               wfDebug( __METHOD__." dropping {$newTableName}\n", true);
+                               //Dropping the oldTable because the prefix was changed
                        }
 
                        # Create new table
-                       wfDebug( "Duplicating $oldTableName to $newTableName\n", __METHOD__ );
+                       wfDebug( __METHOD__." duplicating $oldTableName to $newTableName\n", true );
                        $this->db->duplicateTableStructure( $oldTableName, $newTableName, $this->useTemporaryTables );
                        
                }
+               
        }
 
        /**
@@ -115,12 +118,12 @@ class CloneDatabase {
         */
        public function destroy( $dropTables = false ) {
                if( $dropTables ) {
-                       $this->changePrefix( $this->newTablePrefix );
+                       self::changePrefix( $this->newTablePrefix );
                        foreach( $this->tablesToClone as $tbl ) {
                                $this->db->dropTable( $tbl );
                        }
                }
-               $this->changePrefix( $this->oldTablePrefix );
+               self::changePrefix( $this->oldTablePrefix );
        }
 
        /**
@@ -129,9 +132,9 @@ class CloneDatabase {
         * @param  $prefix
         * @return void
         */
-       protected function changePrefix( $prefix ) {
+       public static function changePrefix( $prefix ) {
                global $wgDBprefix;
-               wfGetLBFactory()->forEachLB( array( $this, 'changeLBPrefix' ), array( $prefix ) );
+               wfGetLBFactory()->forEachLB( array( 'CloneDatabase', 'changeLBPrefix' ), array( $prefix ) );
                $wgDBprefix = $prefix;
        }
 
@@ -140,8 +143,8 @@ class CloneDatabase {
         * @param  $prefix
         * @return void
         */
-       public function changeLBPrefix( $lb, $prefix ) {
-               $lb->forEachOpenConnection( array( $this, 'changeDBPrefix' ), array( $prefix ) );
+       public static function changeLBPrefix( $lb, $prefix ) {
+               $lb->forEachOpenConnection( array( 'CloneDatabase', 'changeDBPrefix' ), array( $prefix ) );
        }
 
        /**
@@ -149,7 +152,7 @@ class CloneDatabase {
         * @param  $prefix
         * @return void
         */
-       public function changeDBPrefix( $db, $prefix ) {
+       public static function changeDBPrefix( $db, $prefix ) {
                $db->tablePrefix( $prefix );
        }
 }