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
|
3.2000
|
||||||
drop procedure bug8937|
|
drop procedure bug8937|
|
||||||
delete from t1|
|
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;
|
drop table t1,t2;
|
||||||
|
@ -3397,6 +3397,29 @@ call bug8937()|
|
|||||||
drop procedure bug8937|
|
drop procedure bug8937|
|
||||||
delete from t1|
|
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
|
# 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));
|
type, name->m_name.length, name->m_name.str));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Speed up things if mysql.proc doesn't exists
|
Speed up things if mysql.proc doesn't exists. mysql_proc_table_exists
|
||||||
mysql_proc_table_exists is set when on creates a stored procedure
|
is set when we create or read stored procedure or on flush privileges.
|
||||||
or on flush privileges
|
|
||||||
*/
|
*/
|
||||||
if (!mysql_proc_table_exists && ltype == TL_READ)
|
if (!mysql_proc_table_exists && ltype == TL_READ)
|
||||||
DBUG_RETURN(SP_OPEN_TABLE_FAILED);
|
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)))
|
if (! (table= open_ltable(thd, &tables, ltype)))
|
||||||
{
|
{
|
||||||
*tablep= NULL;
|
*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);
|
DBUG_RETURN(SP_OPEN_TABLE_FAILED);
|
||||||
}
|
}
|
||||||
*opened= TRUE;
|
*opened= TRUE;
|
||||||
|
Reference in New Issue
Block a user