mirror of
https://github.com/MariaDB/server.git
synced 2025-07-14 13:41:20 +03:00
Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/home/dlenev/src/mysql-5.0-sp
This commit is contained in:
@ -307,8 +307,6 @@ db_find_routine(THD *thd, int type, sp_name *name, sp_head **sphp)
|
|||||||
goto done;
|
goto done;
|
||||||
if (sp)
|
if (sp)
|
||||||
{
|
{
|
||||||
if (oldlex != newlex)
|
|
||||||
sp->restore_lex(thd);
|
|
||||||
delete sp;
|
delete sp;
|
||||||
newlex->sphead= NULL;
|
newlex->sphead= NULL;
|
||||||
}
|
}
|
||||||
|
@ -459,11 +459,22 @@ sp_head::destroy()
|
|||||||
delete_dynamic(&m_instr);
|
delete_dynamic(&m_instr);
|
||||||
m_pcont->destroy();
|
m_pcont->destroy();
|
||||||
free_items(free_list);
|
free_items(free_list);
|
||||||
|
|
||||||
|
/*
|
||||||
|
If we have non-empty LEX stack then we just came out of parser with
|
||||||
|
error. Now we should delete all auxilary LEXes and restore original
|
||||||
|
THD::lex (In this case sp_head::restore_thd_mem_root() was not called
|
||||||
|
too, so m_thd points to the current thread context).
|
||||||
|
It is safe to not update LEX::ptr because further query string parsing
|
||||||
|
and execution will be stopped anyway.
|
||||||
|
*/
|
||||||
|
DBUG_ASSERT(m_lex.is_empty() || m_thd);
|
||||||
while ((lex= (LEX *)m_lex.pop()))
|
while ((lex= (LEX *)m_lex.pop()))
|
||||||
{
|
{
|
||||||
if (lex != &m_thd->main_lex) // We got interrupted and have lex'es left
|
delete m_thd->lex;
|
||||||
delete lex;
|
m_thd->lex= lex;
|
||||||
}
|
}
|
||||||
|
|
||||||
hash_free(&m_sptabs);
|
hash_free(&m_sptabs);
|
||||||
hash_free(&m_spfuns);
|
hash_free(&m_spfuns);
|
||||||
hash_free(&m_spprocs);
|
hash_free(&m_spprocs);
|
||||||
|
@ -5115,8 +5115,6 @@ void mysql_parse(THD *thd, char *inBuf, uint length)
|
|||||||
{
|
{
|
||||||
if (thd->lex->sphead)
|
if (thd->lex->sphead)
|
||||||
{
|
{
|
||||||
if (lex != thd->lex)
|
|
||||||
thd->lex->sphead->restore_lex(thd);
|
|
||||||
delete thd->lex->sphead;
|
delete thd->lex->sphead;
|
||||||
thd->lex->sphead= NULL;
|
thd->lex->sphead= NULL;
|
||||||
}
|
}
|
||||||
@ -5152,8 +5150,6 @@ void mysql_parse(THD *thd, char *inBuf, uint length)
|
|||||||
if (thd->lex->sphead)
|
if (thd->lex->sphead)
|
||||||
{
|
{
|
||||||
/* Clean up after failed stored procedure/function */
|
/* Clean up after failed stored procedure/function */
|
||||||
if (lex != thd->lex)
|
|
||||||
thd->lex->sphead->restore_lex(thd);
|
|
||||||
delete thd->lex->sphead;
|
delete thd->lex->sphead;
|
||||||
thd->lex->sphead= NULL;
|
thd->lex->sphead= NULL;
|
||||||
}
|
}
|
||||||
|
@ -1771,8 +1771,6 @@ bool mysql_stmt_prepare(THD *thd, char *packet, uint packet_length,
|
|||||||
my_pthread_setprio(pthread_self(),WAIT_PRIOR);
|
my_pthread_setprio(pthread_self(),WAIT_PRIOR);
|
||||||
if (error && thd->lex->sphead)
|
if (error && thd->lex->sphead)
|
||||||
{
|
{
|
||||||
if (lex != thd->lex)
|
|
||||||
thd->lex->sphead->restore_lex(thd);
|
|
||||||
delete thd->lex->sphead;
|
delete thd->lex->sphead;
|
||||||
thd->lex->sphead= NULL;
|
thd->lex->sphead= NULL;
|
||||||
}
|
}
|
||||||
|
@ -415,9 +415,8 @@ bool Table_triggers_list::check_n_load(THD *thd, const char *db,
|
|||||||
*/
|
*/
|
||||||
if (lex.sphead)
|
if (lex.sphead)
|
||||||
{
|
{
|
||||||
if (&lex != thd->lex)
|
|
||||||
thd->lex->sphead->restore_lex(thd);
|
|
||||||
delete lex.sphead;
|
delete lex.sphead;
|
||||||
|
lex.sphead= 0;
|
||||||
}
|
}
|
||||||
goto err_with_lex_cleanup;
|
goto err_with_lex_cleanup;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user