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:
@@ -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);
|
||||
|
Reference in New Issue
Block a user