version 1.10, 2003/03/14 15:37:02
|
version 1.16, 2003/12/26 19:12:51
|
Line 32 package Apache::lonmysql;
|
Line 32 package Apache::lonmysql;
|
use strict; |
use strict; |
use DBI; |
use DBI; |
use Apache::lonnet(); |
use Apache::lonnet(); |
|
use POSIX qw(strftime mktime); |
|
|
|
|
###################################################################### |
###################################################################### |
###################################################################### |
###################################################################### |
Line 348 sub connect_to_db {
|
Line 350 sub connect_to_db {
|
|
|
=pod |
=pod |
|
|
|
=item &verify_sql_connection() |
|
|
|
Inputs: none. |
|
|
|
Returns: 0 (failure) or 1 (success) |
|
|
|
Checks to make sure the database can be connected to. It does not |
|
initialize anything in the lonmysql package. |
|
|
|
=cut |
|
|
|
############################### |
|
sub verify_sql_connection { |
|
my $connection; |
|
if (! ($connection = DBI->connect("DBI:mysql:loncapa","www", |
|
$Apache::lonnet::perlvar{'lonSqlAccess'}, |
|
{ RaiseError=>0,PrintError=>0}))) { |
|
return 0; |
|
} |
|
undef($connection); |
|
return 1; |
|
} |
|
|
|
############################### |
|
|
|
=pod |
|
|
=item &disconnect_from_db() |
=item &disconnect_from_db() |
|
|
Inputs: none. |
Inputs: none. |
Line 559 Input formats:
|
Line 588 Input formats:
|
}, |
}, |
], |
], |
'PRIMARY KEY' => (index_col_name,...), |
'PRIMARY KEY' => (index_col_name,...), |
KEY => { name => 'idx_name', |
KEY => [{ name => 'idx_name', |
columns => (col1,col2,..),}, |
columns => (col1,col2,..),},], |
INDEX => { name => 'idx_name', |
INDEX => [{ name => 'idx_name', |
columns => (col1,col2,..),}, |
columns => (col1,col2,..),},], |
UNIQUE => { index => 'yes', |
UNIQUE => [{ index => 'yes', |
name => 'idx_name', |
name => 'idx_name', |
columns => (col1,col2,..),}, |
columns => (col1,col2,..),},], |
FULLTEXT => { index => 'yes', |
FULLTEXT => [{ index => 'yes', |
name => 'idx_name', |
name => 'idx_name', |
columns => (col1,col2,..),}, |
columns => (col1,col2,..),},], |
|
|
} |
} |
|
|
Line 626 sub create_table {
|
Line 655 sub create_table {
|
push (@Columns,'PRIMARY KEY ('.join(',',@{$table_des->{'PRIMARY KEY'}}) |
push (@Columns,'PRIMARY KEY ('.join(',',@{$table_des->{'PRIMARY KEY'}}) |
.')'); |
.')'); |
} |
} |
foreach ('KEY','INDEX') { |
# |
if (exists($table_des->{$_})) { |
foreach my $indextype ('KEY','INDEX') { |
my $text = $_.' '; |
next if (!exists($table_des->{$indextype})); |
if (exists($table_des->{$_}->{'name'})) { |
foreach my $indexdescription (@{$table_des->{$indextype}}) { |
$text .=$table_des->{$_}->{'name'}; |
my $text = $indextype.' '; |
|
if (exists($indexdescription->{'name'})) { |
|
$text .=$indexdescription->{'name'}; |
} |
} |
$text .= ' ('.join(',',@{$table_des->{$_}->{'columns'}}).')'; |
$text .= ' ('.join(',',@{$indexdescription->{'columns'}}).')'; |
push (@Columns,$text); |
push (@Columns,$text); |
} |
} |
} |
} |
foreach ('UNIQUE','FULLTEXT') { |
# |
if (exists($table_des->{$_})) { |
foreach my $indextype ('UNIQUE','FULLTEXT') { |
my $text = $_.' '; |
next if (! exists($table_des->{$indextype})); |
if (exists($table_des->{$_}->{'index'}) && |
foreach my $indexdescription (@{$table_des->{$indextype}}) { |
$table_des->{$_}->{'index'} eq 'yes') { |
my $text = $indextype.' '; |
|
if (exists($indexdescription->{'index'}) && |
|
$indexdescription->{'index'} eq 'yes') { |
$text .= 'INDEX '; |
$text .= 'INDEX '; |
} |
} |
if (exists($table_des->{$_}->{'name'})) { |
if (exists($indexdescription->{'name'})) { |
$text .=$table_des->{$_}->{'name'}; |
$text .=$indexdescription->{'name'}; |
} |
} |
$text .= ' ('.join(',',@{$table_des->{$_}->{'columns'}}).')'; |
$text .= ' ('.join(',',@{$indexdescription->{'columns'}}).')'; |
push (@Columns,$text); |
push (@Columns,$text); |
} |
} |
} |
} |
|
# |
$request .= "(".join(", ",@Columns).") "; |
$request .= "(".join(", ",@Columns).") "; |
unless($table_des->{'permanent'} eq 'yes') { |
unless($table_des->{'permanent'} eq 'yes') { |
$request.="COMMENT = 'temporary' "; |
$request.="COMMENT = 'temporary' "; |
Line 976 sub remove_from_table {
|
Line 1010 sub remove_from_table {
|
$errorstring = "ERROR on execution of ".$command."\n".$sth->errstr; |
$errorstring = "ERROR on execution of ".$command."\n".$sth->errstr; |
return undef; |
return undef; |
} |
} |
|
$debugstring = $command; |
my $rows = $sth->rows; |
my $rows = $sth->rows; |
return $rows; |
return $rows; |
} |
} |
|
|
|
########################################### |
|
|
|
=pod |
|
|
|
=item drop_table($table_id) |
|
|
|
Issues a 'drop table if exists' command |
|
|
|
=cut |
|
|
|
########################################### |
|
|
|
sub drop_table { |
|
my ($table_id) = @_; |
|
return undef if (!defined(&connect_to_db())); |
|
# |
|
$table_id = &translate_id($table_id); |
|
my $command = 'DROP TABLE IF EXISTS '.$table_id; |
|
my $sth = $dbh->prepare($command); |
|
$sth->execute(); |
|
if ($sth->err) { |
|
$errorstring = "ERROR on execution of ".$command."\n".$sth->errstr; |
|
return undef; |
|
} |
|
$debugstring = $command; |
|
delete($Tables{$table_id}); # remove any knowledge of the table |
|
return 1; # if we got here there was no error, so return a 'true' value |
|
} |
|
|
|
|
|
|
|
|
|
# ---------------------------- convert 'time' format into a datetime sql format |
|
sub sqltime { |
|
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = |
|
localtime(&unsqltime($_[0])); |
|
$mon++; $year+=1900; |
|
return "$year-$mon-$mday $hour:$min:$sec"; |
|
} |
|
|
|
sub maketime { |
|
my %th=@_; |
|
return POSIX::mktime(($th{'seconds'},$th{'minutes'},$th{'hours'}, |
|
$th{'day'},$th{'month'}-1, |
|
$th{'year'}-1900,0,0,$th{'dlsav'})); |
|
} |
|
|
|
|
|
######################################### |
|
# |
|
# Retro-fixing of un-backward-compatible time format |
|
|
|
sub unsqltime { |
|
my $timestamp=shift; |
|
if ($timestamp=~/^(\d+)\-(\d+)\-(\d+)\s+(\d+)\:(\d+)\:(\d+)$/) { |
|
$timestamp=&maketime('year'=>$1,'month'=>$2,'day'=>$3, |
|
'hours'=>$4,'minutes'=>$5,'seconds'=>$6); |
|
} |
|
return $timestamp; |
|
} |
|
|
|
|
1; |
1; |
|
|