[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;
}
###############################