diff --git a/src/Controllers/Database/Structure/CopyStructureController.php b/src/Controllers/Database/Structure/CopyStructureController.php new file mode 100644 index 0000000000..c6d8540b5e --- /dev/null +++ b/src/Controllers/Database/Structure/CopyStructureController.php @@ -0,0 +1,86 @@ +response->setRequestStatus(false); + $this->response->addJSON('message', Message::error(__('No databases selected.'))); + + return $this->response->response(); + } + + $databaseName = DatabaseName::tryFrom($request->getParam('db')); + if ($databaseName === null || ! $this->dbTableExists->selectDatabase($databaseName)) { + $this->response->setRequestStatus(false); + $this->response->addJSON('message', Message::error(__('No databases selected.'))); + + return $this->response->response(); + } + + $this->dbi->selectDb(Current::$database); + + /** @var string[] $tableNames */ + $tableNames = $this->dbi->getTables(Current::$database); + + $baseTables = []; + $views = []; + foreach ($tableNames as $table) { + $object = $this->dbi->getTable(Current::$database, $table); + if ($object->isView()) { + $views[] = $table; + } else { + $baseTables[] = $table; + } + } + + $segments = [ + sprintf('-- Database: %s', Current::$database), + ]; + + foreach ($baseTables as $table) { + $object = $this->dbi->getTable(Current::$database, $table); + $segments[] = $object->showCreate(); + } + + if ($views !== []) { + $segments[] = '-- Views'; + foreach ($views as $table) { + $object = $this->dbi->getTable(Current::$database, $table); + $segments[] = $object->showCreate(); + } + } + + $this->response->addJSON('sql', implode("\n\n", $segments)); + + return $this->response->response(); + } +}