]> git.joonet.de Git - adminer.git/commitdiff
Editable index names
authorJakub Vrana <jakub@vrana.cz>
Wed, 13 Jul 2011 13:13:00 +0000 (15:13 +0200)
committerJakub Vrana <jakub@vrana.cz>
Wed, 13 Jul 2011 13:13:00 +0000 (15:13 +0200)
adminer/drivers/mssql.inc.php
adminer/drivers/mysql.inc.php
adminer/drivers/pgsql.inc.php
adminer/drivers/sqlite.inc.php
adminer/indexes.inc.php
adminer/static/editing.js
changes.txt

index d926ff7b03a8de7b27f7a852676954b39ffad46e..84b085340608dda5bb12baa746d7afe4b598104d 100644 (file)
@@ -436,16 +436,16 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
                $index = array();
                $drop = array();
                foreach ($alter as $val) {
-                       if ($val[2]) {
+                       if ($val[2] == "DROP") {
                                if ($val[0] == "PRIMARY") { //! sometimes used also for UNIQUE
-                                       $drop[] = $val[1];
+                                       $drop[] = idf_escape($val[1]);
                                } else {
-                                       $index[] = "$val[1] ON " . table($table);
+                                       $index[] = idf_escape($val[1]) . " ON " . table($table);
                                }
                        } elseif (!queries(($val[0] != "PRIMARY"
-                               ? "CREATE" . ($val[0] != "INDEX" ? " UNIQUE" : "") . " INDEX " . idf_escape(uniqid($table . "_")) . " ON " . table($table)
+                               ? "CREATE $val[0] " . ($val[0] != "INDEX" ? "INDEX " : "") . idf_escape($val[1] != "" ? $val[1] : uniqid($table . "_")) . " ON " . table($table)
                                : "ALTER TABLE " . table($table) . " ADD PRIMARY KEY"
-                       ) . " $val[1]")) {
+                       ) . " $val[2]")) {
                                return false;
                        }
                }
