if ( !self::$dbSetup ) {
$this->setupAllTestDBs();
$this->addCoreDBData();
-
- if ( ( $this->db->getType() == 'oracle' || !self::$useTemporaryTables ) && self::$reuseDB ) {
- $this->resetDB( $this->db, $this->tablesUsed );
- }
}
// TODO: the DB setup should be done in setUpBeforeClass(), so the test DB
// This would also remove the need for the HACK that is oncePerClass().
if ( $this->oncePerClass() ) {
$this->setUpSchema( $this->db );
+ $this->resetDB( $this->db, $this->tablesUsed );
$this->addDBDataOnce();
}
$singletons = $wrappedProvider->singletons;
if ( $provider instanceof MonologSpi ) {
if ( !isset( $this->loggers[$channel] ) ) {
- $this->loggers[$channel] = isset( $singletons['loggers'][$channel] )
- ? $singletons['loggers'][$channel] : null;
+ $this->loggers[$channel] = $singletons['loggers'][$channel] ?? null;
}
$singletons['loggers'][$channel] = $logger;
} elseif ( $provider instanceof LegacySpi ) {
if ( !isset( $this->loggers[$channel] ) ) {
- $this->loggers[$channel] = isset( $singletons[$channel] ) ? $singletons[$channel] : null;
+ $this->loggers[$channel] = $singletons[$channel] ?? null;
}
$singletons[$channel] = $logger;
} else {
}
/**
- * Undoes the dpecified schema overrides..
+ * Undoes the specified schema overrides..
* Called once per test class, just before addDataOnce().
*
* @param IMaintainableDatabase $db
$this->ensureMockDatabaseConnection( $db );
$oldOverrides = $oldOverrides + self::$schemaOverrideDefaults;
- $originalTables = $this->listOriginalTables( $db );
+ $originalTables = $this->listOriginalTables( $db, 'unprefixed' );
// Drop tables that need to be restored or removed.
$tablesToDrop = array_merge( $oldOverrides['create'], $oldOverrides['alter'] );
*/
private function setUpSchema( IMaintainableDatabase $db ) {
// Undo any active overrides.
- $oldOverrides = isset( $db->_schemaOverrides ) ? $db->_schemaOverrides
- : self::$schemaOverrideDefaults;
+ $oldOverrides = $db->_schemaOverrides ?? self::$schemaOverrideDefaults;
if ( $oldOverrides['alter'] || $oldOverrides['create'] || $oldOverrides['drop'] ) {
$this->undoSchemaOverrides( $db, $oldOverrides );
$this->ensureMockDatabaseConnection( $db );
// Drop the tables that will be created by the schema scripts.
- $originalTables = $this->listOriginalTables( $db );
+ $originalTables = $this->listOriginalTables( $db, 'unprefixed' );
$tablesToDrop = array_intersect( $originalTables, $overrides['create'] );
if ( $tablesToDrop ) {
* Lists all tables in the live database schema.
*
* @param IMaintainableDatabase $db
+ * @param string $prefix Either 'prefixed' or 'unprefixed'
* @return array
*/
- private function listOriginalTables( IMaintainableDatabase $db ) {
+ private function listOriginalTables( IMaintainableDatabase $db, $prefix = 'prefixed' ) {
if ( !isset( $db->_originalTablePrefix ) ) {
throw new LogicException( 'No original table prefix know, cannot list tables!' );
}
$originalTables = $db->listTables( $db->_originalTablePrefix, __METHOD__ );
+ if ( $prefix === 'unprefixed' ) {
+ $originalPrefixRegex = '/^' . preg_quote( $db->_originalTablePrefix ) . '/';
+ $originalTables = array_map(
+ function ( $pt ) use ( $originalPrefixRegex ) {
+ return preg_replace( $originalPrefixRegex, '', $pt );
+ },
+ $originalTables
+ );
+ }
+
return $originalTables;
}
throw new LogicException( 'No original table prefix know, cannot restore tables!' );
}
- $originalTables = $this->listOriginalTables( $db );
+ $originalTables = $this->listOriginalTables( $db, 'unprefixed' );
$tables = array_intersect( $tables, $originalTables );
$dbClone = new CloneDatabase( $db, $tables, $db->tablePrefix(), $db->_originalTablePrefix );
if ( $db ) {
$userTables = [ 'user', 'user_groups', 'user_properties', 'actor' ];
$pageTables = [ 'page', 'revision', 'ip_changes', 'revision_comment_temp',
- 'revision_actor_temp', 'comment' ];
+ 'revision_actor_temp', 'comment', 'archive' ];
$coreDBDataTables = array_merge( $userTables, $pageTables );
// If any of the user or page tables were marked as used, we should clear all of them.
uasort(
$array,
function ( $a, $b ) {
- return serialize( $a ) > serialize( $b ) ? 1 : -1;
+ return serialize( $a ) <=> serialize( $b );
}
);
}