diff --git a/ChangeLog b/ChangeLog index 55e6c1bcd..3ad32c99e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -20,6 +20,7 @@ $HeadURL: https://phpmyadmin.svn.sourceforge.net/svnroot/phpmyadmin/trunk/phpMyA + [export] new export to Texy! markup + [lang] Finnish update, thanks to Jouni Kahkonen + [config] new parameter $cfg['CheckConfigurationPermissions'] ++ [config] new parameter $cfg['Servers'][$i]['ShowDatabasesCommand'] + rfe #1775288 [transformation] proper display if IP-address stored as INT + rfe #1758177 [core] Add the Geometry DataTypes + rfe #1741101, patch #1798184 UUID default for CHAR(36) PRIMARY KEY, diff --git a/libraries/List_Database.class.php b/libraries/List_Database.class.php index 1def30156..4d703c4d6 100644 --- a/libraries/List_Database.class.php +++ b/libraries/List_Database.class.php @@ -49,6 +49,12 @@ require_once './libraries/List.class.php'; * @access protected */ var $_show_databases_disabled = false; + + /** + * @var string command to retrieve databases from server + * @access protected + */ + var $_command = null; /** * Constructor @@ -107,26 +113,30 @@ require_once './libraries/List.class.php'; * @uses $GLOBALS['errno'] * @param string $like_db_name usally a db_name containing wildcards */ - function _retrieve($like_db_name = '') + function _retrieve($like_db_name = null) { if ($this->_show_databases_disabled) { return array(); } - - if (! empty($like_db_name)) { - $like = " LIKE '" . $like_db_name . "';"; + + if (null !== $like_db_name) { + $command = "SHOW DATABASES LIKE '" . $like_db_name . "'"; + } elseif (null === $this->_command) { + $command = str_replace('#user#', $GLOBALS['cfg']['Server']['user'], + $GLOBALS['cfg']['Server']['ShowDatabasesCommand']); + $this->_command = $command; } else { - $like = ";"; + $command = $this->_command; } - $database_list = PMA_DBI_fetch_result('SHOW DATABASES' . $like, null, null, $this->_db_link); + $database_list = PMA_DBI_fetch_result($command, null, null, $this->_db_link); PMA_DBI_getError(); if ($GLOBALS['errno'] !== 0) { // failed to get database list, try the control user // (hopefully there is one and he has SHOW DATABASES right) $this->_db_link = $this->_db_link_control; - $database_list = PMA_DBI_fetch_result('SHOW DATABASES' . $like, null, null, $this->_db_link); + $database_list = PMA_DBI_fetch_result($command, null, null, $this->_db_link); PMA_DBI_getError(); diff --git a/libraries/config.default.php b/libraries/config.default.php index 95ea636fc..5a3aeae80 100644 --- a/libraries/config.default.php +++ b/libraries/config.default.php @@ -328,6 +328,32 @@ $cfg['Servers'][$i]['DisableIS'] = true; */ $cfg['Servers'][$i]['AllowDeny']['rules'] = array(); +/** + * SQL command to fetch available databases + * + * by default most user will be fine with SHOW DATABASES, + * for servers with a huge amount of databases it is possible to + * define a command which executes faster but wiht less information + * + * especialy when accessing database servers from ISPs chaning this command can + * result in a great speed improvement + * + * fasle will disable fetching databases from the server, only databases in + * $cfg['Servers'][$i]['only_db'] will be displayed + * + * #user# will be replaced by current user + * + * example: + * 'SHOW DATABASES' + * "SHOW DATABASES LIKE '#user#\_%'" + * 'SELECT DISTINCT TABLE_SCHEMA FROM information_schema.SCHEMA_PRIVILEGES' + * 'SELECT SCHEMA_NAME FROM information_schema.SCHEMATA' + * false + * + * @global array $cfg['Servers'][$i]['ShowDatabasesCommand'] + */ +$cfg['Servers'][$i]['ShowDatabasesCommand'] = 'SHOW DATABASES'; + /** * Default server (0 = no default server) *