[LON-CAPA-cvs] cvs: loncom /interface lonmysql.pm

matthew lon-capa-cvs@mail.lon-capa.org
Wed, 24 Aug 2005 19:13:10 -0000


matthew		Wed Aug 24 15:13:10 2005 EDT

  Modified files:              
    /loncom/interface	lonmysql.pm 
  Log:
  Fixed MySQL 4 bug where &update_table_status returned bogus data.  This is
  only a temporary fix as it still has the bug of hard-coding the data fields.
  
  
Index: loncom/interface/lonmysql.pm
diff -u loncom/interface/lonmysql.pm:1.32 loncom/interface/lonmysql.pm:1.33
--- loncom/interface/lonmysql.pm:1.32	Mon Jul 11 09:49:47 2005
+++ loncom/interface/lonmysql.pm	Wed Aug 24 15:13:07 2005
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # MySQL utility functions
 #
-# $Id: lonmysql.pm,v 1.32 2005/07/11 13:49:47 matthew Exp $
+# $Id: lonmysql.pm,v 1.33 2005/08/24 19:13:07 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -37,6 +37,7 @@
 my $mysqluser;
 my $mysqlpassword;
 my $mysqldatabase;
+my %db_config;
 
 sub set_mysql_user_and_password {
     # If we are running under Apache and LONCAPA, use the LON-CAPA 
@@ -375,6 +376,22 @@
         return undef;
     }
     $debugstring = "Successfully connected to loncapa database.";    
+    # Determine DB configuration
+    undef(%db_config);
+    my $sth = $dbh->prepare("SHOW VARIABLES");
+    $sth->execute();
+    if ($sth->err()) {
+        $debugstring = "Unable to retrieve db config variables";
+        return undef;
+    }
+    foreach my $row (@{$sth->fetchall_arrayref}) {
+        $db_config{$row->[0]} = $row->[1];
+    }
+    &Apache::lonnet::logthis("MySQL configuration variables");
+    while (my ($k,$v) = each(%db_config)) {
+        &Apache::lonnet::logthis("    '$k' => '$v'");
+    }
+    #
     return 1;
 }
 
@@ -554,10 +571,20 @@
     #
     # Get MySQLs table status information.
     #
-    my @tabledesc = qw/
-        Name Type Row_format Rows Avg_row_length Data_length
+    my @tabledesc;
+    my ($major_version) = ($db_config{'version'} =~ /^(\d)\./);
+    &Apache::lonnet::logthis('major version = '.$major_version);
+    if ($major_version <= 3) {
+        @tabledesc = qw/
+            Name Type Row_format Rows Avg_row_length Data_length
             Max_data_length Index_length Data_free Auto_increment 
-                Create_time Update_time Check_time Create_options Comment /;
+            Create_time Update_time Check_time Create_options Comment/;
+    } else { # At least 4 has this structure...
+        @tabledesc = qw/
+            Name Engine Version Row_format Rows Avg_row_length Data_length
+            Max_data_length Index_length Data_free Auto_increment Create_time 
+            Update_time Check_time Collation Checksum Create_options Comment/;
+    }
     my $db_command = "SHOW TABLE STATUS FROM loncapa LIKE '$tablename'";
     my $sth = $dbh->prepare($db_command);
     $sth->execute();