]> git.joonet.de Git - adminer.git/commitdiff
Warn about grouping data without index
authorJakub Vrana <jakub@vrana.cz>
Sun, 29 Jul 2012 20:20:03 +0000 (13:20 -0700)
committerJakub Vrana <jakub@vrana.cz>
Sun, 29 Jul 2012 20:25:59 +0000 (13:25 -0700)
adminer/include/adminer.inc.php
adminer/static/functions.js

index 76103f8937468024809efbca3a96674f1fe24285..fc148c7e127df8a78825ad319de4671a7bede4ec 100644 (file)
@@ -214,7 +214,7 @@ username.form['auth[driver]'].onchange();
                foreach ($select as $key => $val) {
                        $val = $_GET["columns"][$key];
                        echo "<div>" . html_select("columns[$i][fun]", array(-1 => "") + $fun_group, $val["fun"]);
-                       echo "(<select name='columns[$i][col]'><option>" . optionlist($columns, $val["col"], true) . "</select>)</div>\n";
+                       echo "(<select name='columns[$i][col]' onchange='selectFieldChange(this.form);'><option>" . optionlist($columns, $val["col"], true) . "</select>)</div>\n";
                        $i++;
                }
                echo "<div>" . html_select("columns[$i][fun]", array(-1 => "") + $fun_group, "", "this.nextSibling.nextSibling.onchange();");
index d2b8b7f78f9024612e0136a39a33cbfef99c1113..3bd79eb2e95a7559bc626ae827b69e37f18ffb0a 100644 (file)
@@ -233,6 +233,8 @@ function selectFieldChange(form) {
                }
                var ok = true;
                var selects = form.getElementsByTagName('select');
+               var group = false;
+               var columns = {};
                for (var i=0; i < selects.length; i++) {
                        var select = selects[i];
                        var col = selectValue(select);
@@ -246,7 +248,15 @@ function selectFieldChange(form) {
                                        ok = false;
                                }
                        }
-                       //! take grouping in select into account
+                       if ((match = /^(columns.+)fun\]/.exec(select.name))) {
+                               if (/^(avg|count|count distinct|group_concat|max|min|sum)$/.test(col)) {
+                                       group = true;
+                               }
+                               var val = selectValue(form[match[1] + 'col]']);
+                               if (val) {
+                                       columns[col && col != 'count' ? '' : val] = 1;
+                               }
+                       }
                        if (col && /^order/.test(select.name)) {
                                if (!(col in indexColumns)) {
                                         ok = false;
@@ -254,6 +264,13 @@ function selectFieldChange(form) {
                                break;
                        }
                }
+               if (group) {
+                       for (var col in columns) {
+                               if (!(col in indexColumns)) {
+                                       ok = false;
+                               }
+                       }
+               }
                return ok;
        })();
        setHtml('noindex', (ok ? '' : '!'));