This patch rewrites the handling of row count and table size in db_details to more accurately deal with different table types such as InnoDB. It also re-enables the valid fields of size usage and row stats in tbl_properties for InnoDB tables.
-Josh
diff -r -u phpMyAdmin-2.2.4/db_details.php phpMyAdmin-devel/db_details.php
--- phpMyAdmin-2.2.4/db_details.php Tue Feb 19 18:35:40 2002
+++ phpMyAdmin-devel/db_details.php Thu Feb 21 12:00:00 2002
@@ -237,51 +237,43 @@
</td>
<?php
echo "\n";
- $mergetable = FALSE;
- $nonisam = FALSE;
- if (isset($sts_data['Type'])) {
- if ($sts_data['Type'] == 'MRG_MyISAM') {
- $mergetable = TRUE;
- } else if (!eregi('ISAM|HEAP', $sts_data['Type'])) {
- $nonisam = TRUE;
+
+ if(isset($sts_data['Rows'])) {
+ # MyISAM, ISAM or Heap table: Row count, data size and index size is accurate.
+ if(isset($sts_data['Type']) && ereg('^(MyISAM|ISAM|HEAP)$', $sts_data['Type'])) {
+ $tblsize = $sts_data['Data_length'] + $sts_data['Index_length'];
+ $sum_size += $tblsize;
+ list($formated_size, $unit) = PMA_formatByteDown($tblsize, 3, $tblsize > 0 ? 1 : 0);
+ $sum_entries += $sts_data['Rows'];
+ $display_rows = number_format($sts_data['Rows'], 0, $number_decimal_separator, $number_thousands_separator);
}
- }
- if (isset($sts_data['Rows'])) {
- if ($mergetable == FALSE) {
- if ($cfgShowStats && $nonisam == FALSE) {
- $tblsize = $sts_data['Data_length'] + $sts_data['Index_length'];
- $sum_size += $tblsize;
- if ($tblsize > 0) {
- list($formated_size, $unit) = PMA_formatByteDown($tblsize, 3, 1);
- } else {
- list($formated_size, $unit) = PMA_formatByteDown($tblsize, 3, 0);
- }
- } else if ($cfgShowStats) {
- $formated_size = ' - ';
- $unit = '';
- }
- $sum_entries += $sts_data['Rows'];
+ # InnoDB table: Row count is not accurate but data and index sizes are.
+ elseif(isset($sts_data['Type']) && $sts_data['Type'] == "InnoDB") {
+ $tblsize = $sts_data['Data_length'] + $sts_data['Index_length'];
+ $sum_size += $tblsize;
+ list($formated_size, $unit) = PMA_formatByteDown($tblsize, 3, $tblsize > 0 ? 1 : 0);
+ $display_rows = ' - ';
}
- // MyISAM MERGE Table
- else if ($cfgShowStats && $mergetable == TRUE) {
+
+ # Merge or BerkleyDB table: Only row count is accurate.
+ elseif(isset($sts_data['Type']) && ereg('^(MRG_MyISAM|BerkeleyDB)$', $sts_data['Type'])) {
$formated_size = ' - ';
- $unit = '';
+ $unit = '';
+ $sum_entries += $sts_data['Rows'];
+ $display_rows = number_format($sts_data['Rows'], 0, $number_decimal_separator, $number_thousands_separator);
}
- else if ($cfgShowStats) {
+
+ # Unknown table type.
+ else {
$formated_size = 'unknown';
- $unit = '';
+ $unit = '';
+ $display_rows = 'unknown';
}
+
?>
<td align="right" bgcolor="<?php echo $bgcolor; ?>">
- <?php
- echo "\n" . ' ';
- if ($mergetable == TRUE) {
- echo '<i>' . number_format($sts_data['Rows'], 0, $number_decimal_separator, $number_thousands_separator) . '</i>' . "\n";
- } else {
- echo number_format($sts_data['Rows'], 0, $number_decimal_separator, $number_thousands_separator) . "\n";
- }
- ?>
+ <?php echo $display_rows . "\n"; ?>
</td>
<td bgcolor="<?php echo $bgcolor; ?>" nowrap="nowrap">
<?php echo (isset($sts_data['Type']) ? $sts_data['Type'] : ' '); ?>
@@ -291,24 +283,21 @@
echo "\n";
?>
<td align="right" bgcolor="<?php echo $bgcolor; ?>" nowrap="nowrap">
-
- <a href="tbl_properties.php?<?php echo $url_query; ?>#showusage"><?php echo $formated_size . ' ' . $unit; ?></a>
+ <a href="tbl_properties.php?<?php echo $url_query; ?>#showusage"><?php echo $formated_size . ' ' . $unit; ?></a>
</td>
<?php
- echo "\n";
- } // end if
- } else {
+ }
+ }
+ else {
?>
- <td colspan="3" align="center" bgcolor="<?php echo $bgcolor; ?>">
- <?php echo $strInUse . "\n"; ?>
- </td>
+<td colspan="3" align="center" bgcolor="<?php echo $bgcolor; ?>"><?php echo $strInUse . "\n"; ?></td>
<?php
}
echo "\n";
?>
</tr>
<?php
- }
+ }
// Show Summary
if ($cfgShowStats) {
list($sum_formated, $unit) = PMA_formatByteDown($sum_size, 3, 1);
diff -r -u phpMyAdmin-2.2.4/tbl_properties.php phpMyAdmin-devel/tbl_properties.php
--- phpMyAdmin-2.2.4/tbl_properties.php Tue Feb 19 18:35:42 2002
+++ phpMyAdmin-devel/tbl_properties.php Thu Feb 21 11:58:15 2002
@@ -484,10 +484,11 @@
// BEGIN - Calc Table Space - staybyte - 9 June 2001
if ($cfgShowStats) {
$nonisam = FALSE;
+ $innodb = $showtable['Type'] == "InnoDB";
if (isset($showtable['Type']) && !eregi('ISAM|HEAP', $showtable['Type'])) {
$nonisam = TRUE;
}
- if (PMA_MYSQL_INT_VERSION >= 32303 && $nonisam == FALSE) {
+ if (PMA_MYSQL_INT_VERSION >= 32303 && ($nonisam == FALSE || $innodb)) {
// Gets some sizes
$mergetable = FALSE;
if (isset($showtable['Type']) && $showtable['Type'] == 'MRG_MyISAM') {
@@ -613,7 +614,7 @@
</tr>
<?php
}
- if (isset($showtable['Rows'])) {
+ if (!$innodb && isset($showtable['Rows'])) {
$bgcolor = ((++$i%2) ? $cfgBgcolorTwo : $cfgBgcolorOne);
echo "\n";
?>
@@ -625,7 +626,7 @@
</tr>
<?php
}
- if (isset($showtable['Avg_row_length']) && $showtable['Avg_row_length'] > 0) {
+ if (!$innodb && isset($showtable['Avg_row_length']) && $showtable['Avg_row_length'] > 0) {
$bgcolor = ((++$i%2) ? $cfgBgcolorTwo : $cfgBgcolorOne);
echo "\n";
?>
@@ -637,7 +638,7 @@
</tr>
<?php
}
- if (isset($showtable['Data_length']) && $showtable['Rows'] > 0 && $mergetable == FALSE) {
+ if (!$innodb && isset($showtable['Data_length']) && $showtable['Rows'] > 0 && $mergetable == FALSE) {
$bgcolor = ((++$i%2) ? $cfgBgcolorTwo : $cfgBgcolorOne);
echo "\n";
?>