public function createOrUpdateTable($updatedTable, $existingTable, $newTableName)
{
$tableDiff = false;
if ($existingTable !== null) {
/*
* The table already exists
*/
$comparator = new Comparator();
$tableDiff = $comparator->diffTable($existingTable, $updatedTable);
if ($newTableName !== $existingTable->getName()) {
if (!$tableDiff) {
$tableDiff = new TableDiff($existingTable->getName());
}
$tableDiff->newName = $newTableName;
}
} else {
/*
* The table doesn't exist
*/
$tableDiff = new TableDiff($updatedTable->getName(), $updatedTable->getColumns(), [], [], $updatedTable->getIndexes());
$tableDiff->fromTable = $updatedTable;
}
if (!$tableDiff) {
return false;
}
if (!$this->tableHasNameOrColumnChanges($tableDiff) && !$this->tableHasPrimaryKeyChanges($tableDiff)) {
return false;
}
return $this->generateCreateOrUpdateCode($tableDiff, !$existingTable, $updatedTable);
}