mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
FIX: Use DELETE FROM instead of TRUNCATE for clearTable
clearTable is mainly used for clearing data between tests. In this case,
there are very few or zero records, and DELETE FROM is quicker than
TRUNCATE, which works by deleting and recreating the table.
This materially speeds up test execution, at least on MySQL.
Cherry-pick of SS3 ae9ab22a8f
This commit is contained in:
parent
cefb81dabc
commit
0cc72c91ad
@ -523,4 +523,24 @@ class MySQLDatabase extends Database
|
||||
{
|
||||
return 'RAND()';
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear all data in a given table
|
||||
*
|
||||
* @param string $table Name of table
|
||||
*/
|
||||
public function clearTable($table)
|
||||
{
|
||||
$this->query("DELETE FROM \"$table\"");
|
||||
|
||||
// Check if resetting the auto-increment is needed
|
||||
$autoIncrement = $this->preparedQuery(
|
||||
'SELECT "AUTO_INCREMENT" FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?',
|
||||
[ $this->getSelectedDatabase(), $table]
|
||||
)->value();
|
||||
|
||||
if ($autoIncrement > 1) {
|
||||
$this->query("ALTER TABLE \"$table\" AUTO_INCREMENT = 1");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user