]> git.joonet.de Git - adminer.git/commitdiff
Driver specific move tables
authorJakub Vrana <jakub@vrana.cz>
Wed, 5 May 2010 20:11:24 +0000 (22:11 +0200)
committerJakub Vrana <jakub@vrana.cz>
Wed, 5 May 2010 20:11:24 +0000 (22:11 +0200)
adminer/db.inc.php
adminer/drivers/mysql.inc.php
adminer/drivers/pgsql.inc.php
adminer/drivers/sqlite.inc.php
todo.txt

index 1e4bf485553280fe3c92ba24eb5d45c5d7906754..f95c3b81065d8aff555158d8b9a5ba53aa9b5e44 100644 (file)
@@ -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 "</table>\n";
                if (!information_schema(DB)) {
                        echo "<p><input type='hidden' name='token' value='$token'>" . ($driver == "sql" ? "<input type='submit' value='" . lang('Analyze') . "'> <input type='submit' name='optimize' value='" . lang('Optimize') . "'> <input type='submit' name='check' value='" . lang('Check') . "'> <input type='submit' name='repair' value='" . lang('Repair') . "'> " : "") . "<input type='submit' name='truncate' value='" . lang('Truncate') . "' onclick=\"return confirm('" . lang('Are you sure?') . " (' + formChecked(this, /tables/) + ')');\"> <input type='submit' name='drop' value='" . lang('Drop') . "' onclick=\"return confirm('" . lang('Are you sure?') . " (' + formChecked(this, /tables|views/) + ')');\">\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 "<p>" . lang('Move to other database') . ($dbs ? ": " . html_select("target", $dbs, $db) : ': <input name="target" value="' . h($db) . '">') . " <input type='submit' name='move' value='" . lang('Move') . "'>\n";
                        }
                }
index 0bce831f0d269dbdabf217266c519fd37ea4f4ad..f8099e9b4e1f5f179cd6cd868078c81138645ab5 100644 (file)
@@ -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" => )
index 883034b729b52261704001e6b839584b0589e7f7..230ac7cc0f5c6d44ce24fa717d65f6bb5d1d0c0f 100644 (file)
@@ -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));
index afb46d7596075f357528249b493538dbfbb6df84..06186bc8720e9d6a68c7c1531145bd7fb882a54f 100644 (file)
@@ -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);
index 1454a40a1f466280be1942b3b0874019f3217e3b..215736f6283b82539b49a51c3f55b24a6c28d186 100644 (file)
--- 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