Merge "Show descriptive error message on invalid title instead of showing an empty...
[lhc/web/wiklou.git] / includes / db / CloneDatabase.php
index ae47e76..4e43642 100644 (file)
@@ -20,6 +20,7 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Database
  */
 
@@ -62,9 +63,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,22 +87,30 @@ class CloneDatabase {
         * Clone the table structure
         */
        public function cloneTableStructure() {
+               
                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', 'oracle' ) ) ) {
+                               $this->db->dropTable( $tbl, __METHOD__ );
+                               wfDebug( __METHOD__." dropping {$newTableName}\n", true);
+                               //Dropping the oldTable because the prefix was changed
                        }
 
                        # Create new table
+                       wfDebug( __METHOD__." duplicating $oldTableName to $newTableName\n", true );
                        $this->db->duplicateTableStructure( $oldTableName, $newTableName, $this->useTemporaryTables );
+                       
                }
+               
        }
 
        /**
@@ -109,12 +119,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 );
        }
 
        /**
@@ -123,9 +133,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;
        }
 
@@ -134,8 +144,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 ) );
        }
 
        /**
@@ -143,7 +153,7 @@ class CloneDatabase {
         * @param  $prefix
         * @return void
         */
-       public function changeDBPrefix( $db, $prefix ) {
+       public static function changeDBPrefix( $db, $prefix ) {
                $db->tablePrefix( $prefix );
        }
 }