mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Moving a change_list related methods from THD to Item_change_list
1. Moving the following methods from THD to Item_change_list: nocheck_register_item_tree_change() check_and_register_item_tree_change() rollback_item_tree_changes() as they work only with the "change_list" member and don't require anything else from THD. 2. Deriving THD from Item_change_list This change will help to fix "MDEV-14603 signal 11 with short stacktrace" easier.
This commit is contained in:
@ -1279,7 +1279,21 @@ public:
|
||||
*/
|
||||
|
||||
struct Item_change_record;
|
||||
typedef I_List<Item_change_record> Item_change_list;
|
||||
class Item_change_list
|
||||
{
|
||||
I_List<Item_change_record> change_list;
|
||||
public:
|
||||
void nocheck_register_item_tree_change(Item **place, Item *old_value,
|
||||
MEM_ROOT *runtime_memroot);
|
||||
void check_and_register_item_tree_change(Item **place, Item **new_value,
|
||||
MEM_ROOT *runtime_memroot);
|
||||
void rollback_item_tree_changes();
|
||||
void move_elements_to(Item_change_list *to)
|
||||
{
|
||||
change_list.move_elements_to(&to->change_list);
|
||||
}
|
||||
bool is_empty() { return change_list.is_empty(); }
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
@ -2040,6 +2054,14 @@ void dbug_serve_apcs(THD *thd, int n_calls);
|
||||
*/
|
||||
|
||||
class THD :public Statement,
|
||||
/*
|
||||
This is to track items changed during execution of a prepared
|
||||
statement/stored procedure. It's created by
|
||||
nocheck_register_item_tree_change() in memory root of THD,
|
||||
and freed in rollback_item_tree_changes().
|
||||
For conventional execution it's always empty.
|
||||
*/
|
||||
public Item_change_list,
|
||||
public MDL_context_owner,
|
||||
public Open_tables_state
|
||||
{
|
||||
@ -2510,14 +2532,6 @@ public:
|
||||
#ifdef SIGNAL_WITH_VIO_CLOSE
|
||||
Vio* active_vio;
|
||||
#endif
|
||||
/*
|
||||
This is to track items changed during execution of a prepared
|
||||
statement/stored procedure. It's created by
|
||||
nocheck_register_item_tree_change() in memory root of THD, and freed in
|
||||
rollback_item_tree_changes(). For conventional execution it's always
|
||||
empty.
|
||||
*/
|
||||
Item_change_list change_list;
|
||||
|
||||
/*
|
||||
A permanent memory area of the statement. For conventional
|
||||
@ -3599,11 +3613,6 @@ public:
|
||||
*/
|
||||
memcpy((char*) place, new_value, sizeof(*new_value));
|
||||
}
|
||||
void nocheck_register_item_tree_change(Item **place, Item *old_value,
|
||||
MEM_ROOT *runtime_memroot);
|
||||
void check_and_register_item_tree_change(Item **place, Item **new_value,
|
||||
MEM_ROOT *runtime_memroot);
|
||||
void rollback_item_tree_changes();
|
||||
|
||||
/*
|
||||
Cleanup statement parse state (parse tree, lex) and execution
|
||||
|
Reference in New Issue
Block a user