/** * 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); } }