version 1.35, 2005/08/24 19:33:32
|
version 1.41, 2019/11/20 18:02:55
|
Line 87 and provide a common interface. The goa
|
Line 87 and provide a common interface. The goa
|
a complete reimplementation of the DBI interface. Instead we try to |
a complete reimplementation of the DBI interface. Instead we try to |
make using mysql as painless as possible. |
make using mysql as painless as possible. |
|
|
Each table has a numeric ID that is a parameter to most lonmysql functions. |
Each table has a numeric ID that is a parameter to most lonmysql |
The table id is returned by &create_table. |
functions. The table id is returned by &create_table. If you lose |
If you lose the table id, it is lost forever. |
the table id, it is lost forever. The table names in MySQL correspond |
The table names in MySQL correspond to |
to $env{'user.name'}.'_'.$env{'user.domain'}.'_'.$table_id. (With all |
$env{'user.name'}.'_'.$env{'user.domain'}.'_'.$table_id. If the table id |
non-word characters removed form user.name and user.domain) If the |
is non-numeric, it is assumed to be the full name of a table. If you pass |
table id is non-numeric, it is assumed to be the full name of a table. |
the table id in a form, you MUST ensure that what you send to lonmysql is |
If you pass the table id in a form, you MUST ensure that what you send |
numeric, otherwise you are opening up all the tables in the MySQL database. |
to lonmysql is numeric, otherwise you are opening up all the tables in |
|
the MySQL database. |
|
|
=over 4 |
=over 4 |
|
|
Line 816 sub build_table_creation_request {
|
Line 817 sub build_table_creation_request {
|
unless($table_des->{'permanent'} eq 'yes') { |
unless($table_des->{'permanent'} eq 'yes') { |
$request.="COMMENT = 'temporary' "; |
$request.="COMMENT = 'temporary' "; |
} |
} |
$request .= "TYPE=MYISAM"; |
$request .= "ENGINE=MYISAM"; |
return $request,$table_id; |
return $request,$table_id; |
} |
} |
|
|
Line 824 sub build_table_creation_request {
|
Line 825 sub build_table_creation_request {
|
|
|
=pod |
=pod |
|
|
|
=item &get_table_prefix() |
|
|
|
returns the cleaned version of user.name and user.domain for us in table names |
|
|
|
=cut |
|
|
|
############################### |
|
sub get_table_prefix { |
|
my $clean_name = $env{'user.name'}; |
|
my $clean_domain = $env{'user.domain'}; |
|
$clean_name =~ s/\W//g; |
|
$clean_domain =~ s/\W//g; |
|
return $clean_name.'_'.$clean_domain.'_'; |
|
} |
|
|
|
############################### |
|
|
|
=pod |
|
|
=item &get_new_table_id() |
=item &get_new_table_id() |
|
|
Used internally to prevent table name collisions. |
Used internally to prevent table name collisions. |
Line 834 Used internally to prevent table name co
|
Line 854 Used internally to prevent table name co
|
sub get_new_table_id { |
sub get_new_table_id { |
my $newid = 0; |
my $newid = 0; |
my @tables = &tables_in_db(); |
my @tables = &tables_in_db(); |
|
my $prefix = &get_table_prefix(); |
foreach (@tables) { |
foreach (@tables) { |
if (/^$env{'user.name'}_$env{'user.domain'}_(\d+)$/) { |
if (/^\Q$prefix\E(\d+)$/) { |
$newid = $1 if ($1 > $newid); |
$newid = $1 if ($1 > $newid); |
} |
} |
} |
} |
Line 1074 Returns undef on error.
|
Line 1095 Returns undef on error.
|
=cut |
=cut |
|
|
########################################### |
########################################### |
|
|
|
########## Show-Tables Cache |
|
my $have_read_tables = 0; |
|
my $dbh_sth; |
|
########## |
|
|
sub tables_in_db { |
sub tables_in_db { |
return undef if (!defined(&connect_to_db())); |
return undef if (!defined(&connect_to_db())); |
my $sth=$dbh->prepare('SHOW TABLES'); |
|
$sth->execute(); |
########## Show-Tables Cache |
$sth->execute(); |
if(!$have_read_tables) { |
my $aref = $sth->fetchall_arrayref; |
$dbh_sth=$dbh->prepare('SHOW TABLES'); |
if ($sth->err()) { |
$have_read_tables = 1; |
|
} |
|
$dbh_sth->execute(); |
|
#$dbh_sth->execute(); # Removed strange execute - from release 119 |
|
########## |
|
|
|
my $aref = $dbh_sth->fetchall_arrayref; |
|
if ($dbh_sth->err()) { |
$errorstring = |
$errorstring = |
"$dbh ATTEMPTED:\n".'fetchall_arrayref after SHOW TABLES'. |
"$dbh ATTEMPTED:\n".'fetchall_arrayref after SHOW TABLES'. |
"\nRESULTING ERROR:\n".$sth->errstr; |
"\nRESULTING ERROR:\n".$dbh_sth->errstr; |
return undef; |
return undef; |
} |
} |
my @table_list; |
my @table_list; |
Line 1114 sub translate_id {
|
Line 1148 sub translate_id {
|
# id should be a digit. If it is not a digit we assume the given 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. |
# is complete and does not need to be translated. |
return $id if ($id =~ /\D/); |
return $id if ($id =~ /\D/); |
return $env{'user.name'}.'_'.$env{'user.domain'}.'_'.$id; |
return &get_table_prefix().$id; |
} |
} |
|
|
########################################### |
########################################### |
Line 1225 Fixes a table name so that it will work
|
Line 1259 Fixes a table name so that it will work
|
sub fix_table_name { |
sub fix_table_name { |
my ($name) = @_; |
my ($name) = @_; |
$name =~ s/^(\d+[eE]\d+)/_$1/; |
$name =~ s/^(\d+[eE]\d+)/_$1/; |
|
$name =~ s/\W//g; |
return $name; |
return $name; |
} |
} |
|
|
Line 1253 sub unsqltime {
|
Line 1288 sub unsqltime {
|
my $timestamp=shift; |
my $timestamp=shift; |
if ($timestamp=~/^(\d+)\-(\d+)\-(\d+)\s+(\d+)\:(\d+)\:(\d+)$/) { |
if ($timestamp=~/^(\d+)\-(\d+)\-(\d+)\s+(\d+)\:(\d+)\:(\d+)$/) { |
$timestamp=&maketime('year'=>$1,'month'=>$2,'day'=>$3, |
$timestamp=&maketime('year'=>$1,'month'=>$2,'day'=>$3, |
'hours'=>$4,'minutes'=>$5,'seconds'=>$6); |
'hours'=>$4,'minutes'=>$5,'seconds'=>$6,'dlsav'=>-1); |
} |
} |
return $timestamp; |
return $timestamp; |
} |
} |