Merge pull request #11000 from bancer/truncate-performance-2

Improved performance of CakeFixtureManager.
This commit is contained in:
Mark Story 2017-08-11 21:48:01 -04:00 committed by GitHub
commit 12a2909e71

View file

@ -175,7 +175,7 @@ class CakeFixtureManager {
} }
/** /**
* Runs the drop and create commands on the fixtures if necessary. * Runs the drop, create and truncate commands on the fixtures if necessary.
* *
* @param CakeTestFixture $fixture the fixture object to create * @param CakeTestFixture $fixture the fixture object to create
* @param DataSource $db the datasource instance to use * @param DataSource $db the datasource instance to use
@ -191,6 +191,7 @@ class CakeFixtureManager {
} }
} }
if (!empty($fixture->created) && in_array($db->configKeyName, $fixture->created)) { if (!empty($fixture->created) && in_array($db->configKeyName, $fixture->created)) {
$fixture->truncate($db);
return; return;
} }
@ -205,6 +206,7 @@ class CakeFixtureManager {
$fixture->create($db); $fixture->create($db);
} else { } else {
$fixture->created[] = $db->configKeyName; $fixture->created[] = $db->configKeyName;
$fixture->truncate($db);
} }
} }
@ -229,7 +231,6 @@ class CakeFixtureManager {
$db = ConnectionManager::getDataSource($fixture->useDbConfig); $db = ConnectionManager::getDataSource($fixture->useDbConfig);
$db->begin(); $db->begin();
$this->_setupTable($fixture, $db, $test->dropTables); $this->_setupTable($fixture, $db, $test->dropTables);
$fixture->truncate($db);
$fixture->insert($db); $fixture->insert($db);
$db->commit(); $db->commit();
} }
@ -274,7 +275,6 @@ class CakeFixtureManager {
$db = ConnectionManager::getDataSource($fixture->useDbConfig); $db = ConnectionManager::getDataSource($fixture->useDbConfig);
} }
$this->_setupTable($fixture, $db, $dropTables); $this->_setupTable($fixture, $db, $dropTables);
$fixture->truncate($db);
$fixture->insert($db); $fixture->insert($db);
} else { } else {
throw new UnexpectedValueException(__d('cake_dev', 'Referenced fixture class %s not found', $name)); throw new UnexpectedValueException(__d('cake_dev', 'Referenced fixture class %s not found', $name));