2004-04-21 21:55:39 +02:00
|
|
|
select * from mysql.user as t1, mysql.user as t2, mysql.user as t3;
|
A fix and a test case for Bug#17843 "Certain stored procedures fail to
run at startup"
The server returned an error when trying to execute init-file with a
stored procedure that could return multiple result sets to the client.
A stored procedure can return multiple result sets if it contains
PREPARE, SELECT, SHOW and similar statements.
The fix is to set client_capabilites|=CLIENT_MULTI_RESULTS in
sql_parse.cc:handle_bootstrap(). There is no "client" really, so
nothing is ever sent. This makes init-file feature behave consistently:
the prepared statements that can be called directly in the init-file
can be used in a stored procedure too.
Re-committed the patch originally submitted by Per-Erik after review.
mysql-test/Makefile.am:
Fix re-make without make clean.
mysql-test/r/init_connect.result:
Updated results (a test case for Bug#17843)
mysql-test/r/init_file.result:
Updated results (a test case for Bug#17843)
mysql-test/std_data/init_file.dat:
Add test coverage for new features added in 5.0. Note, that what can
be done in init_file is very limited as it does not support any other
delimiter except ';' -- only "one liners" and no multiple statement
procedures. Also, this is executed with a dummy user "boot@", which
calls for the use of DEFINER clause.
mysql-test/t/init_connect.test:
Add test coverage for new features added in 5.0.
mysql-test/t/init_file.test:
Add test coverage for new features added in 5.0 --
stored routines, views, triggers. The actual tests are in
std_data/init_file.dat, here we just check the results and clean up.
sql/sql_class.cc:
Initialize Security_context::priv_host to an empty string:
when executing an init-file, sql_parse.cc:get_default_definer()
will use this for the value of the definer if it's not set in the query.
sql/sql_parse.cc:
Set CLIENT_MULTI_RESULTS in handle_bootstrap(), to make prepared
statements work in stored procedures called from init-file.
2006-07-04 21:46:15 +02:00
|
|
|
use test;
|
|
|
|
|
|
|
|
drop table if exists t1;
|
|
|
|
create table t1 (x int);
|
|
|
|
drop table if exists t2;
|
|
|
|
create table t2 (y int);
|
|
|
|
|
|
|
|
drop procedure if exists p1;
|
|
|
|
create definer=root@localhost procedure p1() select * from t1;
|
|
|
|
call p1();
|
|
|
|
drop procedure p1;
|
|
|
|
|
|
|
|
create definer=root@localhost procedure p1() insert into t1 values (3),(5),(7);
|
|
|
|
call p1();
|
|
|
|
|
|
|
|
drop function if exists f1;
|
|
|
|
create definer=root@localhost function f1() returns int return (select count(*) from t1);
|
|
|
|
insert into t2 set y = f1()*10;
|
|
|
|
|
|
|
|
drop view if exists v1;
|
|
|
|
create definer=root@localhost view v1 as select f1();
|
|
|
|
insert into t2 (y) select * from v1;
|
|
|
|
|
|
|
|
create trigger trg1 after insert on t2 for each row insert into t1 values (new.y);
|
|
|
|
insert into t2 values (11), (13);
|
|
|
|
drop procedure p1;
|
|
|
|
drop function f1;
|
|
|
|
drop view v1;
|
2007-02-19 14:57:54 +01:00
|
|
|
|
|
|
|
#
|
|
|
|
# Bug#23240 --init-file statements with NOW() reports '1970-01-01 11:00:00'as the date time
|
|
|
|
#
|
|
|
|
CREATE DATABASE IF NOT EXISTS init_file;
|
|
|
|
CREATE TABLE IF NOT EXISTS init_file.startup ( startdate DATETIME );
|
|
|
|
INSERT INTO init_file.startup VALUES ( NOW() );
|
|
|
|
|
2009-07-24 18:20:46 +02:00
|
|
|
#
|
|
|
|
# Bug#43587 "Putting event_scheduler=1 in init SQL file crashes mysqld"
|
|
|
|
#
|
2007-02-19 14:57:54 +01:00
|
|
|
|
2009-07-24 20:45:42 +02:00
|
|
|
SET GLOBAL event_scheduler = 'ON';
|
|
|
|
CREATE EVENT ev1 ON SCHEDULE EVERY 1 DAY DISABLE DO SELECT 1;
|
|
|
|
DROP EVENT ev1;
|
|
|
|
SET GLOBAL event_scheduler = 'OFF';
|