# # Destructive stored procedure tests # # We do horrible things to the mysql.proc table here, so any unexpected # failures here might leave it in an undetermined state. # # In the case of trouble you might want to skip this. # # Backup proc table --copy_file $MYSQLTEST_VARDIR/master-data/mysql/proc.frm $MYSQLTEST_VARDIR/tmp/proc.frm --copy_file $MYSQLTEST_VARDIR/master-data/mysql/proc.MYD $MYSQLTEST_VARDIR/tmp/proc.MYD --copy_file $MYSQLTEST_VARDIR/master-data/mysql/proc.MYI $MYSQLTEST_VARDIR/tmp/proc.MYI use test; --disable_warnings drop procedure if exists bug14233; drop function if exists bug14233; drop table if exists t1; drop view if exists v1; --enable_warnings create procedure bug14233() set @x = 42; create function bug14233_f() returns int return 42; create table t1 (id int); create trigger t1_ai after insert on t1 for each row call bug14233(); # Unsupported tampering with the mysql.proc definition alter table mysql.proc drop type; --error ER_SP_PROC_TABLE_CORRUPT call bug14233(); --error ER_SP_PROC_TABLE_CORRUPT create view v1 as select bug14233_f(); --error ER_SP_PROC_TABLE_CORRUPT insert into t1 values (0); flush table mysql.proc; # Thrashing the .frm file --write_file $MYSQLTEST_VARDIR/master-data/mysql/proc.frm saljdfa EOF --replace_result $MYSQLTEST_VARDIR . master-data// '' '\\' '/' --error ER_NOT_FORM_FILE call bug14233(); --replace_result $MYSQLTEST_VARDIR . master-data// '' '\\' '/' --error ER_NOT_FORM_FILE create view v1 as select bug14233_f(); --replace_result $MYSQLTEST_VARDIR . master-data// '' '\\' '/' --error ER_NOT_FORM_FILE insert into t1 values (0); flush table mysql.proc; # Drop the mysql.proc table --remove_file $MYSQLTEST_VARDIR/master-data/mysql/proc.frm --remove_file $MYSQLTEST_VARDIR/master-data/mysql/proc.MYD --remove_file $MYSQLTEST_VARDIR/master-data/mysql/proc.MYI --error ER_NO_SUCH_TABLE call bug14233(); --error ER_NO_SUCH_TABLE create view v1 as select bug14233_f(); --error ER_NO_SUCH_TABLE insert into t1 values (0); # Restore mysql.proc --copy_file $MYSQLTEST_VARDIR/tmp/proc.frm $MYSQLTEST_VARDIR/master-data/mysql/proc.frm --copy_file $MYSQLTEST_VARDIR/tmp/proc.MYD $MYSQLTEST_VARDIR/master-data/mysql/proc.MYD --copy_file $MYSQLTEST_VARDIR/tmp/proc.MYI $MYSQLTEST_VARDIR/master-data/mysql/proc.MYI --remove_file $MYSQLTEST_VARDIR/tmp/proc.frm --remove_file $MYSQLTEST_VARDIR/tmp/proc.MYD --remove_file $MYSQLTEST_VARDIR/tmp/proc.MYI flush table mysql.proc; flush privileges; delete from mysql.proc where name like 'bug14233%'; # Unsupported editing of mysql.proc, circumventing checks in "create ..." insert into mysql.proc ( db, name, type, specific_name, language, sql_data_access, is_deterministic, security_type, param_list, returns, body, definer, created, modified, sql_mode, comment ) values ( 'test', 'bug14233_1', 'FUNCTION', 'bug14233_1', 'SQL', 'READS_SQL_DATA', 'NO', 'DEFINER', '', 'int(10)', 'select count(*) from mysql.user', 'root@localhost', NOW() , '0000-00-00 00:00:00', '', '' ), ( 'test', 'bug14233_2', 'FUNCTION', 'bug14233_2', 'SQL', 'READS_SQL_DATA', 'NO', 'DEFINER', '', 'int(10)', 'begin declare x int; select count(*) into x from mysql.user; end', 'root@localhost', NOW() , '0000-00-00 00:00:00', '', '' ), ( 'test', 'bug14233_3', 'PROCEDURE', 'bug14233_3', 'SQL', 'READS_SQL_DATA','NO', 'DEFINER', '', '', 'alksj wpsj sa ^#!@ ', 'root@localhost', NOW() , '0000-00-00 00:00:00', '', '' ); --error ER_SP_PROC_TABLE_CORRUPT select bug14233_1(); --error ER_SP_PROC_TABLE_CORRUPT create view v1 as select bug14233_1(); --error ER_SP_PROC_TABLE_CORRUPT select bug14233_2(); --error ER_SP_PROC_TABLE_CORRUPT create view v1 as select bug14233_2(); --error ER_SP_PROC_TABLE_CORRUPT call bug14233_3(); drop trigger t1_ai; create trigger t1_ai after insert on t1 for each row call bug14233_3(); --error ER_SP_PROC_TABLE_CORRUPT insert into t1 values (0); # Clean-up drop trigger t1_ai; drop table t1; # # BUG#16303: erroneus stored procedures and functions should be droppable # drop function bug14233_1; drop function bug14233_2; drop procedure bug14233_3; # Assert: These should show nothing. show procedure status; show function status;