mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/home/dlenev/src/mysql-5.0-bg9566
This commit is contained in:
@ -2779,4 +2779,14 @@ a
|
||||
3.2000
|
||||
drop procedure bug8937|
|
||||
delete from t1|
|
||||
drop procedure if exists bug9566|
|
||||
create procedure bug9566()
|
||||
begin
|
||||
select * from t1;
|
||||
end|
|
||||
lock table t1 read|
|
||||
call bug9566()|
|
||||
ERROR HY000: Table 'proc' was not locked with LOCK TABLES
|
||||
unlock tables|
|
||||
drop procedure bug9566|
|
||||
drop table t1,t2;
|
||||
|
@ -3397,6 +3397,29 @@ call bug8937()|
|
||||
drop procedure bug8937|
|
||||
delete from t1|
|
||||
|
||||
#
|
||||
# BUG#9566: explicit LOCK TABLE and store procedures result in illegal state
|
||||
#
|
||||
# We should not think that mysql.proc table does not exist if we are unable
|
||||
# to open it under LOCK TABLE or in prelocked mode. Probably this test
|
||||
# should be removed when Monty will allow access to mysql.proc without
|
||||
# locking it.
|
||||
#
|
||||
--disable_warnings
|
||||
drop procedure if exists bug9566|
|
||||
--enable_warnings
|
||||
create procedure bug9566()
|
||||
begin
|
||||
select * from t1;
|
||||
end|
|
||||
lock table t1 read|
|
||||
# This should fail because we forgot to lock mysql.proc table explicitly
|
||||
--error 1100
|
||||
call bug9566()|
|
||||
unlock tables|
|
||||
# This should succeed
|
||||
drop procedure bug9566|
|
||||
|
||||
|
||||
#
|
||||
# BUG#NNNN: New bug synopsis
|
||||
|
13
sql/sp.cc
13
sql/sp.cc
@ -70,9 +70,8 @@ db_find_routine_aux(THD *thd, int type, sp_name *name,
|
||||
type, name->m_name.length, name->m_name.str));
|
||||
|
||||
/*
|
||||
Speed up things if mysql.proc doesn't exists
|
||||
mysql_proc_table_exists is set when on creates a stored procedure
|
||||
or on flush privileges
|
||||
Speed up things if mysql.proc doesn't exists. mysql_proc_table_exists
|
||||
is set when we create or read stored procedure or on flush privileges.
|
||||
*/
|
||||
if (!mysql_proc_table_exists && ltype == TL_READ)
|
||||
DBUG_RETURN(SP_OPEN_TABLE_FAILED);
|
||||
@ -98,7 +97,13 @@ db_find_routine_aux(THD *thd, int type, sp_name *name,
|
||||
if (! (table= open_ltable(thd, &tables, ltype)))
|
||||
{
|
||||
*tablep= NULL;
|
||||
mysql_proc_table_exists= 0;
|
||||
/*
|
||||
Under explicit LOCK TABLES or in prelocked mode we should not
|
||||
say that mysql.proc table does not exist if we are unable to
|
||||
open it since this condition may be transient.
|
||||
*/
|
||||
if (!(thd->locked_tables || thd->prelocked_mode))
|
||||
mysql_proc_table_exists= 0;
|
||||
DBUG_RETURN(SP_OPEN_TABLE_FAILED);
|
||||
}
|
||||
*opened= TRUE;
|
||||
|
Reference in New Issue
Block a user