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

matthew lon-capa-cvs@mail.lon-capa.org
Wed, 21 Jul 2004 21:01:05 -0000


matthew		Wed Jul 21 17:01:05 2004 EDT

  Modified files:              
    /loncom/interface	lonmysql.pm 
  Log:
  Remove dependence on Apache::lonnet.
  Added: package variables $mysqluser and $mysqlpassword.
  Added: &set_mysql_user_and_password to set or look up via lonnet
    the user and password for MySQL
  Modified &connect_to_db and &verify_sql_connection to call 
  &set_mysql_user_and_password if neccessary and to use $mysqluser and 
  $mysqlpassword.
  
  
Index: loncom/interface/lonmysql.pm
diff -u loncom/interface/lonmysql.pm:1.20 loncom/interface/lonmysql.pm:1.21
--- loncom/interface/lonmysql.pm:1.20	Mon Apr 19 17:29:15 2004
+++ loncom/interface/lonmysql.pm	Wed Jul 21 17:01:04 2004
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # MySQL utility functions
 #
-# $Id: lonmysql.pm,v 1.20 2004/04/19 21:29:15 matthew Exp $
+# $Id: lonmysql.pm,v 1.21 2004/07/21 21:01:04 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -31,9 +31,25 @@
 
 use strict;
 use DBI;
-use Apache::lonnet();
 use POSIX qw(strftime mktime);
 
+my $mysqluser;
+my $mysqlpassword;
+
+sub set_mysql_user_and_password {
+    # If we are running under Apache and LONCAPA, use the LON-CAPA 
+    # user and password.  Otherwise...? ? ? ?
+    ($mysqluser,$mysqlpassword) = @_;
+    if (! defined($mysqluser) || ! defined($mysqlpassword)) {
+        if (! eval 'require Apache::lonnet();') {
+            $mysqluser = 'www';
+            $mysqlpassword = $Apache::lonnet::perlvar{'lonSqlAccess'};
+        } else {
+            $mysqluser = 'fuck';
+            $mysqlpassword = '';
+        }
+    }
+}
 
 ######################################################################
 ######################################################################
@@ -330,8 +346,10 @@
 ###############################
 sub connect_to_db { 
     return 1 if ($dbh);
-    if (! ($dbh = DBI->connect("DBI:mysql:loncapa","www",
-                               $Apache::lonnet::perlvar{'lonSqlAccess'},
+    if (! defined($mysqluser) || ! defined($mysqlpassword)) {
+        &set_mysql_user_and_password();
+    }
+    if (! ($dbh = DBI->connect("DBI:mysql:loncapa",$mysqluser,$mysqlpassword,
                                { RaiseError=>0,PrintError=>0}))) {
         $debugstring = "Unable to connect to loncapa database.";    
         if (! defined($dbh)) {
@@ -363,9 +381,12 @@
 
 ###############################
 sub verify_sql_connection {
+    if (! defined($mysqluser) || ! defined($mysqlpassword)) {
+        &set_mysql_user_and_password();
+    }
     my $connection;
-    if (! ($connection = DBI->connect("DBI:mysql:loncapa","www",
-                                      $Apache::lonnet::perlvar{'lonSqlAccess'},
+    if (! ($connection = DBI->connect("DBI:mysql:loncapa",
+                                      $mysqluser,$mysqlpassword,
                                       { RaiseError=>0,PrintError=>0}))) {
         return 0;
     }
@@ -580,6 +601,7 @@
 	return ();
     }
 }
+
 ###############################
 
 =pod
@@ -587,9 +609,50 @@
 =item &create_table()
 
 Inputs: 
-    table description
+    table description, see &build_table_creation_request
+Returns:
+    undef on error, table id on success.
+
+=cut
+
+###############################
+sub create_table {
+    return undef if (!defined(&connect_to_db($dbh)));
+    my ($table_des)=@_;
+    my $request = &build_table_creation_request($table_des);
+    #
+    # Execute the request to create the table
+    #############################################
+    my $count = $dbh->do($request);
+    if (! defined($count)) {
+        $errorstring = "$dbh ATTEMPTED:\n".$request."\nRESULTING ERROR:\n".
+            $dbh->errstr();
+        return undef;
+    }
+    #
+    # Set up the internal bookkeeping
+    #############################################
+    my $table_id;
+    if (exists($table_des->{'id'})) {
+        $table_id = $table_des->{'id'};
+    } else {
+        $table_id = &get_new_table_id();
+    }
+    my $tablename = &translate_id($table_id);
+    delete($Tables{$tablename}) if (exists($Tables{$tablename}));
+    return undef if (! defined(&update_table_info($table_id)));
+    $debugstring = "Created table $tablename at time ".time.
+        " with request\n$request";
+    return $table_id;
+}
 
-Input formats:
+###############################
+
+=pod
+
+=item build_table_creation_request
+
+Input: table description
 
     table description = {
         permanent  => 'yes' or 'no',
@@ -621,14 +684,12 @@
 
     }
 
-Returns:
-    undef on error, table id on success.
+Returns: scalar string containing mysql commands to create the table
 
 =cut
 
 ###############################
-sub create_table {
-    return undef if (!defined(&connect_to_db($dbh)));
+sub build_table_creation_request {
     my ($table_des)=@_;
     #
     # Build request to create table
@@ -709,23 +770,7 @@
         $request.="COMMENT = 'temporary' ";
     } 
     $request .= "TYPE=MYISAM";
-    #
-    # Execute the request to create the table
-    #############################################
-    my $count = $dbh->do($request);
-    if (! defined($count)) {
-        $errorstring = "$dbh ATTEMPTED:\n".$request."\nRESULTING ERROR:\n".
-            $dbh->errstr();
-        return undef;
-    }
-    #
-    # Set up the internal bookkeeping
-    #############################################
-    delete($Tables{$tablename}) if (exists($Tables{$tablename}));
-    return undef if (! defined(&update_table_info($table_id)));
-    $debugstring = "Created table $tablename at time ".time.
-        " with request\n$request";
-    return $table_id;
+    return $request;
 }
 
 ###############################