1
0
mirror of https://github.com/MariaDB/server.git synced 2025-06-12 01:53:02 +03:00

MDEV-7006 MDEV-7007: SET STATEMENT and slow log

fixed embedded server tests
MDEV-7009: SET STATEMENT min_examined_row_limit has no effect
MDEV-6948:SET STATEMENT gtid_domain_id = ... FOR has no effect (same for gtid_seq_no and server_id)

old values of SET STATENENT variables now saved in its own Query_arena and restored later
This commit is contained in:
Oleksandr Byelkin
2015-02-17 12:54:51 +01:00
parent dab12366b1
commit a71e2d23bd
14 changed files with 314 additions and 40 deletions

View File

@ -799,6 +799,7 @@ static void handle_bootstrap_impl(THD *thd)
free_root(thd->mem_root,MYF(MY_KEEP_PREALLOC));
free_root(&thd->transaction.mem_root,MYF(MY_KEEP_PREALLOC));
thd->lex->restore_set_statement_var();
}
DBUG_VOID_RETURN;
@ -1120,6 +1121,7 @@ bool do_command(THD *thd)
DBUG_ASSERT(!thd->apc_target.is_enabled());
out:
thd->lex->restore_set_statement_var();
/* The statement instrumentation must be closed in all cases. */
DBUG_ASSERT(thd->m_statement_psi == NULL);
DBUG_RETURN(return_value);
@ -1950,6 +1952,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
/* Check that some variables are reset properly */
DBUG_ASSERT(thd->abort_on_warning == 0);
thd->lex->restore_set_statement_var();
DBUG_RETURN(error);
}
@ -2637,18 +2640,26 @@ mysql_execute_command(THD *thd)
if (!lex->stmt_var_list.is_empty() && !thd->slave_thread)
{
Query_arena backup;
DBUG_PRINT("info", ("SET STATEMENT %d vars", lex->stmt_var_list.elements));
lex->old_var_list.empty();
List_iterator_fast<set_var_base> it(lex->stmt_var_list);
set_var_base *var;
while ((var=it++))
if (lex->set_arena_for_set_stmt(&backup))
goto error;
while ((var= it++))
{
DBUG_ASSERT(var->is_system());
set_var *o= NULL, *v= (set_var*)var;
if (!v->var->is_set_stmt_ok())
{
my_error(ER_SET_STATEMENT_NOT_SUPPORTED, MYF(0), v->var->name.str);
lex->reset_arena_for_set_stmt(&backup);
lex->old_var_list.empty();
lex->free_arena_for_set_stmt();
goto error;
}
if (v->var->is_default())
@ -2721,11 +2732,15 @@ mysql_execute_command(THD *thd)
DBUG_ASSERT(o);
lex->old_var_list.push_back(o);
}
lex->reset_arena_for_set_stmt(&backup);
if (lex->old_var_list.is_empty())
lex->free_arena_for_set_stmt();
if (thd->is_error() ||
(res= sql_set_variables(thd, &lex->stmt_var_list, false)))
{
if (!thd->is_error())
my_error(ER_WRONG_ARGUMENTS, MYF(0), "SET");
lex->restore_set_statement_var();
goto error;
}
}
@ -5552,7 +5567,6 @@ finish:
thd->in_multi_stmt_transaction_mode());
lex->restore_set_statement_var();
lex->unit.cleanup();
if (! thd->in_sub_stmt)