I am using the following code and keep getting a message that says
"Can't use an undefined value as a hash reference." I'm completely lost
trying to debug it because the line in question is a }. I was wondering
if any guru could spot some newbie idiocy in my code. I am, of course,
using strict and warnings.
Thanks in advance!
Dan
sub get_mysql_SQL {
my $self = shift (@_);
my $line = shift (@_);
my $debugger = $self->{debugger};
if ($self->{info_mode}) {
$debugger->warning("We've entered get_mysql_SQL");
}
if (not $line) { $debugger->fatal_error("There was no line in the
[EMAIL PROTECTED] array..."); }
my @temp = split ':', $line;
my $action = shift (@temp);
my $SQL = "";
if ($action =~ m/create/i) {
my $table_name = shift (@temp);
my @columns;
while ($_ = shift (@temp)) {
my $temp3 = {
name => $_,
type => shift (@temp),
options => [split (';', (shift (@temp)))]
};
push @columns, $temp3;
$SQL .= "CREATE TABLE $table_name\n";
$SQL .= "(\n";
while (my %hash = %{ shift (@columns) }) {
$SQL .= " $hash{name} ";
if ($hash{type} =~ m/INT/i) {
$SQL .= "INT ";
}
elsif ($hash{type} =~ m/VARCHAR/i) {
$SQL .= "VARCHAR(80) ";
}
elsif ($hash{type} =~ m/DATE/i) {
$SQL .= "DATE ";
}
elsif ($hash{type} =~ m/LOB/i) {
$SQL .= "BLOB ";
}
elsif ($hash{type} =~ m/TEXT/i) {
$SQL .= "LONGTEXT ";
}
elsif ($hash{type} =~ m/BOOL/i) {
$SQL .= "BIT ";
}
else {
$debugger->fatal_error("Data Type: $hash{type} unknown.");
}
my @options = @{ $hash{options} };
while ($_ = shift (@options)) {
if ($_ =~ m/not null/i) {
$SQL .= "NOT NULL ";
}
elsif ($_ =~ m/unique/i) {
$SQL .= "UNIQUE ";
}
elsif ($_ =~ m/primary key/i) {
$SQL .= "PRIMARY KEY";
}
elsif ($_ =~ m/auto increment/i) {
$SQL .= "AUTO_INCREMENT ";
}
else {
$debugger->error("Option: $_ is not known. Assuming it's database
specific and ignoring.");
}
}
$SQL .= "\n";
}
}
$SQL .= ");\n\n";
return $SQL;
}
else {
$debugger->fatal_error("Action $action is unknown to
get_mysql_SQL.");
}
}
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]