version 1.8, 2003/03/10 21:22:36
|
version 1.11, 2003/03/17 18:35:51
|
Line 71 To create a table, you need a descriptio
|
Line 71 To create a table, you need a descriptio
|
for &create_table for a description of what is needed. |
for &create_table for a description of what is needed. |
|
|
$table_id = &create_table({ |
$table_id = &create_table({ |
columns => { |
id => 'tableid', # usually you will use the returned id |
id => { |
columns => ( |
type => 'INT', |
{ name => 'id', |
restrictions => 'NOT NULL', |
type => 'INT', |
primary_key => 'yes', |
restrictions => 'NOT NULL', |
auto_inc => 'yes' |
primary_key => 'yes', |
} |
auto_inc => 'yes' |
verbage => { type => 'TEXT' }, |
}, |
}, |
{ name => 'verbage', |
column_order => [qw/id verbage idx_verbage/], |
type => 'TEXT' }, |
fulltext => [qw/verbage/], |
), |
|
fulltext => [qw/verbage/], |
}); |
}); |
|
|
The above command will create a table with two columns, 'id' and 'verbage'. |
The above command will create a table with two columns, 'id' and 'verbage'. |
Line 230 an array reference which holds the order
|
Line 231 an array reference which holds the order
|
|
|
The statement handler for row inserts. |
The statement handler for row inserts. |
|
|
|
=item row_replace_sth |
|
|
|
The statement handler for row inserts. |
|
|
=back |
=back |
|
|
Col_order and row_insert_sth are kept internally by lonmysql and are not |
Col_order and row_insert_sth are kept internally by lonmysql and are not |
Line 362 sub disconnect_from_db {
|
Line 367 sub disconnect_from_db {
|
if (exists($Tables{$_}->{'row_insert_sth'})) { |
if (exists($Tables{$_}->{'row_insert_sth'})) { |
delete($Tables{$_}->{'row_insert_sth'}); |
delete($Tables{$_}->{'row_insert_sth'}); |
} |
} |
|
if (exists($Tables{$_}->{'row_replace_sth'})) { |
|
delete($Tables{$_}->{'row_replace_sth'}); |
|
} |
} |
} |
$dbh->disconnect if ($dbh); |
$dbh->disconnect if ($dbh); |
$debugstring = "Disconnected from database."; |
$debugstring = "Disconnected from database."; |
Line 388 sub number_of_rows {
|
Line 396 sub number_of_rows {
|
return undef if (! defined(&update_table_info($table_id))); |
return undef if (! defined(&update_table_info($table_id))); |
return $Tables{&translate_id($table_id)}->{'Rows'}; |
return $Tables{&translate_id($table_id)}->{'Rows'}; |
} |
} |
|
############################### |
|
|
|
=pod |
|
|
|
=item &get_dbh() |
|
|
|
Input: nothing |
|
|
|
Returns: the database handler, or undef on error. |
|
|
|
This routine allows the programmer to gain access to the database handler. |
|
Be careful. |
|
|
|
=cut |
|
|
|
############################### |
|
sub get_dbh { |
|
return undef if (! defined(&connect_to_db())); |
|
return $dbh; |
|
} |
|
|
############################### |
############################### |
|
|
Line 530 Input formats:
|
Line 558 Input formats:
|
... |
... |
}, |
}, |
], |
], |
|
'PRIMARY KEY' => (index_col_name,...), |
|
KEY => [{ name => 'idx_name', |
|
columns => (col1,col2,..),},], |
|
INDEX => [{ name => 'idx_name', |
|
columns => (col1,col2,..),},], |
|
UNIQUE => [{ index => 'yes', |
|
name => 'idx_name', |
|
columns => (col1,col2,..),},], |
|
FULLTEXT => [{ index => 'yes', |
|
name => 'idx_name', |
|
columns => (col1,col2,..),},], |
|
|
} |
} |
|
|
Returns: |
Returns: |
Line 546 sub create_table {
|
Line 586 sub create_table {
|
################################## |
################################## |
my @Columns; |
my @Columns; |
my $col_des; |
my $col_des; |
my $table_id = &get_new_table_id(); |
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); |
my $tablename = &translate_id($table_id); |
my $request = "CREATE TABLE IF NOT EXISTS ".$tablename." "; |
my $request = "CREATE TABLE IF NOT EXISTS ".$tablename." "; |
foreach my $coldata (@{$table_des->{'columns'}}) { |
foreach my $coldata (@{$table_des->{'columns'}}) { |
Line 577 sub create_table {
|
Line 622 sub create_table {
|
# skip blank items. |
# skip blank items. |
push (@Columns,$col_des) if ($col_des ne ''); |
push (@Columns,$col_des) if ($col_des ne ''); |
} |
} |
if (exists($table_des->{'fulltext'}) && (@{$table_des->{'fulltext'}})) { |
if (exists($table_des->{'PRIMARY KEY'})) { |
push (@Columns,'FULLTEXT ('.join(',',@{$table_des->{'fulltext'}}).')'); |
push (@Columns,'PRIMARY KEY ('.join(',',@{$table_des->{'PRIMARY KEY'}}) |
|
.')'); |
} |
} |
|
# |
|
foreach my $indextype ('KEY','INDEX') { |
|
next if (!exists($table_des->{$indextype})); |
|
foreach my $indexdescription (@{$table_des->{$indextype}}) { |
|
my $text = $indextype.' '; |
|
if (exists($indexdescription->{'name'})) { |
|
$text .=$indexdescription->{'name'}; |
|
} |
|
$text .= ' ('.join(',',@{$indexdescription->{'columns'}}).')'; |
|
push (@Columns,$text); |
|
} |
|
} |
|
# |
|
foreach my $indextype ('UNIQUE','FULLTEXT') { |
|
next if (! exists($table_des->{$indextype})); |
|
foreach my $indexdescription (@{$table_des->{$indextype}}) { |
|
my $text = $indextype.' '; |
|
if (exists($indexdescription->{'index'}) && |
|
$indexdescription->{'index'} eq 'yes') { |
|
$text .= 'INDEX '; |
|
} |
|
if (exists($indexdescription->{'name'})) { |
|
$text .=$indexdescription->{'name'}; |
|
} |
|
$text .= ' ('.join(',',@{$indexdescription->{'columns'}}).')'; |
|
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 652 sub get_rows {
|
Line 727 sub get_rows {
|
return undef; |
return undef; |
} |
} |
my $tablename = &translate_id($table_id); |
my $tablename = &translate_id($table_id); |
my $request = 'SELECT * FROM '.$tablename.' WHERE '.$condition; |
my $request; |
|
if (defined($condition) && $condition ne '') { |
|
$request = 'SELECT * FROM '.$tablename.' WHERE '.$condition; |
|
} else { |
|
$request = 'SELECT * FROM '.$tablename; |
|
$condition = 'no condition'; |
|
} |
my $sth=$dbh->prepare($request); |
my $sth=$dbh->prepare($request); |
$sth->execute(); |
$sth->execute(); |
if ($sth->err) { |
if ($sth->err) { |
Line 725 sub store_row {
|
Line 806 sub store_row {
|
return 1; |
return 1; |
} |
} |
|
|
|
############################### |
|
|
|
=pod |
|
|
|
=item &replace_row() |
|
|
|
Inputs: table id, row data |
|
|
|
returns undef on error, 1 on success. |
|
|
|
Acts like &store_row() but uses the 'REPLACE' command instead of 'INSERT'. |
|
|
|
=cut |
|
|
|
############################### |
|
sub replace_row { |
|
my ($table_id,$rowdata) = @_; |
|
# |
|
return undef if (! defined(&connect_to_db())); |
|
my $table_status = &check_table($table_id); |
|
return undef if (! defined($table_status)); |
|
if (! $table_status) { |
|
$errorstring = "table $table_id does not exist."; |
|
return undef; |
|
} |
|
# |
|
my $tablename = &translate_id($table_id); |
|
# |
|
my $sth; |
|
if (exists($Tables{$tablename}->{'row_replace_sth'})) { |
|
$sth = $Tables{$tablename}->{'row_replace_sth'}; |
|
} else { |
|
# Build the insert statement handler |
|
return undef if (! defined(&update_table_info($table_id))); |
|
my $replace_request = 'REPLACE INTO '.$tablename.' VALUES('; |
|
foreach (@{$Tables{$tablename}->{'Col_order'}}) { |
|
$replace_request.="?,"; |
|
} |
|
chop $replace_request; |
|
$replace_request.=")"; |
|
$sth=$dbh->prepare($replace_request); |
|
$Tables{$tablename}->{'row_replace_sth'}=$sth; |
|
} |
|
my @Parameters; |
|
if (ref($rowdata) eq 'ARRAY') { |
|
@Parameters = @$rowdata; |
|
} elsif (ref($rowdata) eq 'HASH') { |
|
foreach (@{$Tables{$tablename}->{'Col_order'}}) { |
|
push(@Parameters,$rowdata->{$_}); |
|
} |
|
} |
|
$sth->execute(@Parameters); |
|
if ($sth->err) { |
|
$errorstring = "$dbh ATTEMPTED replace @Parameters RESULTING ERROR:\n". |
|
$sth->errstr; |
|
return undef; |
|
} |
|
$debugstring = "Stored row."; |
|
return 1; |
|
} |
|
|
########################################### |
########################################### |
|
|
=pod |
=pod |
Line 800 sub check_table {
|
Line 942 sub check_table {
|
my @Table_list = &tables_in_db(); |
my @Table_list = &tables_in_db(); |
my $result = 0; |
my $result = 0; |
foreach (@Table_list) { |
foreach (@Table_list) { |
if (/^$table_id$/) { |
if ($_ eq $table_id) { |
$result = 1; |
$result = 1; |
last; |
last; |
} |
} |