1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +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

@@ -48,6 +48,8 @@ class Item_func_match;
class File_parser;
class Key_part_spec;
#define ALLOC_ROOT_SET 1024
#ifdef MYSQL_SERVER
/*
There are 8 different type of table access so there is no more than
@@ -2367,6 +2369,7 @@ public:
};
class Query_arena_memroot;
/* The state of the lex parsing. This is saved in the THD struct */
struct LEX: public Query_tables_list
@@ -2430,6 +2433,15 @@ struct LEX: public Query_tables_list
List<set_var_base> var_list;
List<set_var_base> stmt_var_list; //SET_STATEMENT values
List<set_var_base> old_var_list; // SET STATEMENT old values
private:
Query_arena_memroot *arena_for_set_stmt;
MEM_ROOT *mem_root_for_set_stmt;
public:
inline bool is_arena_for_set_stmt() {return arena_for_set_stmt != 0;}
bool set_arena_for_set_stmt(Query_arena *backup);
void reset_arena_for_set_stmt(Query_arena *backup);
void free_arena_for_set_stmt();
List<Item_func_set_user_var> set_var_list; // in-query assignment list
List<Item_param> param_list;
List<LEX_STRING> view_list; // view list (list of field names in view)
@@ -2677,10 +2689,23 @@ struct LEX: public Query_tables_list
limit_rows_examined_cnt= ULONGLONG_MAX;
}
inline void free_set_stmt_mem_root()
{
DBUG_ASSERT(!is_arena_for_set_stmt());
if (mem_root_for_set_stmt)
{
free_root(mem_root_for_set_stmt, MYF(0));
delete mem_root_for_set_stmt;
mem_root_for_set_stmt= 0;
}
}
LEX();
virtual ~LEX()
{
free_set_stmt_mem_root();
destroy_query_tables_list();
plugin_unlock_list(NULL, (plugin_ref *)plugins.buffer, plugins.elements);
delete_dynamic(&plugins);