mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
Fix BUG#2269: Lost connect if stored procedure called before USE
(And some minor correction of cursor open)
This commit is contained in:
@@ -286,6 +286,7 @@ sp_head::execute(THD *thd)
|
||||
|
||||
if (ctx)
|
||||
ctx->clear_handler();
|
||||
thd->query_error= 0;
|
||||
do
|
||||
{
|
||||
sp_instr *i;
|
||||
@@ -318,10 +319,11 @@ sp_head::execute(THD *thd)
|
||||
continue;
|
||||
}
|
||||
}
|
||||
} while (ret == 0 && !thd->killed);
|
||||
} while (ret == 0 && !thd->killed && !thd->query_error);
|
||||
|
||||
DBUG_PRINT("info", ("ret=%d killed=%d", ret, thd->killed));
|
||||
if (thd->killed)
|
||||
DBUG_PRINT("info", ("ret=%d killed=%d query_error=%d",
|
||||
ret, thd->killed, thd->query_error));
|
||||
if (thd->killed || thd->query_error)
|
||||
ret= -1;
|
||||
/* If the DB has changed, the pointer has changed too, but the
|
||||
original thd->db will then have been freed */
|
||||
@@ -1032,7 +1034,7 @@ sp_instr_copen::execute(THD *thd, uint *nextp)
|
||||
res= -1;
|
||||
else
|
||||
res= exec_stmt(thd, lex);
|
||||
c->post_open(thd, (res == 0 ? TRUE : FALSE));
|
||||
c->post_open(thd, (lex ? TRUE : FALSE));
|
||||
}
|
||||
|
||||
*nextp= m_ip+1;
|
||||
|
||||
@@ -153,12 +153,15 @@ sp_cursor::pre_open(THD *thd)
|
||||
}
|
||||
|
||||
void
|
||||
sp_cursor::post_open(THD *thd, my_bool isopen)
|
||||
sp_cursor::post_open(THD *thd, my_bool was_opened)
|
||||
{
|
||||
thd->net.no_send_eof= m_nseof; // Restore the originals
|
||||
thd->protocol= m_oprot;
|
||||
m_isopen= isopen;
|
||||
m_current_row= m_prot->data;
|
||||
if (was_opened)
|
||||
{
|
||||
m_isopen= was_opened;
|
||||
m_current_row= m_prot->data;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
|
||||
@@ -220,7 +220,7 @@ public:
|
||||
LEX *
|
||||
pre_open(THD *thd);
|
||||
void
|
||||
post_open(THD *thd, my_bool isopen);
|
||||
post_open(THD *thd, my_bool was_opened);
|
||||
|
||||
int
|
||||
close(THD *thd);
|
||||
|
||||
Reference in New Issue
Block a user