]> git.joonet.de Git - adminer.git/commitdiff
FOUND_ROWS only with GROUP BY
authorjakubvrana <jakubvrana@7c3ca157-0c34-0410-bff1-cbf682f78f5c>
Tue, 28 Jul 2009 14:21:05 +0000 (14:21 +0000)
committerjakubvrana <jakubvrana@7c3ca157-0c34-0410-bff1-cbf682f78f5c>
Tue, 28 Jul 2009 14:21:05 +0000 (14:21 +0000)
Default order only by common indexes in Editor
Descending default order with date in Editor

git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@930 7c3ca157-0c34-0410-bff1-cbf682f78f5c

adminer/include/adminer.inc.php
adminer/select.inc.php
editor/include/adminer.inc.php

index b43b8595b02049f36fefbfaf15970aad5325ce7c..529f24d0e331f0a27ae1990b75a32aae2fd34e6d 100644 (file)
@@ -266,7 +266,7 @@ class Adminer {
        * @param array
        * @return array expressions to join by AND
        */
-       function selectSearchProcess($indexes, $fields) {
+       function selectSearchProcess($fields, $indexes) {
                global $dbh;
                $return = array();
                foreach ($indexes as $i => $index) {
@@ -297,14 +297,13 @@ class Adminer {
        
        /** Process order box in select
        * @param array
-       * @param array result of selectColumnsProcess()
        * @param array
        * @return array expressions to join by comma
        */
-       function selectOrderProcess($columns, $select, $indexes) {
+       function selectOrderProcess($fields, $indexes) {
                $return = array();
                foreach ((array) $_GET["order"] as $key => $val) {
-                       if (isset($columns[$val]) || in_array($val, $select, true)) {
+                       if (isset($fields[$val]) || preg_match('~^[A-Z0-9_]+\\(`(?:[^`]+|``)+`\\)$~', $val)) {
                                $return[] = idf_escape($val) . (isset($_GET["desc"][$key]) ? " DESC" : "");
                        }
                }
index 429516dc909bd9f5883e5d637864d9cb408aa96b..97cc423f97f4dad5672a09904a4ce65cc8eccae5 100644 (file)
@@ -24,8 +24,8 @@ function apply_sql_function($function, $column) {
 }
 
 list($select, $group) = $adminer->selectColumnsProcess($columns, $indexes);
-$where = $adminer->selectSearchProcess($indexes, $fields);
-$order = $adminer->selectOrderProcess($columns, $select, $indexes);
+$where = $adminer->selectSearchProcess($fields, $indexes);
+$order = $adminer->selectOrderProcess($fields, $indexes);
 $limit = $adminer->selectLimitProcess();
 $from = ($select ? implode(", ", $select) : "*") . " FROM " . idf_escape($_GET["select"]) . ($where ? " WHERE " . implode(" AND ", $where) : "");
 $group_by = ($group && count($group) < count($select) ? " GROUP BY " . implode(", ", $group) : "") . ($order ? " ORDER BY " . implode(", ", $order) : "");
@@ -140,7 +140,7 @@ if (!$columns) {
        $adminer->selectActionPrint($text_length);
        echo "</form>\n";
        
-       $query = "SELECT " . (intval($limit) && count($group) < count($select) ? "SQL_CALC_FOUND_ROWS " : "") . $from . $group_by . (strlen($limit) ? " LIMIT " . intval($limit) . (intval($_GET["page"]) ? " OFFSET " . ($limit * $_GET["page"]) : "") : "");
+       $query = "SELECT " . (intval($limit) && $group && count($group) < count($select) ? "SQL_CALC_FOUND_ROWS " : "") . $from . $group_by . (strlen($limit) ? " LIMIT " . intval($limit) . (intval($_GET["page"]) ? " OFFSET " . ($limit * $_GET["page"]) : "") : "");
        echo $adminer->selectQuery($query);
        
        $result = $dbh->query($query);
@@ -158,7 +158,7 @@ if (!$columns) {
                        }
                        $result->free();
                        // use count($rows) without LIMIT, COUNT(*) without grouping, FOUND_ROWS otherwise (slowest)
-                       $found_rows = (intval($limit) && count($group) < count($select)
+                       $found_rows = (intval($limit) && $group && count($group) < count($select)
                                ? $dbh->result($dbh->query(" SELECT FOUND_ROWS()")) // space to allow mysql.trace_mode
                                : count($rows)
                        );
index 483ff1c1b2169ee750faad65e604f9794de72091..88d8561974a0d81d3c2c6240af447f706d06ced3 100644 (file)
@@ -152,13 +152,13 @@ ORDER BY ORDINAL_POSITION"); //! requires MySQL 5
        function selectOrderPrint($order, $columns, $indexes) {
                //! desc
                $orders = array();
-               foreach ($indexes as $i => $index) {
+               foreach ($indexes as $key => $index) {
                        $order = array();
                        foreach ($index["columns"] as $val) {
                                $order[] = $this->fieldName(array("field" => $val, "comment" => $columns[$val]));
                        }
-                       if (count(array_filter($order, 'strlen')) > 1) {
-                               $orders[$i] = implode(", ", $order);
+                       if (count(array_filter($order, 'strlen')) > 1 && $key != "PRIMARY") {
+                               $orders[$key] = implode(", ", $order);
                        }
                }
                if ($orders) {
@@ -200,7 +200,7 @@ ORDER BY ORDINAL_POSITION"); //! requires MySQL 5
                return array(array(), array());
        }
        
-       function selectSearchProcess($indexes, $fields) {
+       function selectSearchProcess($fields, $indexes) {
                $return = array();
                foreach ((array) $_GET["where"] as $val) {
                        if (strlen("$val[col]$val[val]")) {
@@ -223,16 +223,33 @@ ORDER BY ORDINAL_POSITION"); //! requires MySQL 5
                return $return;
        }
        
-       function selectOrderProcess($columns, $select, $indexes) {
+       function selectOrderProcess($fields, $indexes) {
                if ($_GET["order"]) {
                        return array(idf_escape($_GET["order"][0]) . (isset($_GET["desc"][0]) ? " DESC" : ""));
                }
-               if ($_GET["index_order"]) {
-                       return $indexes[$_GET["index_order"]]["columns"];
+               $index = $indexes[$_GET["index_order"]];
+               if (!strlen($_GET["index_order"])) {
+                       foreach ($indexes as $index) {
+                               if ($index["type"] == "INDEX") {
+                                       break;
+                               }
+                       }
+               }
+               if (!$index) {
+                       return array();
                }
-               unset($indexes["PRIMARY"]);
-               $index = reset($indexes);
-               return ($index ? $index["columns"] : array());
+               $desc = false;
+               foreach ($index["columns"] as $val) {
+                       if (ereg('date|timestamp', $fields[$val]["type"])) {
+                               $desc = true;
+                               break;
+                       }
+               }
+               $return = array();
+               foreach ($index["columns"] as $val) {
+                       $return[] = idf_escape($val) . ($desc ? " DESC" : "");
+               }
+               return $return;
        }
        
        function selectLimitProcess() {