Check database has table before altering.

Work around to prevent several issues with silverstripe-framework#4451 and cwp#0031726.

Throws a LogicException if the table does not exist.
This commit is contained in:
Will Rossiter 2018-07-25 15:05:17 +12:00
parent b984959170
commit 9ec77ab9d3

View File

@ -4,6 +4,7 @@ namespace SilverStripe\ORM\Connect;
use SilverStripe\Core\Config\Config;
use SilverStripe\Core\Convert;
use LogicException;
/**
* Represents schema management object for MySQL
@ -139,9 +140,21 @@ class MySQLSchemaManager extends DBSchemaManager
return $info && strtoupper($info['Table_type']) == 'VIEW';
}
/**
* Renames a table
*
* @param string $oldTableName
* @param string $newTableName
* @throws LogicException
* @return Query
*/
public function renameTable($oldTableName, $newTableName)
{
$this->query("ALTER TABLE \"$oldTableName\" RENAME \"$newTableName\"");
if (!$this->hasTable($oldTableName)) {
throw new LogicException('Table '. $oldTableName . ' does not exist.');
}
return $this->query("ALTER TABLE \"$oldTableName\" RENAME \"$newTableName\"");
}
public function checkAndRepairTable($tableName)