mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 13:32:33 +01:00
0521fb5444
Expanded the mysql.proc table, reworked the find/create/drop functions completely, added new functions for FUNCTIONs (lotta functions here :), got rid of some unnecessary use of Item_strings while at it. Extended the parser correspondingly, and fiddled around a bit to make SP FUNCTIONs coexist with UDFs. Can now CREATE and DROP FUNCTIONs. Invoking yet to come... Docs/sp-implemented.txt: Updated with info about CASCADE/RESTICT and METHOD, and some answers to questions. include/mysqld_error.h: New error message for misuse of RETURN. mysql-test/install_test_db.sh: Added enum field to mysql.proc to distinguish between FUNCTION and PROCEDURE. mysql-test/r/sp.result: New test for creating and dropping FUNCTIONS. mysql-test/t/sp.test: New test for creating and dropping FUNCTIONS. scripts/mysql_install_db.sh: Added enum field to mysql.proc to distinguish between FUNCTION and PROCEDURE. sql/lex.h: De-UDFed some symbol names, as they are now used for SPs as well. Added RETURN_SYM. sql/share/czech/errmsg.txt: New error message for misuse of RETURN. sql/share/danish/errmsg.txt: New error message for misuse of RETURN. sql/share/dutch/errmsg.txt: New error message for misuse of RETURN. sql/share/english/errmsg.txt: New error message for misuse of RETURN. sql/share/estonian/errmsg.txt: New error message for misuse of RETURN. sql/share/french/errmsg.txt: New error message for misuse of RETURN. sql/share/german/errmsg.txt: New error message for misuse of RETURN. sql/share/greek/errmsg.txt: New error message for misuse of RETURN. sql/share/hungarian/errmsg.txt: New error message for misuse of RETURN. sql/share/italian/errmsg.txt: New error message for misuse of RETURN. sql/share/japanese/errmsg.txt: New error message for misuse of RETURN. sql/share/korean/errmsg.txt: New error message for misuse of RETURN. sql/share/norwegian-ny/errmsg.txt: New error message for misuse of RETURN. sql/share/norwegian/errmsg.txt: New error message for misuse of RETURN. sql/share/polish/errmsg.txt: New error message for misuse of RETURN. sql/share/portuguese/errmsg.txt: New error message for misuse of RETURN. sql/share/romanian/errmsg.txt: New error message for misuse of RETURN. sql/share/russian/errmsg.txt: New error message for misuse of RETURN. sql/share/serbian/errmsg.txt: New error message for misuse of RETURN. sql/share/slovak/errmsg.txt: New error message for misuse of RETURN. sql/share/spanish/errmsg.txt: New error message for misuse of RETURN. sql/share/swedish/errmsg.txt: New error message for misuse of RETURN. sql/share/ukrainian/errmsg.txt: New error message for misuse of RETURN. sql/sp.cc: Major rehack to accomodate FUNCTIONs, and to make it easier to add future in-memory cache of prepared SPs. sql/sp.h: Major rehack to accomodate FUNCTIONs, and to make it easier to add future in-memory cache of prepared SPs. sql/sp_head.cc: Now creates FUNCTIONs too. (And got rid of some unnecessary Item_string use.) sql/sp_head.h: Now creates FUNCTIONs too. (And got rid of some unnecessary Item_string use.) sql/sql_lex.h: New stored FUNCTION commands. sql/sql_parse.cc: Added FUNCTION support ("drop" merged with the old UDF code), and made some additional changes for better error handling (following the sp.cc rehacking). sql/sql_yacc.yy: Some former UDF specific symbols renamed. Added CREATE FUNCTION parsing. DROP FUNCTION had to be partly merged with the old UDF code, because of the similar syntax. RETURN statement added, but still a no-op.
294 lines
10 KiB
Bash
294 lines
10 KiB
Bash
#!/bin/sh
|
|
# Copyright (C) 1997-2002 MySQL AB
|
|
# For a more info consult the file COPYRIGHT distributed with this file
|
|
|
|
# This scripts creates the privilege tables db, host, user, tables_priv,
|
|
# columns_priv in the mysql database, as well as the func table.
|
|
|
|
if [ x$1 = x"-bin" ]; then
|
|
shift 1
|
|
execdir=../bin
|
|
bindir=../bin
|
|
BINARY_DIST=1
|
|
fix_bin=mysql-test
|
|
else
|
|
execdir=../sql
|
|
bindir=../client
|
|
fix_bin=.
|
|
fi
|
|
|
|
vardir=var
|
|
logdir=$vardir/log
|
|
if [ x$1 = x"-slave" ]
|
|
then
|
|
shift 1
|
|
data=var/slave-data
|
|
ldata=$fix_bin/var/slave-data
|
|
else
|
|
data=var/master-data
|
|
ldata=$fix_bin/var/master-data
|
|
fi
|
|
|
|
mdata=$data/mysql
|
|
EXTRA_ARG=""
|
|
|
|
if test ! -x $execdir/mysqld
|
|
then
|
|
echo "mysqld is missing - looked in $execdir"
|
|
exit 1
|
|
fi
|
|
|
|
# On IRIX hostname is in /usr/bsd so add this to the path
|
|
PATH=$PATH:/usr/bsd
|
|
hostname=`hostname` # Install this too in the user table
|
|
hostname="$hostname%" # Fix if not fully qualified hostname
|
|
|
|
|
|
#create the directories
|
|
[ -d $vardir ] || mkdir $vardir
|
|
[ -d $logdir ] || mkdir $logdir
|
|
|
|
# Create database directories mysql & test
|
|
if [ -d $data ] ; then rm -rf $data ; fi
|
|
mkdir $data $data/mysql $data/test
|
|
|
|
#for error messages
|
|
if [ x$BINARY_DIST = x1 ] ; then
|
|
basedir=..
|
|
else
|
|
basedir=.
|
|
EXTRA_ARG="--language=../sql/share/english/"
|
|
fi
|
|
|
|
# Initialize variables
|
|
c_d="" i_d=""
|
|
c_h="" i_h=""
|
|
c_u="" i_u=""
|
|
c_f="" i_f=""
|
|
c_t="" c_c=""
|
|
c_hl="" c_hl=""
|
|
c_hc="" c_hc=""
|
|
c_clr="" c_clr=""
|
|
c_p=""
|
|
|
|
# Check for old tables
|
|
if test ! -f $mdata/db.frm
|
|
then
|
|
# mysqld --bootstrap wants one command/line
|
|
c_d="$c_d CREATE TABLE db ("
|
|
c_d="$c_d Host char(60) DEFAULT '' NOT NULL,"
|
|
c_d="$c_d Db char(64) DEFAULT '' NOT NULL,"
|
|
c_d="$c_d User char(16) 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
|
|
c_h="$c_h CREATE TABLE host ("
|
|
c_h="$c_h Host char(60) DEFAULT '' NOT NULL,"
|
|
c_h="$c_h Db char(64) 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
|
|
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);
|
|
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','');"
|
|
fi
|
|
|
|
if test ! -f $mdata/func.frm
|
|
then
|
|
c_f="$c_f CREATE TABLE func ("
|
|
c_f="$c_f name char(64) 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
|
|
c_t="$c_t CREATE TABLE tables_priv ("
|
|
c_t="$c_t Host char(60) DEFAULT '' NOT NULL,"
|
|
c_t="$c_t Db char(64) DEFAULT '' NOT NULL,"
|
|
c_t="$c_t User char(16) DEFAULT '' NOT NULL,"
|
|
c_t="$c_t Table_name char(60) 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
|
|
c_c="$c_c CREATE TABLE columns_priv ("
|
|
c_c="$c_c Host char(60) DEFAULT '' NOT NULL,"
|
|
c_c="$c_c Db char(64) DEFAULT '' NOT NULL,"
|
|
c_c="$c_c User char(16) DEFAULT '' NOT NULL,"
|
|
c_c="$c_c Table_name char(64) DEFAULT '' NOT NULL,"
|
|
c_c="$c_c Column_name char(64) 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
|
|
c_hl="$c_hl CREATE TABLE help_topic ("
|
|
c_hl="$c_hl help_topic_id int unsigned not null auto_increment,"
|
|
c_hl="$c_hl name varchar(64) not null,"
|
|
c_hl="$c_hl description text not null,"
|
|
c_hl="$c_hl example text not null,"
|
|
c_hl="$c_hl url varchar(128) not null,"
|
|
c_hl="$c_hl primary key (help_topic_id),"
|
|
c_hl="$c_hl unique index (name)"
|
|
c_hl="$c_hl )"
|
|
c_hl="$c_hl comment='help topics';"
|
|
fi
|
|
|
|
if test ! -f $mdata/help_category.frm
|
|
then
|
|
c_clr="$c_clr CREATE TABLE help_category ("
|
|
c_clr="$c_clr help_category_id smallint unsigned not null auto_increment,"
|
|
c_clr="$c_clr name varchar(64) not null,"
|
|
c_clr="$c_clr url varchar(128) not null,"
|
|
c_clr="$c_clr primary key (help_category_id),"
|
|
c_clr="$c_clr unique index (name)"
|
|
c_clr="$c_clr )"
|
|
c_clr="$c_clr comment='help topics-categories relation';"
|
|
fi
|
|
|
|
if test ! -f $mdata/help_relation.frm
|
|
then
|
|
c_hc="$c_hc CREATE TABLE help_relation ("
|
|
c_hc="$c_hc help_topic_id int unsigned not null references help_topic,"
|
|
c_hc="$c_hc help_category_id smallint unsigned not null references help_category,"
|
|
c_hc="$c_hc primary key (help_category_id, help_topic_id),"
|
|
c_hc="$c_hc )"
|
|
c_hc="$c_hc comment='categories of help topics';"
|
|
fi
|
|
|
|
if test ! -f $mdata/proc.frm
|
|
then
|
|
c_p="$c_p CREATE TABLE proc ("
|
|
c_p="$c_p name char(64) binary DEFAULT '' NOT NULL,"
|
|
c_p="$c_p type enum('function','procedure') NOT NULL,"
|
|
c_p="$c_p body blob DEFAULT '' NOT NULL,"
|
|
c_p="$c_p PRIMARY KEY (name,type)"
|
|
c_p="$c_p )"
|
|
c_p="$c_p comment='Stored Procedures';"
|
|
fi
|
|
|
|
mysqld_boot=" $execdir/mysqld --no-defaults --bootstrap --skip-grant-tables \
|
|
--basedir=$basedir --datadir=$ldata --skip-innodb --skip-bdb $EXTRA_ARG"
|
|
echo "running $mysqld_boot"
|
|
|
|
if $mysqld_boot << 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_hl
|
|
$c_hc
|
|
$c_clr
|
|
|
|
$c_p
|
|
|
|
END_OF_DATA
|
|
then
|
|
exit 0
|
|
else
|
|
echo "Error executing mysqld --bootstrap"
|
|
exit 1
|
|
fi
|