mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
new version of help
This commit is contained in:
@ -32,7 +32,9 @@ bin_SCRIPTS = @server_scripts@ \
|
||||
mysqldumpslow \
|
||||
mysql_explain_log \
|
||||
mysql_tableinfo \
|
||||
mysqld_multi
|
||||
mysqld_multi \
|
||||
fill_help_tables \
|
||||
mysql_create_system_tables
|
||||
|
||||
EXTRA_SCRIPTS = make_binary_distribution.sh \
|
||||
make_win_src_distribution.sh \
|
||||
@ -54,14 +56,13 @@ EXTRA_SCRIPTS = make_binary_distribution.sh \
|
||||
mysqld_multi.sh \
|
||||
mysql_tableinfo.sh \
|
||||
mysqld_safe.sh \
|
||||
fill_help_tables.sh
|
||||
fill_help_tables.sh \
|
||||
mysql_create_system_tables.sh
|
||||
|
||||
EXTRA_DIST = $(EXTRA_SCRIPTS) \
|
||||
mysqlaccess.conf \
|
||||
mysqlbug
|
||||
|
||||
pkgdata_DATA = fill_help_tables.sql
|
||||
|
||||
# mysqlbug should be distributed built so that people can report build
|
||||
# failures with it.
|
||||
CLEANFILES = @server_scripts@ \
|
||||
@ -81,7 +82,7 @@ CLEANFILES = @server_scripts@ \
|
||||
mysqldumpslow \
|
||||
mysqld_multi \
|
||||
fill_help_tables \
|
||||
fill_help_tables.sql
|
||||
mysql_create_system_tables
|
||||
|
||||
SUPERCLEANFILES = mysqlbug
|
||||
|
||||
@ -137,12 +138,5 @@ SUFFIXES = .sh
|
||||
# Don't update the files from bitkeeper
|
||||
%::SCCS/s.%
|
||||
|
||||
all: fill_help_tables.sql make_win_src_distribution make_binary_distribution
|
||||
all: make_win_src_distribution make_binary_distribution
|
||||
|
||||
# The following rule is here to ensure that build will continue
|
||||
# even if we don't have perl installed. In this case the help tables
|
||||
# will be empty
|
||||
|
||||
fill_help_tables.sql: fill_help_tables ../Docs/manual.texi
|
||||
-./fill_help_tables < ../Docs/manual.texi > fill_help_tables.sql
|
||||
echo "" >> fill_help_tables.sql
|
||||
|
@ -1,31 +1,178 @@
|
||||
#!@PERL@
|
||||
#
|
||||
# Usage: fill_help_tables <manual.texi>
|
||||
# Example: ./fill_help_tables < ../Docs/manual.texi > fill_help_tables.sql
|
||||
# Copyright (C) 2003 MySQL AB
|
||||
# For a more info consult the file COPYRIGHT distributed with this file.
|
||||
#
|
||||
# This script generates the SQL statements required by mysql_install_db to
|
||||
# fill up the tables for the server-side online function help, which can be
|
||||
# invoked with "help <function>" from the MySQL client.
|
||||
#
|
||||
# Usage:
|
||||
# fill_help_tables OPTIONS < manual.texi > fill_help_tables.sql
|
||||
#
|
||||
# --help display this helpscreen and exit
|
||||
# --verbose print information about help completeness to STDERR
|
||||
# --lexems=path path to file with lexems. it is used with verbose option.
|
||||
# default value is ../sql/lex.h
|
||||
# Examples:
|
||||
# ./fill_help_tables --help
|
||||
# ./fill_help_tables --verbose < manual.texi > fill_help_tables.sql
|
||||
# ./fill_help_tables < manual.texi > fill_help_tables.sql
|
||||
#
|
||||
# Please note, that you first need to update Docs/manual.texi with the
|
||||
# manual file from the separate "mysqldoc" BitKeeper-Tree! The manual.texi
|
||||
# included in the source tree is just an empty stub file - the full manual
|
||||
# is now maintained in a separate tree.
|
||||
#
|
||||
# extra tags in manual.texi:
|
||||
#
|
||||
# @c help_category <category_name>[@<parent_category_name>]
|
||||
#
|
||||
# @c description_for_help_topic <topic_name> <keyword1> <keyword2>
|
||||
# ....
|
||||
# @c end_description_for_help_topic
|
||||
#
|
||||
# @c example_for_help_topic <topic_name>
|
||||
# @example
|
||||
# ....
|
||||
# @example
|
||||
#
|
||||
#
|
||||
# Original version by Victor Vagin <vva@mysql.com>
|
||||
#
|
||||
|
||||
my $cat_name= "";
|
||||
my $func_name= "";
|
||||
my $text= "";
|
||||
my $example= "";
|
||||
use strict;
|
||||
use Getopt::Long;
|
||||
|
||||
local $mode= "";
|
||||
my $insert_portion_size= 25;
|
||||
my $error_prefix= "help parsing error:";
|
||||
|
||||
my $path_to_lex_file= "../sql/lex.h";
|
||||
my $verbose_option= 0;
|
||||
my $help_option= 0;
|
||||
|
||||
GetOptions(
|
||||
"help",\$help_option,
|
||||
"verbose",\$verbose_option,
|
||||
"lexems=s",\$path_to_lex_file
|
||||
);
|
||||
|
||||
if ($help_option ne 0)
|
||||
{
|
||||
print <<_HELP;
|
||||
|
||||
This script generates the SQL statements required by mysql_install_db to
|
||||
fill up the tables for the server-side online function help, which can be
|
||||
invoked with "help <function>" from the MySQL client.
|
||||
|
||||
Usage:
|
||||
fill_help_tables OPTIONS < manual.texi > fill_help_tables.sql
|
||||
|
||||
--help display this helpscreen and exit
|
||||
--verbose print information about help completeness to STDERR
|
||||
--lexems=path path to file with lexems. it is used with verbose option.
|
||||
default value is ../sql/lex.h
|
||||
|
||||
Examples:
|
||||
./fill_help_tables --help
|
||||
./fill_help_tables --verbose < manual.texi > fill_help_tables.sql
|
||||
./fill_help_tables < manual.texi > fill_help_tables.sql
|
||||
|
||||
_HELP
|
||||
exit;
|
||||
}
|
||||
|
||||
my $current_category= "";
|
||||
my $current_parent_category= "";
|
||||
my $next_example_for_topic= "";
|
||||
|
||||
my %topics;
|
||||
my %categories;
|
||||
my %keywords;
|
||||
|
||||
$categories{Contents}->{__parent_category__}= "";
|
||||
|
||||
sub add_topic_to_category
|
||||
{
|
||||
my ($topic_name)= @_;
|
||||
|
||||
$categories{$current_category}->{$topic_name}= $topics{$topic_name};
|
||||
my $category= $categories{$current_category};
|
||||
|
||||
if (exists($category->{__parent_category__}))
|
||||
{
|
||||
my $old_parent= $category->{__parent_category__};
|
||||
if ($old_parent ne $current_parent_category)
|
||||
{
|
||||
print STDERR "$error_prefix wrong parent for $current_category\n";
|
||||
}
|
||||
}
|
||||
|
||||
if ($current_parent_category ne "")
|
||||
{
|
||||
$category->{__parent_category__}= $current_parent_category;
|
||||
}
|
||||
|
||||
if (exists($topics{$topic_name}->{category}))
|
||||
{
|
||||
my $old_category= $topics{$topic_name}->{category};
|
||||
if ($old_category ne $category)
|
||||
{
|
||||
print STDERR "$error_prefix wrong category for $topic_name\n";
|
||||
}
|
||||
}
|
||||
|
||||
$topics{$topic_name}->{category}= $category;
|
||||
}
|
||||
|
||||
sub add_example
|
||||
{
|
||||
my ($topic_name,$example)= @_;
|
||||
|
||||
$topic_name=~ tr/a-z/A-Z/;
|
||||
|
||||
if (exists($topics{$topic_name}->{example}))
|
||||
{
|
||||
print STDERR "$error_prefix double example for $topic_name\n";
|
||||
}
|
||||
|
||||
$topics{$topic_name}->{example}= $example;
|
||||
add_topic_to_category($topic_name);
|
||||
}
|
||||
|
||||
sub add_description
|
||||
{
|
||||
my ($topic_name,$description)= @_;
|
||||
|
||||
$topic_name=~ tr/a-z/A-Z/;
|
||||
|
||||
if (exists($topics{$topic_name}->{description}))
|
||||
{
|
||||
print STDERR "$error_prefix double description for $topic_name\n";
|
||||
}
|
||||
$topics{$topic_name}->{description}= $description;
|
||||
add_topic_to_category($topic_name);
|
||||
}
|
||||
|
||||
sub add_keyword
|
||||
{
|
||||
my ($topic_name,$keyword)= @_;
|
||||
|
||||
$topic_name=~ tr/a-z/A-Z/;
|
||||
$keyword=~ tr/a-z/A-Z/;
|
||||
|
||||
push(@{$topics{$topic_name}->{keywords}},$keyword);
|
||||
if (exists($keywords{$keyword}->{$topic_name}))
|
||||
{
|
||||
print STDERR "$error_prefix double keyword $keyword for $topic_name\n";
|
||||
}
|
||||
$keywords{$keyword}->{$topic_name}= $topics{$topic_name};
|
||||
}
|
||||
|
||||
sub prepare_name
|
||||
{
|
||||
my ($a)= @_;
|
||||
|
||||
|
||||
$a =~ s/(\@itemize \@bullet)/ /g;
|
||||
$a =~ s/(\@end itemize)/ /g;
|
||||
$a =~ s/(\@end multitable)/ /g;
|
||||
@ -46,41 +193,57 @@ sub prepare_name
|
||||
$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/\"/\\\"/g;
|
||||
|
||||
$a =~ s/((\w|\s)+)\(([\+-=><\/%*!<>\s]+)\)/$3/gxs;
|
||||
$a =~ s/([\+-=><\/%*!<>\s]+)\(((\w|\s)+)\)/$1/gxs;
|
||||
$a =~ s/((\w|\s)+)\((.+)\)/$1/gxs;
|
||||
|
||||
|
||||
return $a;
|
||||
}
|
||||
|
||||
sub prepare_text
|
||||
sub prepare_description
|
||||
{
|
||||
my ($a)= @_;
|
||||
|
||||
$a =~ s/(\@itemize \@bullet)/ /g;
|
||||
$a =~ s/(\@end itemize)/ /g;
|
||||
$a =~ s/(\@itemize \@bullet\n)//g;
|
||||
$a =~ s/(\@c help_keyword (.*?)\n)//g;
|
||||
$a =~ s/(\@end itemize\n)//g;
|
||||
$a =~ s/(\@end example\n)//g;
|
||||
$a =~ s/(\@example\n)//g;
|
||||
$a =~ s/(\@{)/{/g;
|
||||
$a =~ s/(\@})/}/g;
|
||||
$a =~ s/(\@end multitable)/ /g;
|
||||
$a =~ s/(\@end table)/ /g;
|
||||
$a =~ s/(\@cindex(.*?)\n)/ /g;
|
||||
$a =~ s/(\@cindex(.*?)\n)//g;
|
||||
$a =~ s/(\@findex(.*?)\n)//g;
|
||||
$a =~ s/(\@table(.*?)\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/(\@item\n(\s*?))(\S)/ --- $3/g;
|
||||
$a =~ s/(\@item)/ /g;
|
||||
$a =~ s/(\@tindex\s(.*?)\n)//g;
|
||||
$a =~ s/(\@c\s(.*?)\n)//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/\@w\{((.|\n)+?)\}/$1/go;
|
||||
$a =~ s/\@strong\{((.|\n)+?)\}/\n!!!!\n$1\n!!!!\n/go;
|
||||
$a =~ s/\@file\{((.|\n)+?)\}/\*$1/go;
|
||||
$a =~ s/\\/\\\\/g;
|
||||
$a =~ s/\`/\`\`/g;
|
||||
$a =~ s/(\n*?)$//g;
|
||||
$a =~ s/\n\n$/\n/g;
|
||||
$a =~ s/\n\n$/\n/g;
|
||||
$a =~ s/\n\n$/\n/g;
|
||||
$a =~ s/\n\n$/\n/g;
|
||||
$a =~ s/\n\n$/\n/g;
|
||||
$a =~ s/\n/\\n/g;
|
||||
$a =~ s/\"/\\\"/g;
|
||||
|
||||
$a =~ s/\@table \@code/ /g;
|
||||
|
||||
@ -91,148 +254,291 @@ sub prepare_example
|
||||
{
|
||||
my ($a)= @_;
|
||||
|
||||
$a =~ s/\'/\'\'/g;
|
||||
$a =~ s/(^\@c for_help_topic(.*?)\n)//g;
|
||||
|
||||
$a =~ s/\\/\\\\/g;
|
||||
$a =~ s/\`/\`\`/g;
|
||||
$a =~ s/(\@{)/{/g;
|
||||
$a =~ s/(\@})/}/g;
|
||||
$a =~ s/(\@\@)/\@/g;
|
||||
$a =~ s/(\n*?)$//g;
|
||||
$a =~ s/\n/\\n/g;
|
||||
|
||||
$a =~ s/\"/\\\"/g;
|
||||
|
||||
return $a;
|
||||
}
|
||||
|
||||
sub flush_all
|
||||
sub parse_example
|
||||
{
|
||||
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 IGNORE INTO help_topic (name,description,example) VALUES (";
|
||||
print "'$func_name',";
|
||||
print "'$text',";
|
||||
print "'$example'";
|
||||
print ");\n";
|
||||
print "INSERT IGNORE INTO help_relation (help_category_id,help_topic_id) VALUES (\@cur_category,LAST_INSERT_ID());\n";
|
||||
return if (!($_=~/\@example/));
|
||||
return if ($next_example_for_topic eq "");
|
||||
|
||||
my $topic_name= $next_example_for_topic;
|
||||
$next_example_for_topic= "";
|
||||
my $text= "";
|
||||
|
||||
while (<>)
|
||||
{
|
||||
last if ($_=~/\@end example/);
|
||||
$text .= $_;
|
||||
}
|
||||
|
||||
$text= prepare_example($text);
|
||||
|
||||
$func_name= "";
|
||||
$text= "";
|
||||
$example= "";
|
||||
$mode= "";
|
||||
add_example($topic_name,$text) if ($topic_name ne "");
|
||||
}
|
||||
|
||||
sub new_category
|
||||
sub parse_example_for_topic
|
||||
{
|
||||
my ($category)= @_;
|
||||
|
||||
$category= prepare_text($category);
|
||||
|
||||
print "INSERT IGNORE INTO help_category (name) VALUES (\'$category\');\n";
|
||||
print "SET \@cur_category=LAST_INSERT_ID();\n";
|
||||
my ($for_topic)= m|\@c example_for_help_topic (.+?)$|;
|
||||
return if ($for_topic eq "");
|
||||
|
||||
$next_example_for_topic= $for_topic;
|
||||
}
|
||||
|
||||
#print "INSERT IGNORE INTO db (Host,DB,User,Select_priv) VALUES ('%','mysql_help','','Y');\n";
|
||||
#print "CREATE DATABASE mysql_help;\n";
|
||||
|
||||
print "USE mysql;\n";
|
||||
|
||||
print "DROP TABLE IF EXISTS help_topic;\n";
|
||||
print "CREATE TABLE help_topic (";
|
||||
print " help_topic_id int unsigned not null auto_increment,";
|
||||
print " name varchar(64) not null,";
|
||||
print " description text not null,";
|
||||
print " example text not null,";
|
||||
print " url varchar(128) not null,";
|
||||
print " primary key (help_topic_id),";
|
||||
print " unique index(name)";
|
||||
print ") type=myisam;\n\n";
|
||||
|
||||
print "DROP TABLE IF EXISTS help_category;\n";
|
||||
print "CREATE TABLE help_category (";
|
||||
print " help_category_id smallint unsigned not null auto_increment,";
|
||||
print " name varchar(64) not null,";
|
||||
print " url varchar(128) not null,";
|
||||
print " primary key (help_category_id),";
|
||||
print " unique index (name)";
|
||||
print ") type=myisam;\n\n";
|
||||
|
||||
print "DROP TABLE IF EXISTS help_relation;\n";
|
||||
print "CREATE TABLE help_relation (";
|
||||
print" help_topic_id int unsigned not null references help_topic,";
|
||||
print" help_category_id smallint unsigned not null references help_category,";
|
||||
print" primary key (help_category_id, help_topic_id),";
|
||||
print ") type=myisam;\n\n";
|
||||
|
||||
print "SET \@cur_category=null;\n\n";
|
||||
|
||||
my $in_section_6_3= 0;
|
||||
|
||||
for(<>)
|
||||
sub parse_description
|
||||
{
|
||||
if ($_=~/\@section Functions for Use in \@code{SELECT} and \@code{WHERE} Clauses/ &&
|
||||
!$in_section_6_3){
|
||||
$in_section_6_3= 1;
|
||||
next;
|
||||
my ($topic_description)= m|\@c description_for_help_topic (.+?)$|;
|
||||
return if ($topic_description eq "");
|
||||
|
||||
my ($topic_name,$topic_keywords)= split(/ /,$topic_description);
|
||||
|
||||
if ($topic_name eq "" || $topic_keywords eq "")
|
||||
{
|
||||
$topic_name= $topic_description;
|
||||
}
|
||||
|
||||
if ($_=~/\@section/ && $in_section_6_3){
|
||||
$in_section_6_3= 0;
|
||||
next;
|
||||
else
|
||||
{
|
||||
my $keyword;
|
||||
foreach $keyword (split(/ /,$topic_keywords))
|
||||
{
|
||||
add_keyword($topic_name,$keyword) if ($keyword ne "");
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
my $text= "";
|
||||
|
||||
while (<>)
|
||||
{
|
||||
last if ($_=~/\@c end_description_for_help_topic/);
|
||||
$text .= $_;
|
||||
}
|
||||
|
||||
($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 .= $_; }
|
||||
|
||||
$text= prepare_description($text);
|
||||
add_description($topic_name,$text);
|
||||
}
|
||||
|
||||
sub parse_category
|
||||
{
|
||||
my ($c_name,$pc_name)= m|\@c help_category (.+?)\@(.+?)$|;
|
||||
|
||||
print "DELETE help_category ";
|
||||
print "FROM help_category ";
|
||||
print "LEFT JOIN help_relation ON help_category.help_category_id=help_relation.help_category_id ";
|
||||
print "WHERE help_relation.help_category_id is null;"
|
||||
if ($pc_name ne "")
|
||||
{
|
||||
$current_category= prepare_name($c_name);
|
||||
$current_parent_category= prepare_name($pc_name);
|
||||
}
|
||||
else
|
||||
{
|
||||
my ($c_name)=m|\@c help_category (.+?)$|;
|
||||
return if ($c_name eq "");
|
||||
|
||||
$current_category= prepare_name($c_name);
|
||||
$current_parent_category= "Contents"
|
||||
}
|
||||
}
|
||||
|
||||
# parse manual:
|
||||
|
||||
while (<>)
|
||||
{
|
||||
parse_example_for_topic ();
|
||||
parse_example ();
|
||||
parse_description ();
|
||||
parse_category ();
|
||||
}
|
||||
|
||||
# test results of parsing:
|
||||
|
||||
sub print_bad_names
|
||||
{
|
||||
my($names,$prompt)= @_;
|
||||
if (scalar(@{$names}))
|
||||
{
|
||||
print STDERR "\n-------------- $prompt : \n\n";
|
||||
my $name;
|
||||
foreach $name (@{$names})
|
||||
{
|
||||
print STDERR "$name\n";
|
||||
}
|
||||
print STDERR "\n";
|
||||
}
|
||||
}
|
||||
|
||||
sub print_verbose_errors
|
||||
{
|
||||
my($name_of_log_file)= @_;
|
||||
|
||||
my @without_help;
|
||||
my @description_with_at;
|
||||
my @example_with_at;
|
||||
my @without_description;
|
||||
my @without_example;
|
||||
|
||||
print STDERR "\n-------------- parameters of help completeness : \n\n";
|
||||
|
||||
my $count_lex= 0;
|
||||
if (!open (TLEX,"<$path_to_lex_file"))
|
||||
{
|
||||
print STDERR "Error opening lex file \"$path_to_lex_file\" $!\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
for (<TLEX>)
|
||||
{
|
||||
my ($a,$lex,$b)=m|(.+?)\"(.+?)\"(.+?)$|;
|
||||
next if ($lex eq "");
|
||||
$count_lex++;
|
||||
next if (exists($topics{$lex}) || exists($keywords{$lex}));
|
||||
push(@without_help,$lex);
|
||||
}
|
||||
close(TLEX);
|
||||
print STDERR "number of lexems in \"$path_to_lex_file\" - $count_lex\n";
|
||||
}
|
||||
|
||||
my $name;
|
||||
my @topic_names= keys(%topics);
|
||||
foreach $name (@topic_names)
|
||||
{
|
||||
my $topic= $topics{$name};
|
||||
push(@description_with_at,$name) if ($topic->{description}=~/\@/);
|
||||
push(@example_with_at,$name) if ($topic->{example}=~/\@/);
|
||||
push(@without_description,$name) if (!exists($topic->{description}));
|
||||
push(@without_example,$name) if (!exists($topic->{example}));
|
||||
}
|
||||
|
||||
my $count_categories= scalar(keys(%categories));
|
||||
print STDERR "number of help categories - ",$count_categories,"\n";
|
||||
my $count_topics= scalar(@topic_names);
|
||||
print STDERR "number of help topics - ",$count_topics,"\n";
|
||||
my $count_keywords= scalar(keys(%keywords));
|
||||
print STDERR "number of help keywords - ",$count_keywords,"\n";
|
||||
|
||||
my $count_without_help= scalar(@without_help);
|
||||
print_bad_names(\@without_help,"lexems without help (".
|
||||
$count_without_help." ~ ".
|
||||
(int (($count_without_help/$count_lex)*100)).
|
||||
"%)");
|
||||
print_bad_names(\@description_with_at,
|
||||
" topics below have symbol \'@\' in their descriptions.\n".
|
||||
"it's probably the litter from 'texi' tags (script needs fixing)");
|
||||
print_bad_names(\@example_with_at,
|
||||
" topics below have symbol \'@\' in their examples.\n".
|
||||
"it's probably the litter from 'texi' tags (script needs fixing)");
|
||||
print_bad_names(\@without_description,"topics without description");
|
||||
|
||||
my $count_without_example= scalar(@without_example);
|
||||
print_bad_names(\@without_example,"topics without example (".
|
||||
$count_without_example." ~ ".
|
||||
(int (($count_without_example/$count_topics)*100)).
|
||||
"%)");
|
||||
}
|
||||
|
||||
print_verbose_errors if ($verbose_option ne 0);
|
||||
|
||||
# output result
|
||||
|
||||
sub print_insert_header
|
||||
{
|
||||
my($count,$header)= @_;
|
||||
|
||||
if ($count % $insert_portion_size ne 0) {
|
||||
print ",";
|
||||
} else {
|
||||
print ";\n" if ($count ne 0);
|
||||
print "$header";
|
||||
}
|
||||
}
|
||||
|
||||
print "delete from help_topic;\n";
|
||||
print "delete from help_category;\n";
|
||||
print "delete from help_keyword;\n";
|
||||
print "delete from help_relation;\n\n";
|
||||
|
||||
my @category_names= keys(%categories);
|
||||
if (scalar(@category_names))
|
||||
{
|
||||
my $cat_name;
|
||||
my $count= 0;
|
||||
foreach $cat_name (@category_names)
|
||||
{
|
||||
$categories{$cat_name}->{__id__}= $count;
|
||||
$count++;
|
||||
}
|
||||
|
||||
my $header= "insert into help_category ".
|
||||
"(help_category_id,name,parent_category_id) values ";
|
||||
$count= 0;
|
||||
foreach $cat_name (@category_names)
|
||||
{
|
||||
print_insert_header($count,$header);
|
||||
my $parent_cat_name= $categories{$cat_name}->{__parent_category__};
|
||||
my $parent_cat_id= $parent_cat_name eq ""
|
||||
? "-1" : $categories{$parent_cat_name}->{__id__};
|
||||
print "($count,\"$cat_name\",$parent_cat_id)";
|
||||
$count++;
|
||||
}
|
||||
printf ";\n\n";
|
||||
}
|
||||
|
||||
my @topic_names= keys(%topics);
|
||||
if (scalar(@topic_names))
|
||||
{
|
||||
my $header= "insert into help_topic ".
|
||||
"(help_topic_id,help_category_id,name,description,example) values ";
|
||||
my $topic_name;
|
||||
my $count= 0;
|
||||
foreach $topic_name (@topic_names)
|
||||
{
|
||||
print_insert_header($count,$header);
|
||||
my $topic= $topics{$topic_name};
|
||||
print "($count,";
|
||||
print "$topic->{category}->{__id__},";
|
||||
print "\"$topic_name\",";
|
||||
print "\"$topic->{description}\",";
|
||||
print "\"$topic->{example}\")";
|
||||
$topics{$topic_name}->{__id__}= $count;
|
||||
$count++;
|
||||
}
|
||||
printf ";\n\n";
|
||||
}
|
||||
|
||||
my @keywords_names= keys(%keywords);
|
||||
if (scalar(@keywords_names))
|
||||
{
|
||||
my $header= "insert into help_keyword (help_keyword_id,name) values ";
|
||||
my $keyword_name;
|
||||
my $count= 0;
|
||||
foreach $keyword_name (@keywords_names)
|
||||
{
|
||||
print_insert_header($count,$header);
|
||||
print "($count,\"$keyword_name\")";
|
||||
$count++;
|
||||
}
|
||||
printf ";\n\n";
|
||||
|
||||
$header= "insert into help_relation ".
|
||||
"(help_topic_id,help_keyword_id) values ";
|
||||
$count= 0;
|
||||
my $count_keyword= 0;
|
||||
foreach $keyword_name (@keywords_names)
|
||||
{
|
||||
my $topic_name;
|
||||
foreach $topic_name (keys(%{$keywords{$keyword_name}}))
|
||||
{
|
||||
print_insert_header($count,$header);
|
||||
print "($topics{$topic_name}->{__id__},$count_keyword)";
|
||||
$count++;
|
||||
}
|
||||
$count_keyword++;
|
||||
}
|
||||
printf ";\n\n";
|
||||
}
|
||||
|
311
scripts/mysql_create_system_tables.sh
Normal file
311
scripts/mysql_create_system_tables.sh
Normal file
@ -0,0 +1,311 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Copyright (C) 1997-2002 MySQL AB
|
||||
# For a more info consult the file COPYRIGHT distributed with this file
|
||||
|
||||
# This script writes on stdout SQL commands to generate all not
|
||||
# existing MySQL system tables. It also replaces the help tables with
|
||||
# new context from the manual (from fill_help_tables.sql).
|
||||
|
||||
# $1 - "test" or "real" or "verbose" variant of database
|
||||
# $2 - path to mysql-database directory
|
||||
# $3 - hostname
|
||||
# $4 - windows option
|
||||
|
||||
if test x$1 = x"" ;
|
||||
then
|
||||
echo "
|
||||
This script writes on stdout SQL commands to generate all not
|
||||
existing MySQL system tables. It also replaces the help tables with
|
||||
new context from the manual (from fill_help_tables.sql).
|
||||
|
||||
Usage:
|
||||
mysql_create_system_tables {help|real|verbose} <path to mysql-database directory> <hostname> <windows option>
|
||||
";
|
||||
exit;
|
||||
fi
|
||||
|
||||
mdata=$2
|
||||
hostname=$3
|
||||
windows=$4
|
||||
|
||||
# Initialize variables
|
||||
c_d="" i_d=""
|
||||
c_h="" i_h=""
|
||||
c_u="" i_u=""
|
||||
c_f="" i_f=""
|
||||
c_t="" c_c=""
|
||||
c_ht=""
|
||||
c_hc=""
|
||||
c_hr=""
|
||||
c_hk=""
|
||||
i_ht=""
|
||||
|
||||
# Check for old tables
|
||||
if test ! -f $mdata/db.frm
|
||||
then
|
||||
if test x$1 = x"verbose" ; then
|
||||
echo "Preparing db table" 1>&2;
|
||||
fi
|
||||
|
||||
# mysqld --bootstrap wants one command/line
|
||||
c_d="$c_d CREATE TABLE db ("
|
||||
c_d="$c_d Host char(60) binary DEFAULT '' NOT NULL,"
|
||||
c_d="$c_d Db char(64) binary DEFAULT '' NOT NULL,"
|
||||
c_d="$c_d User char(16) binary DEFAULT '' NOT NULL,"
|
||||
c_d="$c_d Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d PRIMARY KEY Host (Host,Db,User),"
|
||||
c_d="$c_d KEY User (User)"
|
||||
c_d="$c_d )"
|
||||
c_d="$c_d comment='Database privileges';"
|
||||
|
||||
i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');
|
||||
INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');"
|
||||
fi
|
||||
|
||||
if test ! -f $mdata/host.frm
|
||||
then
|
||||
if test x$1 = x"verbose" ; then
|
||||
echo "Preparing host table" 1>&2;
|
||||
fi
|
||||
|
||||
c_h="$c_h CREATE TABLE host ("
|
||||
c_h="$c_h Host char(60) binary DEFAULT '' NOT NULL,"
|
||||
c_h="$c_h Db char(64) binary DEFAULT '' NOT NULL,"
|
||||
c_h="$c_h Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h PRIMARY KEY Host (Host,Db)"
|
||||
c_h="$c_h )"
|
||||
c_h="$c_h comment='Host privileges; Merged with database privileges';"
|
||||
fi
|
||||
|
||||
if test ! -f $mdata/user.frm
|
||||
then
|
||||
if test x$1 = x"verbose" ; then
|
||||
echo "Preparing user table" 1>&2;
|
||||
fi
|
||||
|
||||
c_u="$c_u CREATE TABLE user ("
|
||||
c_u="$c_u Host char(60) binary DEFAULT '' NOT NULL,"
|
||||
c_u="$c_u User char(16) binary DEFAULT '' NOT NULL,"
|
||||
c_u="$c_u Password char(45) binary DEFAULT '' NOT NULL,"
|
||||
c_u="$c_u Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Process_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u File_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Show_db_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Super_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u ssl_type enum('','ANY','X509', 'SPECIFIED') DEFAULT '' NOT NULL,"
|
||||
c_u="$c_u ssl_cipher BLOB NOT NULL,"
|
||||
c_u="$c_u x509_issuer BLOB NOT NULL,"
|
||||
c_u="$c_u x509_subject BLOB NOT NULL,"
|
||||
c_u="$c_u max_questions int(11) unsigned DEFAULT 0 NOT NULL,"
|
||||
c_u="$c_u max_updates int(11) unsigned DEFAULT 0 NOT NULL,"
|
||||
c_u="$c_u max_connections int(11) unsigned DEFAULT 0 NOT NULL,"
|
||||
c_u="$c_u PRIMARY KEY Host (Host,User)"
|
||||
c_u="$c_u )"
|
||||
c_u="$c_u comment='Users and global privileges';"
|
||||
|
||||
if test x$1 = x"test"
|
||||
then
|
||||
i_u="INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
||||
INSERT INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
||||
REPLACE INTO user VALUES ('127.0.0.1','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
||||
INSERT INTO user (host,user) values ('localhost','');
|
||||
INSERT INTO user (host,user) values ('$hostname','');"
|
||||
else
|
||||
i_u="INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
||||
REPLACE INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
||||
INSERT INTO user (host,user) values ('localhost','');"
|
||||
if test "$windows" -eq 0
|
||||
then
|
||||
i_u="$i_u
|
||||
INSERT INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
||||
REPLACE INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
||||
INSERT INTO user (host,user) values ('$hostname','');"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test ! -f $mdata/func.frm
|
||||
then
|
||||
if test x$1 = x"verbose" ; then
|
||||
echo "Preparing func table" 1>&2;
|
||||
fi
|
||||
|
||||
c_f="$c_f CREATE TABLE func ("
|
||||
c_f="$c_f name char(64) binary DEFAULT '' NOT NULL,"
|
||||
c_f="$c_f ret tinyint(1) DEFAULT '0' NOT NULL,"
|
||||
c_f="$c_f dl char(128) DEFAULT '' NOT NULL,"
|
||||
c_f="$c_f type enum ('function','aggregate') NOT NULL,"
|
||||
c_f="$c_f PRIMARY KEY (name)"
|
||||
c_f="$c_f )"
|
||||
c_f="$c_f comment='User defined functions';"
|
||||
fi
|
||||
|
||||
if test ! -f $mdata/tables_priv.frm
|
||||
then
|
||||
if test x$1 = x"verbose" ; then
|
||||
echo "Preparing tables_priv table" 1>&2;
|
||||
fi
|
||||
|
||||
c_t="$c_t CREATE TABLE tables_priv ("
|
||||
c_t="$c_t Host char(60) binary DEFAULT '' NOT NULL,"
|
||||
c_t="$c_t Db char(64) binary DEFAULT '' NOT NULL,"
|
||||
c_t="$c_t User char(16) binary DEFAULT '' NOT NULL,"
|
||||
c_t="$c_t Table_name char(60) binary DEFAULT '' NOT NULL,"
|
||||
c_t="$c_t Grantor char(77) DEFAULT '' NOT NULL,"
|
||||
c_t="$c_t Timestamp timestamp(14),"
|
||||
c_t="$c_t Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') DEFAULT '' NOT NULL,"
|
||||
c_t="$c_t Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
|
||||
c_t="$c_t PRIMARY KEY (Host,Db,User,Table_name),"
|
||||
c_t="$c_t KEY Grantor (Grantor)"
|
||||
c_t="$c_t )"
|
||||
c_t="$c_t comment='Table privileges';"
|
||||
fi
|
||||
|
||||
if test ! -f $mdata/columns_priv.frm
|
||||
then
|
||||
if test x$1 = x"verbose" ; then
|
||||
echo "Preparing columns_priv table" 1>&2;
|
||||
fi
|
||||
|
||||
c_c="$c_c CREATE TABLE columns_priv ("
|
||||
c_c="$c_c Host char(60) binary DEFAULT '' NOT NULL,"
|
||||
c_c="$c_c Db char(64) binary DEFAULT '' NOT NULL,"
|
||||
c_c="$c_c User char(16) binary DEFAULT '' NOT NULL,"
|
||||
c_c="$c_c Table_name char(64) binary DEFAULT '' NOT NULL,"
|
||||
c_c="$c_c Column_name char(64) binary DEFAULT '' NOT NULL,"
|
||||
c_c="$c_c Timestamp timestamp(14),"
|
||||
c_c="$c_c Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
|
||||
c_c="$c_c PRIMARY KEY (Host,Db,User,Table_name,Column_name)"
|
||||
c_c="$c_c )"
|
||||
c_c="$c_c comment='Column privileges';"
|
||||
fi
|
||||
|
||||
if test ! -f $mdata/help_topic.frm
|
||||
then
|
||||
if test x$1 = x"verbose" ; then
|
||||
echo "Preparing help_topic table" 1>&2;
|
||||
fi
|
||||
|
||||
c_ht="$c_ht CREATE TABLE help_topic ("
|
||||
c_ht="$c_ht help_topic_id int unsigned not null,"
|
||||
c_ht="$c_ht name varchar(64) not null,"
|
||||
c_ht="$c_ht help_category_id smallint unsigned not null,"
|
||||
c_ht="$c_ht description text not null,"
|
||||
c_ht="$c_ht example text not null,"
|
||||
c_ht="$c_ht url varchar(128) not null,"
|
||||
c_ht="$c_ht primary key (help_topic_id),"
|
||||
c_ht="$c_ht unique index (name)"
|
||||
c_ht="$c_ht )"
|
||||
c_ht="$c_ht comment='help topics';"
|
||||
fi
|
||||
|
||||
old_categories="yes"
|
||||
|
||||
if test ! -f $mdata/help_category.frm
|
||||
then
|
||||
if test x$1 = x"verbose" ; then
|
||||
echo "Preparing help_category table" 1>&2;
|
||||
fi
|
||||
|
||||
c_hc="$c_hc CREATE TABLE help_category ("
|
||||
c_hc="$c_hc help_category_id smallint unsigned not null,"
|
||||
c_hc="$c_hc name varchar(64) not null,"
|
||||
c_hc="$c_hc parent_category_id smallint unsigned null,"
|
||||
c_hc="$c_hc url varchar(128) not null,"
|
||||
c_hc="$c_hc primary key (help_category_id),"
|
||||
c_hc="$c_hc unique index (name)"
|
||||
c_hc="$c_hc )"
|
||||
c_hc="$c_hc comment='help categories';"
|
||||
fi
|
||||
|
||||
if test ! -f $mdata/help_keyword.frm
|
||||
then
|
||||
if test x$1 = x"verbose" ; then
|
||||
echo "Preparing help_keyword table" 1>&2;
|
||||
fi
|
||||
|
||||
c_hk="$c_hk CREATE TABLE help_keyword ("
|
||||
c_hk="$c_hk help_keyword_id int unsigned not null,"
|
||||
c_hk="$c_hk name varchar(64) not null,"
|
||||
c_hk="$c_hk primary key (help_keyword_id),"
|
||||
c_hk="$c_hk unique index (name)"
|
||||
c_hk="$c_hk )"
|
||||
c_hk="$c_hk comment='help keywords';"
|
||||
fi
|
||||
|
||||
if test ! -f $mdata/help_relation.frm
|
||||
then
|
||||
if test x$1 = x"verbose" ; then
|
||||
echo "Preparing help_relation table" 1>&2;
|
||||
fi
|
||||
|
||||
c_hr="$c_hr CREATE TABLE help_relation ("
|
||||
c_hr="$c_hr help_topic_id int unsigned not null references help_topic,"
|
||||
c_hr="$c_hr help_keyword_id int unsigned not null references help_keyword,"
|
||||
c_hr="$c_hr primary key (help_keyword_id, help_topic_id)"
|
||||
c_hr="$c_hr )"
|
||||
c_hr="$c_hr comment='keyword-topic relation';"
|
||||
fi
|
||||
|
||||
cat << END_OF_DATA
|
||||
use mysql;
|
||||
$c_d
|
||||
$i_d
|
||||
|
||||
$c_h
|
||||
$i_h
|
||||
|
||||
$c_u
|
||||
$i_u
|
||||
|
||||
$c_f
|
||||
$i_f
|
||||
|
||||
$c_t
|
||||
$c_c
|
||||
|
||||
$c_ht
|
||||
$c_hc
|
||||
$c_hr
|
||||
$c_hk
|
||||
END_OF_DATA
|
||||
|
@ -87,7 +87,7 @@ if test -z "$basedir"
|
||||
then
|
||||
basedir=@prefix@
|
||||
bindir=@bindir@
|
||||
execdir=@libexecdir@
|
||||
execdir=@libexecdir@
|
||||
pkgdatadir=@pkgdatadir@
|
||||
else
|
||||
bindir="$basedir/bin"
|
||||
@ -100,24 +100,24 @@ else
|
||||
else
|
||||
execdir="$basedir/bin"
|
||||
fi
|
||||
|
||||
# find fill_help_tables.sh
|
||||
for i in $basedir/support-files $basedir/share $basedir/share/mysql $basedir/scripts @pkgdatadir@
|
||||
do
|
||||
if test -f $i/fill_help_tables.sql
|
||||
then
|
||||
pkgdatadir=$i
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# find fill_help_tables.sh
|
||||
for i in $basedir/support-files $basedir/share $basedir/share/mysql $basedir/scripts `pwd` @pkgdatadir@
|
||||
do
|
||||
if test -f $i/fill_help_tables.sql
|
||||
then
|
||||
pkgdatadir=$i
|
||||
fi
|
||||
done
|
||||
|
||||
if test -f $pkgdatadir/fill_help_tables.sql
|
||||
then
|
||||
fill_help_tables=$pkgdatadir/fill_help_tables.sql
|
||||
else
|
||||
if test $verbose -eq 1
|
||||
then
|
||||
echo "Could not find help file 'fill_help_tables.sql'".
|
||||
echo "Could not find help file 'fill_help_tables.sql' ;$pkgdatadir; ;$basedir;".
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -172,205 +172,21 @@ fi
|
||||
chown $user $ldata $ldata/mysql $ldata/test;
|
||||
fi
|
||||
|
||||
# Initialize variables
|
||||
c_d="" i_d=""
|
||||
c_h="" i_h=""
|
||||
c_u="" i_u=""
|
||||
c_f="" i_f=""
|
||||
c_t="" c_c=""
|
||||
|
||||
# Check for old tables
|
||||
if test ! -f $mdata/db.frm
|
||||
then
|
||||
if test $verbose -eq 1 ; then
|
||||
echo "Preparing db table"
|
||||
fi
|
||||
# mysqld --bootstrap wants one command/line
|
||||
c_d="$c_d CREATE TABLE db ("
|
||||
c_d="$c_d Host char(60) binary DEFAULT '' NOT NULL,"
|
||||
c_d="$c_d Db char(64) binary DEFAULT '' NOT NULL,"
|
||||
c_d="$c_d User char(16) binary DEFAULT '' NOT NULL,"
|
||||
c_d="$c_d Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d PRIMARY KEY Host (Host,Db,User),"
|
||||
c_d="$c_d KEY User (User)"
|
||||
c_d="$c_d )"
|
||||
c_d="$c_d comment='Database privileges';"
|
||||
|
||||
i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');
|
||||
INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');"
|
||||
c_d="yes"
|
||||
fi
|
||||
|
||||
if test ! -f $mdata/host.frm
|
||||
if test $verbose -eq 1
|
||||
then
|
||||
if test $verbose -eq 1 ; then
|
||||
echo "Preparing host table"
|
||||
fi
|
||||
|
||||
c_h="$c_h CREATE TABLE host ("
|
||||
c_h="$c_h Host char(60) binary DEFAULT '' NOT NULL,"
|
||||
c_h="$c_h Db char(64) binary DEFAULT '' NOT NULL,"
|
||||
c_h="$c_h Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h PRIMARY KEY Host (Host,Db)"
|
||||
c_h="$c_h )"
|
||||
c_h="$c_h comment='Host privileges; Merged with database privileges';"
|
||||
create_option="verbose"
|
||||
else
|
||||
create_option="real"
|
||||
fi
|
||||
|
||||
if test ! -f $mdata/user.frm
|
||||
then
|
||||
if test $verbose -eq 1 ; then
|
||||
echo "Preparing user table"
|
||||
fi
|
||||
|
||||
c_u="$c_u CREATE TABLE user ("
|
||||
c_u="$c_u Host char(60) binary DEFAULT '' NOT NULL,"
|
||||
c_u="$c_u User char(16) binary DEFAULT '' NOT NULL,"
|
||||
c_u="$c_u Password char(45) binary DEFAULT '' NOT NULL,"
|
||||
c_u="$c_u Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Process_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u File_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Show_db_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Super_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u ssl_type enum('','ANY','X509', 'SPECIFIED') DEFAULT '' NOT NULL,"
|
||||
c_u="$c_u ssl_cipher BLOB NOT NULL,"
|
||||
c_u="$c_u x509_issuer BLOB NOT NULL,"
|
||||
c_u="$c_u x509_subject BLOB NOT NULL,"
|
||||
c_u="$c_u max_questions int(11) unsigned DEFAULT 0 NOT NULL,"
|
||||
c_u="$c_u max_updates int(11) unsigned DEFAULT 0 NOT NULL,"
|
||||
c_u="$c_u max_connections int(11) unsigned DEFAULT 0 NOT NULL,"
|
||||
c_u="$c_u PRIMARY KEY Host (Host,User)"
|
||||
c_u="$c_u )"
|
||||
c_u="$c_u comment='Users and global privileges';"
|
||||
|
||||
i_u="INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
||||
|
||||
REPLACE INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
||||
|
||||
INSERT INTO user (host,user) values ('localhost','');
|
||||
"
|
||||
|
||||
if test "$windows" -eq 0
|
||||
then
|
||||
i_u="$i_u INSERT INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
||||
|
||||
REPLACE INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
||||
|
||||
INSERT INTO user (host,user) values ('$hostname','');"
|
||||
fi
|
||||
fi
|
||||
|
||||
if test ! -f $mdata/func.frm
|
||||
then
|
||||
if test $verbose -eq 1 ; then
|
||||
echo "Preparing func table"
|
||||
fi
|
||||
|
||||
c_f="$c_f CREATE TABLE func ("
|
||||
c_f="$c_f name char(64) binary DEFAULT '' NOT NULL,"
|
||||
c_f="$c_f ret tinyint(1) DEFAULT '0' NOT NULL,"
|
||||
c_f="$c_f dl char(128) DEFAULT '' NOT NULL,"
|
||||
c_f="$c_f type enum ('function','aggregate') NOT NULL,"
|
||||
c_f="$c_f PRIMARY KEY (name)"
|
||||
c_f="$c_f )"
|
||||
c_f="$c_f comment='User defined functions';"
|
||||
fi
|
||||
|
||||
if test ! -f $mdata/tables_priv.frm
|
||||
then
|
||||
if test $verbose -eq 1 ; then
|
||||
echo "Preparing tables_priv table"
|
||||
fi
|
||||
|
||||
c_t="$c_t CREATE TABLE tables_priv ("
|
||||
c_t="$c_t Host char(60) binary DEFAULT '' NOT NULL,"
|
||||
c_t="$c_t Db char(64) binary DEFAULT '' NOT NULL,"
|
||||
c_t="$c_t User char(16) binary DEFAULT '' NOT NULL,"
|
||||
c_t="$c_t Table_name char(60) binary DEFAULT '' NOT NULL,"
|
||||
c_t="$c_t Grantor char(77) DEFAULT '' NOT NULL,"
|
||||
c_t="$c_t Timestamp timestamp(14),"
|
||||
c_t="$c_t Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') DEFAULT '' NOT NULL,"
|
||||
c_t="$c_t Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
|
||||
c_t="$c_t PRIMARY KEY (Host,Db,User,Table_name),"
|
||||
c_t="$c_t KEY Grantor (Grantor)"
|
||||
c_t="$c_t )"
|
||||
c_t="$c_t comment='Table privileges';"
|
||||
fi
|
||||
|
||||
if test ! -f $mdata/columns_priv.frm
|
||||
then
|
||||
if test $verbose -eq 1 ; then
|
||||
echo "Preparing columns_priv table"
|
||||
fi
|
||||
|
||||
c_c="$c_c CREATE TABLE columns_priv ("
|
||||
c_c="$c_c Host char(60) binary DEFAULT '' NOT NULL,"
|
||||
c_c="$c_c Db char(64) binary DEFAULT '' NOT NULL,"
|
||||
c_c="$c_c User char(16) binary DEFAULT '' NOT NULL,"
|
||||
c_c="$c_c Table_name char(64) binary DEFAULT '' NOT NULL,"
|
||||
c_c="$c_c Column_name char(64) binary DEFAULT '' NOT NULL,"
|
||||
c_c="$c_c Timestamp timestamp(14),"
|
||||
c_c="$c_c Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
|
||||
c_c="$c_c PRIMARY KEY (Host,Db,User,Table_name,Column_name)"
|
||||
c_c="$c_c )"
|
||||
c_c="$c_c comment='Column privileges';"
|
||||
fi
|
||||
|
||||
echo "Installing privilege tables"
|
||||
echo "Installing all prepared tables"
|
||||
if (
|
||||
cat << END_OF_DATA
|
||||
use mysql;
|
||||
$c_d
|
||||
$i_d
|
||||
|
||||
$c_h
|
||||
$i_h
|
||||
|
||||
$c_u
|
||||
$i_u
|
||||
|
||||
$c_f
|
||||
$i_f
|
||||
|
||||
$c_t
|
||||
$c_c
|
||||
END_OF_DATA
|
||||
mysql_create_system_tables $create_option $mdata $hostname $windows
|
||||
if test -n "$fill_help_tables"
|
||||
then
|
||||
cat $fill_help_tables
|
||||
|
Reference in New Issue
Block a user