/**
* Run migration
*
* @param string $direction, up or down direction of migration process
* @return boolean Status of the process
* @throws MigrationException
*/
public function run($direction)
{
if (!in_array($direction, array('up', 'down'))) {
throw new MigrationException($this, sprintf(__d('migrations', 'Migration direction (%s) is not one of valid directions.'), $direction), E_USER_NOTICE);
}
$this->direction = $direction;
$null = null;
$this->db = ConnectionManager::getDataSource($this->connection);
$this->db->cacheSources = false;
$this->db->begin($null);
$this->Schema = new CakeSchema(array('connection' => $this->connection));
try {
$this->_invokeCallbacks('beforeMigration', $direction);
$result = $this->_run();
$this->_clearCache();
$this->_invokeCallbacks('afterMigration', $direction);
if (!$result) {
return false;
}
} catch (Exception $e) {
$this->db->rollback($null);
throw $e;
}
return $this->db->commit($null);
}