diff --git a/htdocs/sql/db_structure.php b/htdocs/sql/db_structure.php new file mode 100755 --- /dev/null +++ b/htdocs/sql/db_structure.php @@ -0,0 +1,559 @@ +' . $strNoTablesFound . '

' . "\n"; + + if (empty($db_is_information_schema)) { + require './libraries/display_create_table.lib.php'; + } // end if (Create Table dialog) + + /** + * Displays the footer + */ + require_once './libraries/footer.inc.php'; + exit; +} + +// else +// 2. Shows table informations - staybyte - 11 June 2001 + +require_once './libraries/bookmark.lib.php'; + +if (PMA_MYSQL_INT_VERSION >= 40101) { + require_once './libraries/mysql_charsets.lib.php'; + $db_collation = PMA_getDbCollation($db); +} + +// Display function +/** + * void PMA_TableHeader([bool $db_is_information_schema = false]) + * display table header (...) + * + * @uses PMA_showHint() + * @uses PMA_MYSQL_INT_VERSION + * @uses $GLOBALS['cfg']['PropertiesNumColumns'] + * @uses $GLOBALS['is_show_stats'] + * @uses $GLOBALS['strTable'] + * @uses $GLOBALS['strAction'] + * @uses $GLOBALS['strRecords'] + * @uses $GLOBALS['strApproximateCount'] + * @uses $GLOBALS['strType'] + * @uses $GLOBALS['strCollation'] + * @uses $GLOBALS['strSize'] + * @uses $GLOBALS['strOverhead'] + * @uses $GLOBALS['structure_tbl_col_cnt'] + * @param boolean $db_is_information_schema + */ +function PMA_TableHeader($db_is_information_schema = false) +{ + $cnt = 0; // Let's count the columns... + + if ($db_is_information_schema) { + $action_colspan = 3; + } else { + $action_colspan = 6; + } + + echo '
' . "\n" + .'' . "\n" + .'' . "\n" + .' ' . "\n" + .' ' + .' ' . "\n"; + if (!($GLOBALS['cfg']['PropertiesNumColumns'] > 1)) { + echo ' ' . "\n"; + $cnt++; + if (PMA_MYSQL_INT_VERSION >= 40100) { + echo ' ' . "\n"; + $cnt++; + } + } + if ($GLOBALS['is_show_stats']) { + echo ' ' . "\n" + . ' ' . "\n"; + $cnt += 2; + } + echo '' . "\n"; + echo '' . "\n"; + echo '' . "\n"; + $GLOBALS['structure_tbl_col_cnt'] = $cnt + $action_colspan + 3; +} // end function PMA_TableHeader() + +$titles = array(); +if (true == $cfg['PropertiesIconic']) { + $titles['Browse'] = '' . $strBrowse . ''; + $titles['NoBrowse'] = '' . $strBrowse . ''; + $titles['Search'] = '' . $strSearch . ''; + $titles['NoSearch'] = '' . $strSearch . ''; + $titles['Insert'] = '' . $strInsert . ''; + $titles['NoInsert'] = '' . $strInsert . ''; + $titles['Structure'] = '' . $strStructure . ''; + $titles['Drop'] = '' . $strDrop . ''; + $titles['NoDrop'] = '' . $strDrop . ''; + $titles['Empty'] = '' . $strEmpty . ''; + $titles['NoEmpty'] = '' . $strEmpty . ''; + + if ('both' === $cfg['PropertiesIconic']) { + $titles['Browse'] .= $strBrowse; + $titles['Search'] .= $strSearch; + $titles['NoBrowse'] .= $strBrowse; + $titles['NoSearch'] .= $strSearch; + $titles['Insert'] .= $strInsert; + $titles['NoInsert'] .= $strInsert; + $titles['Structure'] .= $strStructure; + $titles['Drop'] .= $strDrop; + $titles['NoDrop'] .= $strDrop; + $titles['Empty'] .= $strEmpty; + $titles['NoEmpty'] .= $strEmpty; + } +} else { + $titles['Browse'] = $strBrowse; + $titles['Search'] = $strSearch; + $titles['NoBrowse'] = $strBrowse; + $titles['NoSearch'] = $strSearch; + $titles['Insert'] = $strInsert; + $titles['NoInsert'] = $strInsert; + $titles['Structure'] = $strStructure; + $titles['Drop'] = $strDrop; + $titles['NoDrop'] = $strDrop; + $titles['Empty'] = $strEmpty; + $titles['NoEmpty'] = $strEmpty; +} + +/** + * Displays the tables list + */ + +$_url_params = array( + 'pos' => $pos, + 'db' => $db); + +PMA_listNavigator($total_num_tables, $pos, $_url_params, 'db_structure.php', 'frame_content', $GLOBALS['cfg']['MaxTableList']); + +?> + + 1 ? ceil($num_tables / $cfg['PropertiesNumColumns']) + 1 : 0; +$row_count = 0; + + +$hidden_fields = array(); +$odd_row = true; +$at_least_one_view_exceeds_max_count = false; +$sum_row_count_pre = ''; + +foreach ($tables as $keyname => $each_table) { + if ($each_table['TABLE_ROWS'] === null || $each_table['TABLE_ROWS'] < $GLOBALS['cfg']['MaxExactCount']) { + $each_table['COUNTED'] = true; + $each_table['TABLE_ROWS'] = PMA_Table::countRecords($db, + $each_table['TABLE_NAME'], $return = true, $force_exact = true); + } else { + $each_table['COUNTED'] = false; + } + + $table_encoded = urlencode($each_table['TABLE_NAME']); + // MySQL < 5.0.13 returns "view", >= 5.0.13 returns "VIEW" + $table_is_view = ($each_table['TABLE_TYPE'] === 'VIEW' + || $each_table['TABLE_TYPE'] === 'SYSTEM VIEW'); + + $alias = (!empty($tooltip_aliasname) && isset($tooltip_aliasname[$each_table['TABLE_NAME']])) + ? str_replace(' ', ' ', htmlspecialchars($tooltip_truename[$each_table['TABLE_NAME']])) + : str_replace(' ', ' ', htmlspecialchars($each_table['TABLE_NAME'])); + $truename = (!empty($tooltip_truename) && isset($tooltip_truename[$each_table['TABLE_NAME']])) + ? str_replace(' ', ' ', htmlspecialchars($tooltip_truename[$each_table['TABLE_NAME']])) + : str_replace(' ', ' ', htmlspecialchars($each_table['TABLE_NAME'])); + + // Sets parameters for links + $tbl_url_query = $url_query . '&table=' . $table_encoded; + $i++; + + $row_count++; + if ($table_is_view) { + $hidden_fields[] = ''; + } + + if ($each_table['TABLE_ROWS'] > 0) { + $browse_table = '' . $titles['Browse'] . ''; + $search_table = '' . $titles['Search'] . ''; + } else { + $browse_table = $titles['NoBrowse']; + $search_table = $titles['NoSearch']; + } + + if (! $db_is_information_schema) { + if (! empty($each_table['TABLE_ROWS'])) { + $empty_table = '' . $titles['Empty'] . ''; + } else { + $empty_table = $titles['NoEmpty']; + } + $drop_query = 'DROP ' + . ($table_is_view ? 'VIEW' : 'TABLE') + . ' ' . PMA_backquote($each_table['TABLE_NAME']); + $drop_message = sprintf( + $table_is_view ? $strViewHasBeenDropped : $strTableHasBeenDropped, + str_replace(' ', ' ', htmlspecialchars($each_table['TABLE_NAME']))); + } + + // loic1: Patch from Joshua Nye to get valid + // statistics whatever is the table type + + if (isset($each_table['TABLE_ROWS'])) { + // MyISAM, ISAM or Heap table: Row count, data size and index size + // is accurate. + if (preg_match('@^(MyISAM|ISAM|HEAP|MEMORY)$@', $each_table['ENGINE'])) { + if ($is_show_stats) { + $tblsize = doubleval($each_table['Data_length']) + doubleval($each_table['Index_length']); + $sum_size += $tblsize; + list($formatted_size, $unit) = PMA_formatByteDown($tblsize, 3, ($tblsize > 0) ? 1 : 0); + if (isset($each_table['Data_free']) && $each_table['Data_free'] > 0) { + list($formatted_overhead, $overhead_unit) = PMA_formatByteDown($each_table['Data_free'], 3, ($each_table['Data_free'] > 0) ? 1 : 0); + $overhead_size += $each_table['Data_free']; + } + } + $sum_entries += $each_table['TABLE_ROWS']; + } elseif ($each_table['ENGINE'] == 'InnoDB') { + // InnoDB table: Row count is not accurate but data and index + // sizes are. + if ($is_show_stats) { + $tblsize = $each_table['Data_length'] + $each_table['Index_length']; + $sum_size += $tblsize; + list($formatted_size, $unit) = PMA_formatByteDown($tblsize, 3, ($tblsize > 0) ? 1 : 0); + } + //$display_rows = ' - '; + $sum_entries += $each_table['TABLE_ROWS']; + } elseif (preg_match('@^(MRG_MyISAM|BerkeleyDB)$@', $each_table['ENGINE'])) { + // Merge or BerkleyDB table: Only row count is accurate. + if ($is_show_stats) { + $formatted_size = ' - '; + $unit = ''; + } + $sum_entries += $each_table['TABLE_ROWS']; + } else { + // Unknown table type. + if ($is_show_stats) { + $formatted_size = 'unknown'; + $unit = ''; + } + } + + if (PMA_MYSQL_INT_VERSION >= 40100) { + if (isset($each_table['Collation'])) { + $collation = '' + . $each_table['Collation'] . ''; + } else { + $collation = '---'; + } + } + + if ($is_show_stats) { + if (isset($formatted_overhead)) { + $overhead = '' . $formatted_overhead + . ' ' . $overhead_unit . '' . "\n"; + unset($formatted_overhead); + $overhead_check .= + "document.getElementById('checkbox_tbl_$i').checked = true;"; + } else { + $overhead = '-'; + } + } // end if + } // end if (isset($each_table['TABLE_ROWS']) + + if ($num_columns > 0 && $num_tables > $num_columns + && (($row_count % $num_columns) == 0)) { + $row_count = 1; + $odd_row = true; + ?> + + +
' . $GLOBALS['strTable'] . '' . "\n" + .' ' . $GLOBALS['strAction'] . "\n" + .' ' . $GLOBALS['strRecords'] + .PMA_showHint($GLOBALS['strApproximateCount']) . "\n" + .' ' . $GLOBALS['strType'] . '' . $GLOBALS['strCollation'] . '' . $GLOBALS['strSize'] . '' . $GLOBALS['strOverhead'] . '
+ + + + /> + + + + + + + + + + + + + + + + = $cfg['MaxExactCountViews']) { + $at_least_one_view_exceeds_max_count = true; + $row_count_pre = '~'; + $sum_row_count_pre = '~'; + $show_superscript = '1'; + } elseif($each_table['ENGINE'] == 'InnoDB' && (! $each_table['COUNTED'])) { + // InnoDB table: we did not get an accurate row count + $row_count_pre = '~'; + $sum_row_count_pre = '~'; + $show_superscript = ''; + } else { + $row_count_pre = ''; + $show_superscript = ''; + } + ?> + + 1)) { ?> + + + + + + + + + + + + - + + --- + + - + - + + + + + + + + + + + + + + + + + 1)) { + $default_engine = PMA_DBI_get_default_engine(); + echo ' ' . "\n" + . ' ' .$default_engine . '' . "\n"; + // Have to account for old MySQL with no collation (bug 1554885) + if (PMA_MYSQL_INT_VERSION >= 40100) { + // we got a case where $db_collation was empty + echo ' ' . "\n"; + if (! empty($db_collation)) { + echo ' ' . $db_collation + . ''; + } + echo ''; + } +} + +if ($is_show_stats) { + ?> + + + + + + + +
+ +<?php echo $strWithChecked; ?> + + +/ + + + +/ + + + + + + + + +
+ +' . "\n"; + echo '1' . PMA_sanitize(sprintf($strViewMaxExactCount, PMA_formatNumber($cfg['MaxExactCountViews'], 0), '[a@./Documentation.html#cfg_MaxExactCountViews@_blank]', '[/a]')) . "\n"; + echo '' . "\n"; +} +// display again the table list navigator +PMA_listNavigator($total_num_tables, $pos, $_url_params, 'db_structure.php', 'frame_content', $GLOBALS['cfg']['MaxTableList']); +?> +
+ +'; +echo ''; +if ($cfg['PropertiesIconic']) { + echo ''; +} +echo $strPrintView . ' '; + +echo ''; +if ($cfg['PropertiesIconic']) { + echo ''; +} +echo $strDataDict . ''; +echo '

'; + +if (empty($db_is_information_schema)) { + require './libraries/display_create_table.lib.php'; +} // end if (Create Table dialog) + +/** + * Displays the footer + */ +require_once './libraries/footer.inc.php'; +?>