Provide not IS based implementation

Signed-off-by: Madhura Jayaratne <madhura.cj@gmail.com>
This commit is contained in:
Madhura Jayaratne 2014-11-06 12:38:02 +05:30
parent e46ff7db49
commit 93d23e4494

View File

@ -157,23 +157,77 @@ class PMA_NavigationTree
/*
* @todo describe a scenario where this code is executed
*/
$query = "SELECT (COUNT(DB_first_level) DIV %d) * %d ";
$query .= "from ( ";
$query .= " SELECT distinct SUBSTRING_INDEX(SCHEMA_NAME, ";
$query .= " '{$GLOBALS['cfg']['NavigationTreeDbSeparator']}', 1) ";
$query .= " DB_first_level ";
$query .= " FROM INFORMATION_SCHEMA.SCHEMATA ";
$query .= " WHERE `SCHEMA_NAME` < '%s' ";
$query .= ") t ";
if (! $GLOBALS['cfg']['Server']['DisableIS']) {
$query = "SELECT (COUNT(DB_first_level) DIV %d) * %d ";
$query .= "from ( ";
$query .= " SELECT distinct SUBSTRING_INDEX(SCHEMA_NAME, ";
$query .= " '{$GLOBALS['cfg']['NavigationTreeDbSeparator']}', 1) ";
$query .= " DB_first_level ";
$query .= " FROM INFORMATION_SCHEMA.SCHEMATA ";
$query .= " WHERE `SCHEMA_NAME` < '%s' ";
$query .= ") t ";
$retval = $GLOBALS['dbi']->fetchValue(
sprintf(
$query,
(int)$GLOBALS['cfg']['FirstLevelNavigationItems'],
(int)$GLOBALS['cfg']['FirstLevelNavigationItems'],
PMA_Util::sqlAddSlashes($GLOBALS['db'])
)
);
$retval = $GLOBALS['dbi']->fetchValue(
sprintf(
$query,
(int)$GLOBALS['cfg']['FirstLevelNavigationItems'],
(int)$GLOBALS['cfg']['FirstLevelNavigationItems'],
PMA_Util::sqlAddSlashes($GLOBALS['db'])
)
);
} else {
$prefixMap = array();
if ($GLOBALS['dbs_to_test'] === false) {
$handle = $GLOBALS['dbi']->tryQuery("SHOW DATABASES");
if ($handle !== false) {
while ($arr = $GLOBALS['dbi']->fetchArray($handle)) {
if (strcasecmp($arr[0], $GLOBALS['db']) < 0) {
$prefix = strstr(
$arr[0],
$GLOBALS['cfg']['NavigationTreeDbSeparator'],
true
);
if ($prefix === false) {
$prefix = $arr[0];
}
$prefixMap[$prefix] = 1;
} else {
break;
}
}
}
} else {
$databases = array();
foreach ($GLOBALS['dbs_to_test'] as $db) {
$query = "SHOW DATABASES LIKE '" . $db . "'";
$handle = $GLOBALS['dbi']->tryQuery($query);
if ($handle !== false) {
while ($arr = $GLOBALS['dbi']->fetchArray($handle)) {
$databases[] = $arr[0];
}
}
}
sort($databases);
foreach ($databases as $database) {
if (strcasecmp($database, $GLOBALS['db']) < 0) {
$prefix = strstr(
$database,
$GLOBALS['cfg']['NavigationTreeDbSeparator'],
true
);
if ($prefix === false) {
$prefix = $database;
}
$prefixMap[$prefix] = 1;
} else {
break;
}
}
}
$navItems = (int) $GLOBALS['cfg']['FirstLevelNavigationItems'];
$retval = floor((count($prefixMap) / $navItems)) * $navItems;
}
}
return $retval;
}