Fixed BUG#5307: Stored procedure allows statement after BEGIN ... END.
mysql-test/r/sp.result: New test case for BUG#5307 mysql-test/t/sp.test: New test case for BUG#5307 sql/sp_head.cc: Use the correct end-of-query pointer when extracting the body in the case of a create procedure compound with another statement.
This commit is contained in:
parent
339859d261
commit
2c3f49a64d
@ -1776,6 +1776,14 @@ end loop;
|
||||
end|
|
||||
call bug5287(1)|
|
||||
drop procedure bug5287|
|
||||
create procedure bug5307()
|
||||
begin
|
||||
end; set @x = 3|
|
||||
call bug5307()|
|
||||
select @x|
|
||||
@x
|
||||
3
|
||||
drop procedure bug5307|
|
||||
drop table if exists fac|
|
||||
create table fac (n int unsigned not null primary key, f bigint unsigned)|
|
||||
create procedure ifac(n int unsigned)
|
||||
|
@ -1942,6 +1942,18 @@ call bug5287(1)|
|
||||
drop procedure bug5287|
|
||||
|
||||
|
||||
#
|
||||
# BUG#5307: Stored procedure allows statement after BEGIN ... END
|
||||
#
|
||||
create procedure bug5307()
|
||||
begin
|
||||
end; set @x = 3|
|
||||
|
||||
call bug5307()|
|
||||
select @x|
|
||||
drop procedure bug5307|
|
||||
|
||||
|
||||
#
|
||||
# Some "real" examples
|
||||
#
|
||||
|
@ -288,6 +288,7 @@ void
|
||||
sp_head::init_strings(THD *thd, LEX *lex, sp_name *name)
|
||||
{
|
||||
DBUG_ENTER("sp_head::init_strings");
|
||||
uint n; /* Counter for nul trimming */
|
||||
/* During parsing, we must use thd->mem_root */
|
||||
MEM_ROOT *root= &thd->mem_root;
|
||||
|
||||
@ -351,9 +352,17 @@ sp_head::init_strings(THD *thd, LEX *lex, sp_name *name)
|
||||
(char *)m_returns_begin, m_retstr.length);
|
||||
}
|
||||
}
|
||||
m_body.length= lex->end_of_query - m_body_begin;
|
||||
m_body.length= lex->ptr - m_body_begin;
|
||||
/* Trim nuls at the end */
|
||||
n= 0;
|
||||
while (m_body.length && m_body_begin[m_body.length-1] == '\0')
|
||||
{
|
||||
m_body.length-= 1;
|
||||
n+= 1;
|
||||
}
|
||||
m_body.str= strmake_root(root, (char *)m_body_begin, m_body.length);
|
||||
m_defstr.length= lex->end_of_query - lex->buf;
|
||||
m_defstr.length= lex->ptr - lex->buf;
|
||||
m_defstr.length-= n;
|
||||
m_defstr.str= strmake_root(root, (char *)lex->buf, m_defstr.length);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user