--- loncom/interface/lonmysql.pm 2004/04/19 21:29:15 1.20 +++ loncom/interface/lonmysql.pm 2004/07/21 21:01:04 1.21 @@ -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 @@ package Apache::lonmysql; 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 @@ connection is established. ############################### 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 @@ initialize anything in the lonmysql pack ############################### 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 @@ sub col_order { return (); } } + ############################### =pod @@ -587,9 +609,50 @@ sub col_order { =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 @@ Input formats: } -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 @@ sub create_table { $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; } ###############################