--- loncom/interface/lonmysql.pm 2004/12/20 19:53:36 1.25 +++ loncom/interface/lonmysql.pm 2005/04/11 15:33:46 1.30 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # MySQL utility functions # -# $Id: lonmysql.pm,v 1.25 2004/12/20 19:53:36 matthew Exp $ +# $Id: lonmysql.pm,v 1.30 2005/04/11 15:33:46 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -32,14 +32,22 @@ package Apache::lonmysql; use strict; use DBI; use POSIX qw(strftime mktime); +use Apache::lonnet; my $mysqluser; my $mysqlpassword; +my $mysqldatabase; sub set_mysql_user_and_password { # If we are running under Apache and LONCAPA, use the LON-CAPA # user and password. Otherwise...? ? ? ? - ($mysqluser,$mysqlpassword) = @_; + my ($input_mysqluser,$input_mysqlpassword,$input_mysqldatabase) = @_; + if (! defined($mysqldatabase)) { + $mysqldatabase = 'loncapa'; + } + if (defined($input_mysqldatabase)) { + $mysqldatabase = $input_mysqldatabase; + } if (! defined($mysqluser) || ! defined($mysqlpassword)) { if (! eval 'require Apache::lonnet();') { $mysqluser = 'www'; @@ -49,6 +57,12 @@ sub set_mysql_user_and_password { $mysqlpassword = ''; } } + if (defined($input_mysqluser)) { + $mysqluser = $input_mysqluser; + } + if (defined($input_mysqlpassword)) { + $mysqlpassword = $input_mysqlpassword; + } } ###################################################################### @@ -76,7 +90,7 @@ Each table has a numeric ID that is a pa The table id is returned by &create_table. If you lose the table id, it is lost forever. The table names in MySQL correspond to -$ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'.$table_id. If the table id +$env{'user.name'}.'_'.$env{'user.domain'}.'_'.$table_id. If the table id is non-numeric, it is assumed to be the full name of a table. If you pass the table id in a form, you MUST ensure that what you send to lonmysql is numeric, otherwise you are opening up all the tables in the MySQL database. @@ -349,7 +363,7 @@ sub connect_to_db { if (! defined($mysqluser) || ! defined($mysqlpassword)) { &set_mysql_user_and_password(); } - if (! ($dbh = DBI->connect("DBI:mysql:loncapa",$mysqluser,$mysqlpassword, + if (! ($dbh = DBI->connect("DBI:mysql:$mysqldatabase",$mysqluser,$mysqlpassword, { RaiseError=>0,PrintError=>0}))) { $debugstring = "Unable to connect to loncapa database."; if (! defined($dbh)) { @@ -464,6 +478,7 @@ Be careful. ############################### sub get_dbh { return undef if (! defined(&connect_to_db())); + &Apache::lonnet::logthis("reconnect set to ".$dbh->{mysql_auto_reconnect}); return $dbh; } @@ -807,7 +822,7 @@ sub get_new_table_id { my $newid = 0; my @tables = &tables_in_db(); foreach (@tables) { - if (/^$ENV{'user.name'}_$ENV{'user.domain'}_(\d+)$/) { + if (/^$env{'user.name'}_$env{'user.domain'}_(\d+)$/) { $newid = $1 if ($1 > $newid); } } @@ -1085,7 +1100,7 @@ sub translate_id { # id should be a digit. If it is not a digit we assume the given id # is complete and does not need to be translated. return $id if ($id =~ /\D/); - return $ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'.$id; + return $env{'user.name'}.'_'.$env{'user.domain'}.'_'.$id; } ########################################### @@ -1182,7 +1197,22 @@ sub drop_table { return 1; # if we got here there was no error, so return a 'true' value } +########################################## + +=pod +=item fix_table_name + +Fixes a table name so that it will work with MySQL. + +=cut + +########################################## +sub fix_table_name { + my ($name) = @_; + $name =~ s/^(\d+[eE]\d+)/_$1/; + return $name; +} # ---------------------------- convert 'time' format into a datetime sql format