From af49c477e1f04347dba1187869325a423be9662b Mon Sep 17 00:00:00 2001 From: Laurent Gil <lgil@ebi.ac.uk> Date: Thu, 8 Dec 2011 11:15:55 +0000 Subject: [PATCH] Fixed bug with the character ` in the input file --- misc-scripts/sql2html.pl | 155 ++++++++++++++++++--------------------- 1 file changed, 71 insertions(+), 84 deletions(-) diff --git a/misc-scripts/sql2html.pl b/misc-scripts/sql2html.pl index 4a5a4a1ff2..dd97328302 100644 --- a/misc-scripts/sql2html.pl +++ b/misc-scripts/sql2html.pl @@ -190,7 +190,6 @@ my @header_names = ('default'); my @colours = ($default_colour); my %legend; - my $in_doc = 0; my $in_table = 0; my $header = 'default'; @@ -204,6 +203,7 @@ my $display = 'Show'; my $parenth_count = 0; my $header_colour; + ############# ## Parser ## ############# @@ -216,20 +216,19 @@ while (<SQLFILE>) { # Verifications if ($_ =~ /^\/\*\*/) { $in_doc=1; next; } # start of a table documentation - if ($_ =~ /^\s*create\s+table\s+(if\s+not\s+exists\s+)?(\w+)/i) { # start to parse the content of the table - my $sql_t_name = remove_char($2); - if ($sql_t_name eq $table) { + if ($_ =~ /^\s*create\s+table\s+(if\s+not\s+exists\s+)?`?(\w+)`?/i) { # start to parse the content of the table + if ($table eq $2) { $in_table=1; $parenth_count++; } else { - print STDERR "The documentation of the table $sql_t_name has not be found!\n"; + print STDERR "The documentation of the table $2 has not be found!\n"; } next; } next if ($in_doc==0 and $in_table==0); - my $doc = $_; + my $doc = remove_char($_); ## Parsing of the documentation ## if ($in_doc==1) { @@ -284,30 +283,24 @@ while (<SQLFILE>) { } } + ## Parsing of the SQL table to fetch the columns types ## elsif ($in_table==1) { - - #END OF TABLE DEFINITION - #Can't do this easily with a simply regex as there are varying valid formats - #The end of the table definition is actually defined by 2nd enclosing bracket + + # END OF TABLE DEFINITION + # Can't do this easily with a simply regex as there are varying valid formats + # The end of the table definition is actually defined by 2nd enclosing bracket - #Regex counting VOODOO! - #This basically puts the regex in a list context - #before inc/dec'ing with it in a scalar context. + # Regex counting VOODOO! + # This basically puts the regex in a list context + # before inc/dec'ing with it in a scalar context. $parenth_count +=()= $doc =~ /\(/gi; $parenth_count -=()= $doc =~ /\)/gi; - # warn "parenth count is $parenth_count"; - if ($parenth_count == 0) { # End of the sql table definition if (scalar @{$documentation->{$header}{'tables'}{$table}{column}} > $count_sql_col) { - - #use Data::Dumper; - #warn "col count $count_sql_col"; - #warn Data::Dumper::Dumper(\$documentation); - - print STDERR "Description of a non existant column in the table $table!\n"; + print STDERR "Description of a non existant column in the table $table!\n"; } $in_table=0; @@ -317,73 +310,69 @@ while (<SQLFILE>) { } else { - # warn "Processing table"; - - ## INDEXES ## - if ($doc =~ /^\s*(primary\s+key)\s*\((.+)\)/i or $doc =~ /^\s*(unique)\s*\((.+)\)/i){ # Primary or unique - my $icol = remove_char($2); - add_column_index($1,$icol); - next; - } - elsif ($doc =~ /^\s*(unique\s+)?(key|index)\s+(\S+)\s*\((.+)\)/i) { # Keys and indexes - my $icol = remove_char($4); - add_column_index("$1$2",$icol,$3); - next; - } - elsif ($doc =~ /^\s*(key)\s+\((.+)\)/i) { # Keys - my $icol = remove_char($2); - add_column_index("$1",$icol,''); - next; - } - - ## TYPES & DEFAULT VALUES ## - my $col_name = ''; - my $col_type = ''; - my $col_def = ''; + ## INDEXES ## + if ($doc =~ /^\s*(primary\s+key)\s*\((.+)\)/i or $doc =~ /^\s*(unique)\s*\((.+)\)/i){ # Primary or unique; + add_column_index($1,$2); + next; + } + elsif ($doc =~ /^\s*(unique\s+)?(key|index)\s+(\S+)\s*\((.+)\)/i) { # Keys and indexes + add_column_index("$1$2",$4,$3); + next; + } + elsif ($doc =~ /^\s*(key)\s+\((.+)\)/i) { # Keys + add_column_index("$1",$2,''); + next; + } + + ## TYPES & DEFAULT VALUES ## + my $col_name = ''; + my $col_type = ''; + my $col_def = ''; - # All the type is contained in the same line (type followed by parenthesis) - if ($doc =~ /^\W*(\w+)\W+(\w+\s?\(.*\))/ ){ - $col_name = remove_char($1); - $col_type = $2; - if ($doc =~ /default\s*([^,\s]+)\s*.*(,|#).*/i) { $col_def = $1; } # Default value - add_column_type_and_default_value($col_name,$col_type,$col_def); - } + # All the type is contained in the same line (type followed by parenthesis) + if ($doc =~ /^\W*(\w+)\W+(\w+\s?\(.*\))/ ){ + $col_name = $1; + $col_type = $2; + if ($doc =~ /default\s*([^,\s]+)\s*.*(,|#).*/i) { $col_def = $1; } # Default value + add_column_type_and_default_value($col_name,$col_type,$col_def); + } - # The type is written in several lines - elsif ($doc =~ /^\W*(\w+)\W+(enum|set)(\s?\(.*)/i){ # The content is split in several lines - $col_name= remove_char($1); - $col_type="$2$3<br />"; - my $end_type = 0; - while ($end_type != 1){ - my $line = <SQLFILE>; - chomp $line; - - #Regex counting VOODOO again - $parenth_count +=()= $line =~ /\(/gi; - $parenth_count -=()= $line =~ /\)/gi; + # The type is written in several lines + elsif ($doc =~ /^\W*(\w+)\W+(enum|set)(\s?\(.*)/i){ # The content is split in several lines + $col_name= $1; + $col_type="$2$3<br />"; + my $end_type = 0; + while ($end_type != 1){ + my $line = <SQLFILE>; + chomp $line; + $line = remove_char($line); + + # Regex counting VOODOO again + $parenth_count +=()= $line =~ /\(/gi; + $parenth_count -=()= $line =~ /\)/gi; - if ($line =~ /\)/) { # Close parenthesis - $end_type=1; - $line =~ /^\s*(.+)\)/; - $col_type .= "$1)"; - } - else { # Add the content of the line - $line =~ /^\s*(.+)/; - $col_type .= $1.'<br />'; + if ($line =~ /\)/) { # Close parenthesis + $end_type=1; + $line =~ /^\s*(.+)\)/; + $col_type .= "$1)"; + } + else { # Add the content of the line + $line =~ /^\s*(.+)/; + $col_type .= $1.'<br />'; + } + if ($line =~ /default\s*([^,\s]+)\s*.*(,|#).*/i) { $col_def = $1; } # Default value } - if ($line =~ /default\s*([^,\s]+)\s*.*(,|#).*/i) { $col_def = $1; } # Default value + add_column_type_and_default_value($col_name,$col_type,$col_def); } - add_column_type_and_default_value($col_name,$col_type,$col_def); - } - # All the type is contained in the same line (type without parenthesis) - elsif ($doc =~ /^\s*\W*(\w+)\W+(\w+)/ ){ - $col_name = remove_char($1); - $col_type = $2; - if ($doc =~ /default\s*([^,\s]+)\s*.*(,|#).*/i) { $col_def = $1;} # Default value - add_column_type_and_default_value($col_name,$col_type,$col_def); - } + # All the type is contained in the same line (type without parenthesis) + elsif ($doc =~ /^\s*\W*(\w+)\W+(\w+)/ ){ + $col_name = $1; + $col_type = $2; + if ($doc =~ /default\s*([^,\s]+)\s*.*(,|#).*/i) { $col_def = $1;} # Default value + add_column_type_and_default_value($col_name,$col_type,$col_def); + } } } } @@ -691,7 +680,6 @@ sub add_columns { my $table_to_link = qq{<a href="#$link">$link</a>}; $desc =~ s/\@link\s?\w+/$table_to_link/; - #$col =~ /^\s*(\w+)[\s\t]+(.+)\t+(.+)\t(.*)/; $html .= qq{ <tr class="bg$bg"><td><b>$name</b></td><td>$type</td><td>$default</td><td>$desc</td><td>$index</td></tr>\n}; if ($bg==1) { $bg=2; } else { $bg=1; } @@ -723,7 +711,6 @@ sub add_column_index { my $idx_name = shift; my $index = $idx_type; - $idx_name = remove_char($idx_name); if (defined($idx_name)) { $index .= ": $idx_name"; } @@ -733,7 +720,6 @@ sub add_column_index { my %is_found = (); foreach my $i_col (@idx_cols) { $i_col =~ s/\s//g; # Remove white spaces - $i_col = remove_char($i_col); # Remove the ` character # In case of index using a number characters for a column if ($i_col =~ /(.+)\(\d+\)/) { $i_col = $1; @@ -805,6 +791,7 @@ sub add_legend { } +# Removed the character(s) ` from the read line. sub remove_char { my $text = shift; $text =~ s/`//g; -- GitLab