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]

Reply via email to