index 6c074157806d010a552e917cac78a53b9f95454f..78604545517153137989f63184736e7d3e92a671 100644 (file)
@@ -611,12 +611,15 @@ if (!defined("DRIVER")) {
        
        /** Run commands to alter indexes
        * @param string escaped table name
-       * @param array of array("index type", "(columns definition)") or array("index type", "escaped name", "DROP")
+       * @param array of array("index type", "name", "(columns definition)") or array("index type", "name", "DROP")
        * @return bool
        */
        function alter_indexes($table, $alter) {
                foreach ($alter as $key => $val) {
-                       $alter[$key] = ($val[2] ? "\nDROP INDEX " : "\nADD $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "")) . $val[1];
+                       $alter[$key] = ($val[2] == "DROP"
+                               ? "\nDROP INDEX " . idf_escape($val[1])
+                               : "\nADD $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "") . ($val[1] != "" ? idf_escape($val[1]) . " " : "") . $val[2]
+                       );
                }
                return queries("ALTER TABLE " . table($table) . implode(",", $alter));
        }
index 2c8767f24c4635a1db2f411af722bbcb21317b5a..821f258e3d1c3b2baa28ac839ea1568f1e6f3986 100644 (file)
@@ -383,10 +383,13 @@ WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.constraint_schema = current_sche
                $drop = array();
                foreach ($alter as $val) {
                        if ($val[0] != "INDEX") {
-                               $create[] = ($val[2] ? "\nDROP CONSTRAINT " : "\nADD $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "")) . $val[1];
-                       } elseif ($val[2]) {
-                               $drop[] = $val[1];
-                       } elseif (!queries("CREATE INDEX " . idf_escape(uniqid($table . "_")) . " ON " . table($table) . " $val[1]")) {
+                               $create[] = ($val[2] == "DROP"
+                                       ? "\nDROP CONSTRAINT " . idf_escape($val[1])
+                                       : "\nADD $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "") . $val[2]
+                               );
+                       } elseif ($val[2] == "DROP") {
+                               $drop[] = idf_escape($val[1]);
+                       } elseif (!queries("CREATE INDEX " . idf_escape($val[1] != "" ? $val[1] : uniqid($table . "_")) . " ON " . table($table) . " $val[2]")) {
                                return false;
                        }
                }
index f2883f5d04281a03f19c709e8ef68dd596ad1837..c7213e484ca9329e386d69a3e7691fdc51afd20c 100644 (file)
@@ -422,7 +422,10 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
        
        function alter_indexes($table, $alter) {
                foreach ($alter as $val) {
-                       if (!queries(($val[2] ? "DROP INDEX" : "CREATE" . ($val[0] != "INDEX" ? " UNIQUE" : "") . " INDEX " . idf_escape(uniqid($table . "_")) . " ON " . table($table)) . " $val[1]")) {
+                       if (!queries($val[2] == "DROP"
+                               ? "DROP INDEX " . idf_escape($val[1])
+                               : "CREATE $val[0] " . ($val[0] != "INDEX" ? "INDEX " : "") . idf_escape($val[1] != "" ? $val[1] : uniqid($table . "_")) . " ON " . table($table) . " $val[2]"
+                       )) {
                                return false;
                        }
                }
index 13b54fdd862b271a8dc49bf1bbaa9caa3091a617..7eb4874d508dc80c546f6463888edd5e1bbe5156 100644 (file)
@@ -13,6 +13,7 @@ if ($jush == "sqlite") { // doesn't support primary key
 if ($_POST && !$error && !$_POST["add"]) {
        $alter = array();
        foreach ($_POST["indexes"] as $index) {
+               $name = $index["name"];
                if (in_array($index["type"], $index_types)) {
                        $columns = array();
                        $lengths = array();
@@ -27,22 +28,23 @@ if ($_POST && !$error && !$_POST["add"]) {
                                }
                        }
                        if ($columns) {
-                               foreach ($indexes as $name => $existing) {
+                               $existing = $indexes[$name];
+                               if ($existing) {
                                        ksort($existing["columns"]);
                                        ksort($existing["lengths"]);
                                        if ($index["type"] == $existing["type"] && array_values($existing["columns"]) === $columns && (!$existing["lengths"] || array_values($existing["lengths"]) === $lengths)) {
                                                // skip existing index
                                                unset($indexes[$name]);
-                                               continue 2;
+                                               continue;
                                        }
                                }
-                               $alter[] = array($index["type"], "(" . implode(", ", $set) . ")");
+                               $alter[] = array($index["type"], $name, "(" . implode(", ", $set) . ")");
                        }
                }
        }
        // drop removed indexes
        foreach ($indexes as $name => $existing) {
-               $alter[] = array($existing["type"], idf_escape($name), "DROP");
+               $alter[] = array($existing["type"], $name, "DROP");
        }
        if (!$alter) {
                redirect(ME . "table=" . urlencode($TABLE));
@@ -69,6 +71,7 @@ if ($_POST) {
        }
 } else {
        foreach ($row["indexes"] as $key => $index) {
+               $row["indexes"][$key]["name"] = $key;
                $row["indexes"][$key]["columns"][] = "";
        }
        $row["indexes"][] = array("columns" => array(1 => ""));
@@ -77,7 +80,7 @@ if ($_POST) {
 
 <form action="" method="post">
 <table cellspacing="0" class="nowrap">
-<thead><tr><th><?php echo lang('Index Type'); ?><th><?php echo lang('Column (length)'); ?></thead>
+<thead><tr><th><?php echo lang('Index Type'); ?><th><?php echo lang('Column (length)'); ?><th><?php echo lang('Name'); ?></thead>
 <?php
 $j = 1;
 foreach ($row["indexes"] as $index) {
@@ -85,10 +88,11 @@ foreach ($row["indexes"] as $index) {
        ksort($index["columns"]);
        $i = 1;
        foreach ($index["columns"] as $key => $column) {
-               echo "<span>" . html_select("indexes[$j][columns][$i]", array(-1 => "") + $fields, $column, ($i == count($index["columns"]) ? "indexesAddColumn(this);" : 1));
+               echo "<span>" . html_select("indexes[$j][columns][$i]", array(-1 => "") + $fields, $column, ($i == count($index["columns"]) ? "indexesAddColumn" : "indexesChangeColumn") . "(this, '" . js_escape($jush == "sql" ? "" : $_GET["indexes"] . "_") . "');");
                echo "<input name='indexes[$j][lengths][$i]' size='2' value='" . h($index["lengths"][$key]) . "'> </span>"; //! hide for non-MySQL drivers, add ASC|DESC
                $i++;
        }
+       echo "<td><input name='indexes[$j][name]' value='" . h($index["name"]) . "'>\n";
        $j++;
 }
 ?>
index c65147d105d05e5b4d508b8d775f28291622027a..a1bdf4d311c1fdb8b2db55a07fd2ecdf6a0ee859 100644 (file)
@@ -343,17 +343,38 @@ function indexesAddRow(field) {
                selects[i].name = selects[i].name.replace(/indexes\[\d+/, '$&1');
                selects[i].selectedIndex = 0;
        }
-       var input = row.getElementsByTagName('input')[0];
-       input.name = input.name.replace(/indexes\[\d+/, '$&1');
-       input.value = '';
+       var inputs = row.getElementsByTagName('input');
+       for (var i=0; i < inputs.length; i++) {
+               inputs[i].name = inputs[i].name.replace(/indexes\[\d+/, '$&1');
+               inputs[i].value = '';
+       }
        parent.parentNode.appendChild(row);
 }
 
+/** Change column in index
+* @param HTMLSelectElement
+* @param string name prefix
+*/
+function indexesChangeColumn(field, prefix) {
+       var columns = field.parentNode.parentNode.getElementsByTagName('select');
+       var names = [];
+       for (var i=0; i < columns.length; i++) {
+               var value = selectValue(columns[i]);
+               if (value) {
+                       names.push(value);
+               }
+       }
+       field.form[field.name.replace(/\].*/, '][name]')].value = prefix + names.join('_');
+}
+
 /** Add column for index
 * @param HTMLSelectElement
+* @param string name prefix
 */
-function indexesAddColumn(field) {
-       field.onchange = function () { };
+function indexesAddColumn(field, prefix) {
+       field.onchange = function () {
+               indexesChangeColumn(field, prefix);
+       };
        var select = field.form[field.name.replace(/\].*/, '][type]')];
        if (!select.selectedIndex) {
                select.selectedIndex = 3;
@@ -367,6 +388,7 @@ function indexesAddColumn(field) {
        input.name = input.name.replace(/\]\[\d+/, '$&1');
        input.value = '';
        field.parentNode.parentNode.appendChild(column);
+       field.onchange();
 }
 
 
index 5a8682c45b1ed81bc3a75b67ff8e28931ec0db80..486d2374424c8cbf336acd32799370b91dfdc0c8 100644 (file)
@@ -1,6 +1,7 @@
 Adminer 3.3.0-dev:
 Use Esc to disable in-place edit
 Shortcut for database privileges
+Editable index names
 Append new index with auto index selection (bug #3282127)
 Preserve original timestamp value in multiple update (bug #3312614)
 Bit type default value