/** * @param Database $fromDatabase * @param Database $toDatabase * @param array $ignoreList * * @return DatabaseDiff */ public function diffDatabases(Database $fromDatabase, Database $toDatabase, array $ignoreList = []) { $databaseDiff = new DatabaseDiff(); foreach ($fromDatabase->getTables() as $fromTable) { if ($this->isTableIgnored($fromTable->getName(), $ignoreList)) { continue; } if (!$toDatabase->hasTable($fromTable->getName())) { $databaseDiff->addDeletedTable($fromTable); continue; } $toTable = $toDatabase->getTableByName($fromTable->getName()); if ($fromTable->generateCreationScript(true) != $toTable->generateCreationScript(true)) { $changedTable = new ChangedTable($fromTable, $toTable); $this->diffChangedTable($changedTable); $databaseDiff->addChangedTable($changedTable); } } foreach ($toDatabase->getTables() as $toTable) { if ($this->isTableIgnored($toTable->getName(), $ignoreList)) { continue; } if (!$fromDatabase->hasTable($toTable->getName())) { $databaseDiff->addNewTable($toTable); } } return $databaseDiff; }
/** * @param string $sqlScript * * @return Database */ public function parseDatabase($sqlScript) { $database = new Database(); $tables = $this->parseTables($sqlScript); foreach ($tables as $table) { $this->parseTableDefinition($table); $database->addTable($table); } return $database; }