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                  = '&nbsp;-&nbsp;';
-                    $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 = '&nbsp;-&nbsp;';
             }
-            // 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 = '&nbsp;-&nbsp;';
-                $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">
         &nbsp;<?php echo (isset($sts_data['Type']) ? $sts_data['Type'] : '&nbsp;'); ?>&nbsp;
@@ -291,24 +283,21 @@
                 echo "\n";
                 ?>
     <td align="right" bgcolor="<?php echo $bgcolor; ?>" nowrap="nowrap">
-        &nbsp;&nbsp;
-        <a href="tbl_properties.php?<?php echo $url_query; ?>#showusage"><?php echo $formated_size . ' ' . $unit; ?></a>
+        &nbsp;&nbsp;<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";
             ?>