mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Fixed BUG#5000: SPs can be created with no default database.
Easy to prevent crash, but the question was how to treat this case? We ended up implementing the "global" SPs (i.e. with no associated db), which were planned but left unresolved when SPs moved into dbs. So now things like "call .p()" work too. mysql-test/r/sp-error.result: New test case for BUG#5000, and "global" SPs in general. mysql-test/t/sp-error.test: New test case for BUG#5000, and "global" SPs in general. sql/sp.cc: Prevent crash when the new db is null. sql/sp_head.cc: Don't set the db part of the name to thd->db, we have already set it correctly in the provided name struct. Also, don't attempt to change "no-db" when executing an SP. sql/sql_yacc.yy: Added support for the "global SP" syntax, e.g ".p()".
This commit is contained in:
@ -1,4 +1,27 @@
|
||||
delete from mysql.proc;
|
||||
create function .f1() returns int return 1;
|
||||
create procedure .p1() select 1, database();
|
||||
create procedure p1() select 2, database();
|
||||
alter procedure .p1 sql security invoker;
|
||||
select .f1();
|
||||
.f1()
|
||||
1
|
||||
call .p1();
|
||||
1 database()
|
||||
1 test
|
||||
call p1();
|
||||
2 database()
|
||||
2 test
|
||||
select f1();
|
||||
ERROR 42000: FUNCTION test.f1 does not exist
|
||||
select db,name,type,security_type from mysql.proc;
|
||||
db name type security_type
|
||||
f1 FUNCTION DEFINER
|
||||
p1 PROCEDURE INVOKER
|
||||
test p1 PROCEDURE DEFINER
|
||||
drop function .f1;
|
||||
drop procedure .p1;
|
||||
drop procedure p1;
|
||||
create procedure syntaxerror(t int)|
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
|
||||
create procedure syntaxerror(t int)|
|
||||
|
Reference in New Issue
Block a user