mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
8fc710cee6
the row type is dynamic (For 4.1 tables old 'VARCHAR' fields are converted to true VARCHAR in the next ALTER TABLE) This ensures that one can use MySQL 5.0 privilege tables with MySQL 4.1. (Fix imported from main 5.0 tree to 5.0.3 build tree.) mysql-test/r/information_schema.result: Update results (for .frm version number change) mysql-test/r/ndb_autodiscover.result: Update results (for .frm version number change) mysql-test/r/ps_1general.result: Update results (for .frm version number change) mysql-test/r/show_check.result: Update results (for .frm version number change) mysql-test/r/view.result: Update results (for .frm version number change) scripts/fill_func_tables.sh: Ensure that no privilege tables that is used in 4.1 uses VARCHAR scripts/mysql_create_system_tables.sh: Ensure that no privilege tables that is used in 4.1 uses VARCHAR sql/sql_table.cc: Only set create_info->varchar if we are using the new VARCHAR field scripts/mysql_fix_privilege_tables.sh: Fixed bug that made it impossible to run the script from the mysql source dist scripts/mysql_fix_privilege_tables.sql: Ensure that no privilege tables that is used in 4.1 uses VARCHAR sql/table.cc: Hack to ensure that CHAR's created in 5.0 are not converted to VARCHAR even if the row type is dynamic (For 4.1 tables old 'VARCHAR' fields are converted to true VARCHAR in the next ALTER TABLE)
234 lines
5.8 KiB
Bash
234 lines
5.8 KiB
Bash
#!/usr/bin/perl
|
|
# fill_func_tables - parse ../Docs/manual.texi
|
|
|
|
# Original version by vva
|
|
|
|
my $cat_name= "";
|
|
my $func_name= "";
|
|
my $text= "";
|
|
my $example= "";
|
|
|
|
local $mode= "";
|
|
|
|
sub prepare_name
|
|
{
|
|
my ($a)= @_;
|
|
|
|
$a =~ s/(\@itemize \@bullet)/ /g;
|
|
$a =~ s/(\@end itemize)/ /g;
|
|
$a =~ s/(\@end multitable)/ /g;
|
|
$a =~ s/(\@end table)/ /g;
|
|
$a =~ s/(\@cindex(.*?)\n)/ /g;
|
|
$a =~ s/(\@multitable \@columnfractions(.*?)\n)/ /g;
|
|
$a =~ s/(\@node(.*?)\n)/ /g;
|
|
$a =~ s/(\@tab)/\t/g;
|
|
$a =~ s/\@item/ /g;
|
|
$a =~ s/\@code\{((.|\n)+?)\}/$1/go;
|
|
$a =~ s/\@strong\{(.+?)\}/$1/go;
|
|
$a =~ s/\@samp\{(.+?)\}/$1/go;
|
|
$a =~ s/\@emph\{((.|\n)+?)\}/\/$1\//go;
|
|
$a =~ s/\@xref\{((.|\n)+?)\}/See also : [$1]/go;
|
|
$a =~ s/\@ref\{((.|\n)+?)\}/[$1]/go;
|
|
$a =~ s/\'/\'\'/g;
|
|
$a =~ s/\\/\\\\/g;
|
|
$a =~ s/\`/\`\`/g;
|
|
|
|
$a =~ s/\@table \@code/ /g;
|
|
|
|
$a =~ s/\(\)//g;
|
|
|
|
$a =~ s/((\w|\s)+)\(([\+-=><\/%*!<>\s]+)\)/$3/gxs; #$a =~ s/((\w|\s)+)\(([\+-=><\/%*!<>\s]+)\)/$3 $1/gxs;
|
|
$a =~ s/([\+-=><\/%*!<>\s]+)\(((\w|\s)+)\)/$1/gxs;#$a =~ s/([\+-=><\/%*!<>\s]+)\(((\w|\s)+)\)/$1 $2/gxs;
|
|
$a =~ s/((\w|\s)+)\((.+)\)/$1/gxs;
|
|
|
|
return $a;
|
|
}
|
|
|
|
sub prepare_text
|
|
{
|
|
my ($a)= @_;
|
|
|
|
$a =~ s/(\@itemize \@bullet)/ /g;
|
|
$a =~ s/(\@end itemize)/ /g;
|
|
$a =~ s/(\@end multitable)/ /g;
|
|
$a =~ s/(\@end table)/ /g;
|
|
$a =~ s/(\@cindex(.*?)\n)/ /g;
|
|
$a =~ s/(\@multitable \@columnfractions(.*?)\n)/ /g;
|
|
$a =~ s/(\@node(.*?)\n)/ /g;
|
|
$a =~ s/(\@tab)/\t/g;
|
|
$a =~ s/\@itemx/ /g;
|
|
$a =~ s/\@item/ /g;
|
|
$a =~ s/\@code\{((.|\n)+?)\}/$1/go;
|
|
$a =~ s/\@strong\{(.+?)\}/$1/go;
|
|
$a =~ s/\@samp\{(.+?)\}/$1/go;
|
|
$a =~ s/\@emph\{((.|\n)+?)\}/\/$1\//go;
|
|
$a =~ s/\@xref\{((.|\n)+?)\}/See also : [$1]/go;
|
|
$a =~ s/\@ref\{((.|\n)+?)\}/[$1]/go;
|
|
$a =~ s/\'/\'\'/g;
|
|
$a =~ s/\\/\\\\/g;
|
|
$a =~ s/\`/\`\`/g;
|
|
$a =~ s/(\n*?)$//g;
|
|
$a =~ s/\n/\\n/g;
|
|
|
|
$a =~ s/\@table \@code/ /g;
|
|
|
|
return $a;
|
|
}
|
|
|
|
sub prepare_example
|
|
{
|
|
my ($a)= @_;
|
|
|
|
$a =~ s/\'/\'\'/g;
|
|
$a =~ s/\\/\\\\/g;
|
|
$a =~ s/\`/\`\`/g;
|
|
$a =~ s/(\n*?)$//g;
|
|
$a =~ s/\n/\\n/g;
|
|
|
|
return $a;
|
|
}
|
|
|
|
sub flush_all
|
|
{
|
|
my ($mode) = @_;
|
|
|
|
if ($mode eq ""){return;}
|
|
|
|
$func_name= prepare_name($func_name);
|
|
$text= prepare_text($text);
|
|
$example= prepare_example($example);
|
|
|
|
if ($func_name ne "" && $text ne "" && !($func_name =~ /[abcdefghikjlmnopqrstuvwxyz]/)){
|
|
print "INSERT INTO function (name,description,example) VALUES (";
|
|
print "'$func_name',";
|
|
print "'$text',";
|
|
print "'$example'";
|
|
print ");\n";
|
|
print "INSERT INTO function_category (cat_id,func_id) VALUES (\@cur_category,LAST_INSERT_ID());\n";
|
|
}
|
|
|
|
$func_name= "";
|
|
$text= "";
|
|
$example= "";
|
|
$mode= "";
|
|
}
|
|
|
|
sub new_category
|
|
{
|
|
my ($category)= @_;
|
|
|
|
$category= prepare_text($category);
|
|
|
|
print "INSERT INTO function_category_name (name) VALUES (\'$category\');\n";
|
|
print "SELECT \@cur_category:=LAST_INSERT_ID();\n";
|
|
}
|
|
|
|
print "INSERT INTO db (Host,DB,User,Select_priv) VALUES ('%','mysql_help','','Y');\n";
|
|
print "CREATE DATABASE mysql_help;\n";
|
|
|
|
print "USE mysql_help;\n";
|
|
|
|
print "DROP TABLE IF EXISTS function;\n";
|
|
print "CREATE TABLE function (";
|
|
print " func_id int unsigned not null auto_increment,";
|
|
print " name char(64) not null,";
|
|
print " url char(128) not null,";
|
|
print " description text not null,";
|
|
print " example text not null,";
|
|
print " min_args tinyint not null,";
|
|
print " max_args tinyint,";
|
|
print " date_created datetime not null,";
|
|
print " last_modified timestamp not null,";
|
|
print " primary key (func_id)";
|
|
print ") type=myisam;\n\n";
|
|
|
|
print "DROP TABLE IF EXISTS function_category_name;\n";
|
|
print "CREATE TABLE function_category_name (";
|
|
print " cat_id smallint unsigned not null auto_increment,";
|
|
print " name char(64) not null,";
|
|
print " url char(128) not null,";
|
|
print " date_created datetime not null,";
|
|
print " last_modified timestamp not null,";
|
|
print " primary key (cat_id)";
|
|
print ") type=myisam;\n\n";
|
|
|
|
print "DROP TABLE IF EXISTS function_category;\n";
|
|
print "CREATE TABLE function_category (";
|
|
print " cat_id smallint unsigned not null references function_category_name,";
|
|
print " func_id int unsigned not null references function,";
|
|
print " primary key (cat_id, func_id)";
|
|
print ") type=myisam;\n\n";
|
|
|
|
print "DELETE FROM function_category_name;\n";
|
|
print "DELETE FROM function_category;\n";
|
|
print "DELETE FROM function;\n";
|
|
print "SELECT \@cur_category:=null;\n\n";
|
|
|
|
my $in_section_6_3= 0;
|
|
|
|
for(<>)
|
|
{
|
|
if ($_=~/\@section Functions for Use in \@code{SELECT} and \@code{WHERE} Clauses/ &&
|
|
!$in_section_6_3){
|
|
$in_section_6_3= 1;
|
|
next;
|
|
}
|
|
|
|
if ($_=~/\@section/ && $in_section_6_3){
|
|
$in_section_6_3= 0;
|
|
next;
|
|
}
|
|
|
|
if (!$in_section_6_3) { next; }
|
|
|
|
my $c_name= "";
|
|
|
|
($c_name)=m|\@c for_mysql_help,(.+?)$|;
|
|
if (!($c_name eq "") && ! ($c_name =~ m/$cat_name/i)){
|
|
($cat_name)= $c_name;
|
|
new_category($cat_name);
|
|
next;
|
|
}
|
|
|
|
($c_name)=m|\@subsubsection (.+?)$|;
|
|
if (!($c_name eq "") && ! ($c_name =~ m/$cat_name/i)){
|
|
($cat_name)= $c_name;
|
|
new_category($cat_name);
|
|
next;
|
|
}
|
|
|
|
($c_name)=m|\@subsection (.+?)$|;
|
|
if (!($c_name eq "") && ! ($c_name =~ m/$cat_name/i)){
|
|
($cat_name)= $c_name;
|
|
new_category($cat_name);
|
|
next;
|
|
}
|
|
|
|
($f_name)=m|\@findex (.+?)$|;
|
|
if (!($f_name eq "")){
|
|
flush_all($mode);
|
|
($func_name)= ($f_name);
|
|
$mode= "text";
|
|
next;
|
|
}
|
|
|
|
if ($_=~/\@example/ && ($mode eq "text")){
|
|
$mode= "example";
|
|
next;
|
|
}
|
|
|
|
if ($_=~/\@end example/ && ($mode eq "example")){
|
|
flush_all($mode);
|
|
next;
|
|
}
|
|
|
|
if ($mode eq "text") { $text .= $_; }
|
|
if ($mode eq "example") { $example .= $_; }
|
|
}
|
|
|
|
|
|
print "DELETE function_category_name ";
|
|
print "FROM function_category_name ";
|
|
print "LEFT JOIN function_category ON function_category.cat_id=function_category_name.cat_id ";
|
|
print "WHERE function_category.cat_id is null;"
|
|
|