]> git.joonet.de Git - adminer.git/commitdiff
Speed up alter table
authorJakub Vrana <jakub@vrana.cz>
Fri, 9 Feb 2018 20:11:12 +0000 (21:11 +0100)
committerJakub Vrana <jakub@vrana.cz>
Fri, 9 Feb 2018 20:11:12 +0000 (21:11 +0100)
Alter table mysql.user takes 0.9 instead of 1.5 seconds.

adminer/include/editing.inc.php
adminer/static/editing.js
changes.txt

index b0252456ae002d1316bbb3c7948e85736b05bd75..8145f3fbc2754b44faeab5703ee98ec76454094f 100644 (file)
@@ -266,7 +266,7 @@ function edit_fields($fields, $collations, $type = "TABLE", $foreign_keys = arra
 </thead>
 <tbody>
 <?php
-       echo script("qsl('tbody').onkeydown = editingKeydown;");
+       echo script("mixin(qsl('tbody'), {onclick: editingClick, onkeydown: editingKeydown});");
        foreach ($fields as $i => $field) {
                $i++;
                $orig = $field[($_POST ? "orig" : "field")];
@@ -279,18 +279,18 @@ function edit_fields($fields, $collations, $type = "TABLE", $foreign_keys = arra
 <?php edit_type("fields[$i]", $field, $collations, $foreign_keys); ?>
 <?php if ($type == "TABLE") { ?>
 <td><?php echo checkbox("fields[$i][null]", 1, $field["null"], "", "", "block", "label-null"); ?>
-<td><label class="block"><input type="radio" name="auto_increment_col" value="<?php echo $i; ?>"<?php if ($field["auto_increment"]) { ?> checked<?php } ?> aria-labelledby="label-ai"><?php echo script("qsl('input').onclick = function () { var field = this.form['fields[' + this.value + '][field]']; if (!field.value) { field.value = 'id'; field.oninput(); } }"); ?></label><td><?php
+<td><label class="block"><input type="radio" name="auto_increment_col" value="<?php echo $i; ?>"<?php if ($field["auto_increment"]) { ?> checked<?php } ?> aria-labelledby="label-ai"></label><td><?php
 echo checkbox("fields[$i][has_default]", 1, $field["has_default"], "", "", "", "label-default"); ?><input name="fields[<?php echo $i; ?>][default]" value="<?php echo h($field["default"]); ?>" aria-labelledby="label-default"><?php echo script("qsl('input').oninput = function () { this.previousSibling.checked = true; }", ""); ?>
 <?php echo (support("comment") ? "<td" . ($comments ? "" : " class='hidden'") . "><input name='fields[$i][comment]' value='" . h($field["comment"]) . "' maxlength='" . (min_version(5.5) ? 1024 : 255) . "' aria-labelledby='label-comment'>" : ""); ?>
 <?php } ?>
 <?php
                echo "<td>";
                echo (support("move_col") ?
-                       "<input type='image' class='icon' name='add[$i]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>&nbsp;" . script("qsl('input').onclick = partial(editingAddRow, 1);", "")
-                       . "<input type='image' class='icon' name='up[$i]' src='../adminer/static/up.gif' alt='↑' title='" . lang('Move up') . "'>&nbsp;" . script("qsl('input').onclick = partial(editingMoveRow, 1);", "")
-                       . "<input type='image' class='icon' name='down[$i]' src='../adminer/static/down.gif' alt='↓' title='" . lang('Move down') . "'>&nbsp;" . script("qsl('input').onclick = partial(editingMoveRow, 0);", "")
+                       "<input type='image' class='icon' name='add[$i]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>&nbsp;"
+                       . "<input type='image' class='icon' name='up[$i]' src='../adminer/static/up.gif' alt='↑' title='" . lang('Move up') . "'>&nbsp;"
+                       . "<input type='image' class='icon' name='down[$i]' src='../adminer/static/down.gif' alt='↓' title='" . lang('Move down') . "'>&nbsp;"
                : "");
-               echo ($orig == "" || support("drop_col") ? "<input type='image' class='icon' name='drop_col[$i]' src='../adminer/static/cross.gif' alt='x' title='" . lang('Remove') . "'>" . script("qsl('input').onclick = partial(editingRemoveRow, 'fields\$1[field]');") : "");
+               echo ($orig == "" || support("drop_col") ? "<input type='image' class='icon' name='drop_col[$i]' src='../adminer/static/cross.gif' alt='x' title='" . lang('Remove') . "'>" : "");
        }
 }
 
index e6ddf74d7d75fee6b0f04aadd4b5b31ea9240e11..1d79a702f4f18310cb70cf78375068352932c7f5 100644 (file)
@@ -188,6 +188,42 @@ function idfEscape(s) {
        return s.replace(/`/, '``');
 }
 
+
+
+/** Handle clicks on fields editing
+* @param MouseEvent
+* @return boolean false to cancel action
+*/
+function editingClick(event) {
+       var el = getTarget(event);
+       if (!isTag(el, 'input')) {
+               el = parentTag(target, 'label');
+               el = el && qs('input', el);
+       }
+       if (el) {
+               var name = el.name;
+               if (/^add\[/.test(name)) {
+                       editingAddRow.call(el, 1);
+               } else if (/^up\[/.test(name)) {
+                       editingMoveRow.call(el, 1);
+               } else if (/^down\[/.test(name)) {
+                       editingMoveRow.call(el);
+               } else if (/^drop_col\[/.test(name)) {
+                       editingRemoveRow.call(el, 'fields\$1[field]');
+               } else {
+                       if (name == 'auto_increment_col') {
+                               var field = el.form['fields[' + el.value + '][field]'];
+                               if (!field.value) {
+                                       field.value = 'id';
+                                       field.oninput();
+                               }
+                       }
+                       return;
+               }
+               return false;
+       }
+}
+
 /** Detect foreign key
 * @this HTMLInputElement
 */
@@ -269,7 +305,7 @@ function editingAddRow(focus) {
 }
 
 /** Remove table row for field
-* @param string
+* @param string regular expression replacement
 * @return boolean false
 * @this HTMLInputElement
 */
@@ -281,16 +317,16 @@ function editingRemoveRow(name) {
 }
 
 /** Move table row for field
-* @param boolean direction to move row, true for up or false for down
+* @param [boolean]
 * @return boolean false for success
 * @this HTMLInputElement
 */
-function editingMoveRow(dir){
+function editingMoveRow(up){
        var row = parentTag(this, 'tr');
        if (!('nextElementSibling' in row)) {
                return true;
        }
-       row.parentNode.insertBefore(row, dir
+       row.parentNode.insertBefore(row, up
                ? row.previousElementSibling
                : row.nextElementSibling ? row.nextElementSibling.nextElementSibling : row.parentNode.firstChild);
        return false;
index 22b3f5bc184a064c0f07eddad8cccd83cf707707..36035ed35014b716ffedda775bf15cc12c9e2010 100644 (file)
@@ -1,6 +1,7 @@
 Adminer 4.6.2-dev:
 Semi-transparent border on table actions
 Shorten JSON values in select (bug #594)
+Speed up alter table (regression from 4.4.0)
 PostgreSQL: Fix exporting string default values
 PostgreSQL: Fix exporting sequences in PostgreSQL 10