Example #1
0
 /**
  * Clone the table structure
  */
 public function cloneTableStructure()
 {
     global $wgSharedTables, $wgSharedDB;
     foreach ($this->tablesToClone as $tbl) {
         if ($wgSharedDB && in_array($tbl, $wgSharedTables, true)) {
             // Shared tables don't work properly when cloning due to
             // how prefixes are handled (bug 65654)
             throw new RuntimeException("Cannot clone shared table {$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.
         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(), ['postgres', 'oracle'])) {
             if ($oldTableName === $newTableName) {
                 // Last ditch check to avoid data loss
                 throw new LogicException("Not dropping new table, as '{$newTableName}'" . " is name of both the old and the new table.");
             }
             $this->db->dropTable($tbl, __METHOD__);
             wfDebug(__METHOD__ . " dropping {$newTableName}\n");
             // Dropping the oldTable because the prefix was changed
         }
         # Create new table
         wfDebug(__METHOD__ . " duplicating {$oldTableName} to {$newTableName}\n");
         $this->db->duplicateTableStructure($oldTableName, $newTableName, $this->useTemporaryTables);
     }
 }