diff --git a/adminer/db.inc.php b/adminer/db.inc.php index 1e4bf485..f95c3b81 100644 --- a/adminer/db.inc.php +++ b/adminer/db.inc.php @@ -13,12 +13,7 @@ if ($tables_views && !$error && !$_POST["search"]) { } $message = lang('Tables have been truncated.'); } elseif ($_POST["move"]) { - $rename = array(); - foreach ($tables_views as $table) { - $rename[] = idf_escape($table) . " TO " . idf_escape($_POST["target"]) . "." . idf_escape($table); - } - $result = queries("RENAME TABLE " . implode(", ", $rename)); - //! move triggers + $result = move_tables((array) $_POST["tables"], (array) $_POST["views"], $_POST["target"]); $message = lang('Tables have been moved.'); } elseif ($_POST["drop"]) { if ($_POST["views"]) { @@ -81,9 +76,9 @@ if ($_GET["ns"] !== "") { echo "\n"; if (!information_schema(DB)) { echo "

" . ($driver == "sql" ? " " : "") . " \n"; - $dbs = get_databases(); - if (count($dbs) != 1) { - $db = (isset($_POST["target"]) ? $_POST["target"] : DB); + $dbs = (support("scheme") ? schemas() : get_databases()); + if (count($dbs) != 1 && $driver != "sqlite") { + $db = (isset($_POST["target"]) ? $_POST["target"] : (support("scheme") ? $_GET["ns"] : DB)); echo "

" . lang('Move to other database') . ($dbs ? ": " . html_select("target", $dbs, $db) : ': ') . " \n"; } } diff --git a/adminer/drivers/mysql.inc.php b/adminer/drivers/mysql.inc.php index 0bce831f..f8099e9b 100644 --- a/adminer/drivers/mysql.inc.php +++ b/adminer/drivers/mysql.inc.php @@ -648,6 +648,20 @@ if (!defined("DRIVER")) { return queries("DROP TABLE " . implode(", ", array_map('idf_escape', $tables))); } + /** Move tables to other schema + * @param array + * @param string + * @return bool + */ + function move_tables($tables, $views, $target) { + $rename = array(); + foreach (array_merge($tables, $views) as $table) { // views will report SQL error + $rename[] = idf_escape($table) . " TO " . idf_escape($target) . "." . idf_escape($table); + } + return queries("RENAME TABLE " . implode(", ", $rename)); + //! move triggers + } + /** Get information about trigger * @param string trigger name * @return array array("Trigger" => , "Timing" => , "Event" => , "Statement" => ) diff --git a/adminer/drivers/pgsql.inc.php b/adminer/drivers/pgsql.inc.php index 883034b7..230ac7cc 100644 --- a/adminer/drivers/pgsql.inc.php +++ b/adminer/drivers/pgsql.inc.php @@ -417,6 +417,20 @@ WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = " . $connection->qu return queries("DROP TABLE " . implode(", ", array_map('idf_escape', $tables))); } + function move_tables($tables, $views, $target) { + foreach ($tables as $table) { + if (!queries("ALTER TABLE " . idf_escape($table) . " SET SCHEMA " . idf_escape($target))) { + return false; + } + } + foreach ($views as $table) { + if (!queries("ALTER VIEW " . idf_escape($table) . " SET SCHEMA " . idf_escape($target))) { + return false; + } + } + return true; + } + function trigger($name) { global $connection; $result = $connection->query('SELECT trigger_name AS "Trigger", condition_timing AS "Timing", event_manipulation AS "Event", \'FOR EACH \' || action_orientation AS "Type", action_statement AS "Statement" FROM information_schema.triggers WHERE event_object_table = ' . $connection->quote($_GET["trigger"]) . ' AND trigger_name = ' . $connection->quote($name)); diff --git a/adminer/drivers/sqlite.inc.php b/adminer/drivers/sqlite.inc.php index afb46d75..06186bc8 100644 --- a/adminer/drivers/sqlite.inc.php +++ b/adminer/drivers/sqlite.inc.php @@ -452,6 +452,10 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) { return true; } + function move_tables($tables, $views, $target) { + return false; + } + function trigger($name) { global $connection; preg_match('~^CREATE\\s+TRIGGER\\s*(?:[^`"\\s]+|`[^`]*`|"[^"]*")+\\s*([a-z]+)\\s+([a-z]+)\\s+ON\\s*(?:[^`"\\s]+|`[^`]*`|"[^"]*")+\\s*(?:FOR\\s*EACH\\s*ROW\\s)?(.*)~is', $connection->result("SELECT sql FROM sqlite_master WHERE name = " . $connection->quote($name)), $match); diff --git a/todo.txt b/todo.txt index 1454a40a..215736f6 100644 --- a/todo.txt +++ b/todo.txt @@ -38,7 +38,6 @@ ORDER BY COUNT(*) Export - http://www.postgresql.org/docs/8.4/static/functions-info.html Column rights - http://www.postgresql.org/docs/8.4/static/functions-info.html Dollar terminated string in SQL command -Move table - ALTER TABLE SET SCHEMA Sequences bool in Editor Check PDO driver