mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-14857: problem with 10.2.11 server crashing when executing stored procedure
Counter for select numbering made stored with the statement (before was global) So now it does have always accurate value which does not depend on interruption of statement prepare by errors like lack of table in a view definition.
This commit is contained in:
@ -2462,6 +2462,17 @@ void JOIN::save_explain_data(Explain_query *output, bool can_overwrite,
|
||||
bool need_tmp_table, bool need_order,
|
||||
bool distinct)
|
||||
{
|
||||
/*
|
||||
If there is SELECT in this statemet with the same number it must be the
|
||||
same SELECT
|
||||
*/
|
||||
DBUG_ASSERT(select_lex->select_number == UINT_MAX ||
|
||||
select_lex->select_number == INT_MAX ||
|
||||
!output ||
|
||||
!output->get_select(select_lex->select_number) ||
|
||||
output->get_select(select_lex->select_number)->select_lex ==
|
||||
select_lex);
|
||||
|
||||
if (select_lex->select_number != UINT_MAX &&
|
||||
select_lex->select_number != INT_MAX /* this is not a UNION's "fake select */ &&
|
||||
have_query_plan != JOIN::QEP_NOT_PRESENT_YET &&
|
||||
@ -24601,6 +24612,11 @@ int JOIN::save_explain_data_intern(Explain_query *output, bool need_tmp_table,
|
||||
{
|
||||
explain= new (output->mem_root) Explain_select(output->mem_root,
|
||||
thd->lex->analyze_stmt);
|
||||
if (!explain)
|
||||
DBUG_RETURN(1); // EoM
|
||||
#ifndef DBUG_OFF
|
||||
explain->select_lex= select_lex;
|
||||
#endif
|
||||
join->select_lex->set_explain_type(true);
|
||||
|
||||
explain->select_id= join->select_lex->select_number;
|
||||
|
Reference in New Issue
Block a user