diff --git a/htdocs/sql/libraries/db_info.inc.php b/htdocs/sql/libraries/db_info.inc.php new file mode 100755 --- /dev/null +++ b/htdocs/sql/libraries/db_info.inc.php @@ -0,0 +1,250 @@ += 50002 && $db == 'information_schema') { + $is_show_stats = false; + $db_is_information_schema = true; +} + +/** + * @global array information about tables in db + */ +$tables = array(); + +// When used in Nested table group mode, only show tables matching the given groupname +if (PMA_isValid($tbl_group) && !$cfg['ShowTooltipAliasTB']) { + $tbl_group_sql = ' LIKE "' . PMA_escape_mysql_wildcards($tbl_group) . '%"'; +} else { + $tbl_group_sql = ''; +} + +if ($cfg['ShowTooltip']) { + $tooltip_truename = array(); + $tooltip_aliasname = array(); +} + +// Special speedup for newer MySQL Versions (in 4.0 format changed) +if (true === $cfg['SkipLockedTables']) { + $db_info_result = PMA_DBI_query('SHOW OPEN TABLES FROM ' . PMA_backquote($db) . ';'); + + // Blending out tables in use + if ($db_info_result && PMA_DBI_num_rows($db_info_result) > 0) { + while ($tmp = PMA_DBI_fetch_row($db_info_result)) { + // if in use memorize tablename + if (preg_match('@in_use=[1-9]+@i', $tmp[1])) { + $sot_cache[$tmp[0]] = true; + } + } + PMA_DBI_free_result($db_info_result); + + if (isset($sot_cache)) { + $db_info_result = PMA_DBI_query( + 'SHOW TABLES FROM ' . PMA_backquote($db) . $tbl_group_sql . ';', + null, PMA_DBI_QUERY_STORE); + if ($db_info_result && PMA_DBI_num_rows($db_info_result) > 0) { + while ($tmp = PMA_DBI_fetch_row($db_info_result)) { + if (!isset($sot_cache[$tmp[0]])) { + $sts_result = PMA_DBI_query( + 'SHOW TABLE STATUS FROM ' . PMA_backquote($db) + . ' LIKE \'' . addslashes($tmp[0]) . '\';'); + $sts_tmp = PMA_DBI_fetch_assoc($sts_result); + PMA_DBI_free_result($sts_result); + unset($sts_result); + + if (!isset($sts_tmp['Type']) && isset($sts_tmp['Engine'])) { + $sts_tmp['Type'] =& $sts_tmp['Engine']; + } + + if (!empty($tbl_group) && $cfg['ShowTooltipAliasTB'] + && !preg_match('@' . preg_quote($tbl_group, '@') . '@i', $sts_tmp['Comment'])) { + continue; + } + + if ($cfg['ShowTooltip']) { + PMA_fillTooltip($tooltip_truename, $tooltip_aliasname, $sts_tmp); + } + + $tables[$sts_tmp['Name']] = $sts_tmp; + } else { // table in use + $tables[$tmp[0]] = array('Name' => $tmp[0]); + } + } + if ($GLOBALS['cfg']['NaturalOrder']) { + uksort($tables, 'strnatcasecmp'); + } + + $sot_ready = true; + } elseif ($db_info_result) { + PMA_DBI_free_result($db_info_result); + } + unset($sot_cache); + } + unset($tmp); + } elseif ($db_info_result) { + PMA_DBI_free_result($db_info_result); + } +} + +if (! isset($sot_ready)) { + if (! empty($tbl_group) && ! $cfg['ShowTooltipAliasTB']) { + // only tables for selected group + $tables = PMA_DBI_get_tables_full($db, $tbl_group, true); + } elseif (! empty($tbl_group) && $cfg['ShowTooltipAliasTB']) { + // only tables for selected group, + // but grouping is done on comment ... + $tables = PMA_DBI_get_tables_full($db, $tbl_group, 'comment'); + } else { + // all tables in db + // - get the total number of tables + $tables = PMA_DBI_get_tables($db); + $total_num_tables = count($tables); + if (isset($sub_part) && $sub_part == '_export') { + // (don't fetch only a subset if we are coming from db_export.php, + // because I think it's too risky to display only a subset of the + // table names when exporting a db) + /** + * + * @todo Page selector for table names? + */ + $tables = PMA_DBI_get_tables_full($db, false, false, null, 0, false); + } else { + // fetch the details for a possible limited subset + $tables = PMA_DBI_get_tables_full($db, false, false, null, $pos, true); + } + } + + if ($cfg['ShowTooltip']) { + foreach ($tables as $each_table) { + PMA_fillTooltip($tooltip_truename, $tooltip_aliasname, $each_table); + } + } +} + +/** + * @global int count of tables in db + */ +$num_tables = count($tables); +if (! isset($total_num_tables)) { + $total_num_tables = $num_tables; +} + +/** + * cleanup + */ +unset($each_table, $tbl_group_sql, $db_info_result); + +/** + * Displays top menu links + */ +require './libraries/db_links.inc.php'; +?>