diff --git a/adminer/drivers/mysql.inc.php b/adminer/drivers/mysql.inc.php index d77289ec..a2728941 100644 --- a/adminer/drivers/mysql.inc.php +++ b/adminer/drivers/mysql.inc.php @@ -797,12 +797,27 @@ if (!defined("DRIVER")) { * @return bool */ function move_tables($tables, $views, $target) { + global $connection; $rename = array(); - foreach (array_merge($tables, $views) as $table) { // views will report SQL error + foreach ($tables as $table) { $rename[] = table($table) . " TO " . idf_escape($target) . "." . table($table); } - return queries("RENAME TABLE " . implode(", ", $rename)); + if (!$rename || queries("RENAME TABLE " . implode(", ", $rename))) { + $definitions = array(); + foreach ($views as $table) { + $definitions[table($table)] = view($table); + } + $connection->select_db($target); + $db = idf_escape(DB); + foreach ($definitions as $name => $view) { + if (!queries("CREATE VIEW $name AS " . str_replace(" $db.", " ", $view["select"])) || !queries("DROP VIEW $db.$name")) { + return false; + } + } + return true; + } //! move triggers + return false; } /** Copy tables to other schema diff --git a/changes.txt b/changes.txt index d5211cc1..5c6929de 100644 --- a/changes.txt +++ b/changes.txt @@ -1,5 +1,6 @@ Adminer 4.8.1-dev: Fix more PHP 8 warnings (bug #781) +MySQL: Allow moving views to other DB and renaming DB with views (bug #783) Adminer 4.8.0 (released 2021-02-10): Support function default values in insert (bug #713)