mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge branch '10.4' into 10.5
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
/*
|
||||
Copyright (c) 2000, 2016, Oracle and/or its affiliates.
|
||||
Copyright (c) 2009, 2021, MariaDB Corporation.
|
||||
Copyright (c) 2009, 2022, MariaDB Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -1143,7 +1143,7 @@ public:
|
||||
/* We build without RTTI, so dynamic_cast can't be used. */
|
||||
enum Type
|
||||
{
|
||||
STATEMENT, PREPARED_STATEMENT, STORED_PROCEDURE, TABLE_ARENA
|
||||
STATEMENT, PREPARED_STATEMENT, STORED_PROCEDURE
|
||||
};
|
||||
|
||||
Query_arena(MEM_ROOT *mem_root_arg, enum enum_state state_arg) :
|
||||
@ -2268,6 +2268,39 @@ struct wait_for_commit
|
||||
void reinit();
|
||||
};
|
||||
|
||||
|
||||
class Sp_caches
|
||||
{
|
||||
public:
|
||||
sp_cache *sp_proc_cache;
|
||||
sp_cache *sp_func_cache;
|
||||
sp_cache *sp_package_spec_cache;
|
||||
sp_cache *sp_package_body_cache;
|
||||
Sp_caches()
|
||||
:sp_proc_cache(NULL),
|
||||
sp_func_cache(NULL),
|
||||
sp_package_spec_cache(NULL),
|
||||
sp_package_body_cache(NULL)
|
||||
{ }
|
||||
~Sp_caches()
|
||||
{
|
||||
// All caches must be freed by the caller explicitly
|
||||
DBUG_ASSERT(sp_proc_cache == NULL);
|
||||
DBUG_ASSERT(sp_func_cache == NULL);
|
||||
DBUG_ASSERT(sp_package_spec_cache == NULL);
|
||||
DBUG_ASSERT(sp_package_body_cache == NULL);
|
||||
}
|
||||
void sp_caches_swap(Sp_caches &rhs)
|
||||
{
|
||||
swap_variables(sp_cache*, sp_proc_cache, rhs.sp_proc_cache);
|
||||
swap_variables(sp_cache*, sp_func_cache, rhs.sp_func_cache);
|
||||
swap_variables(sp_cache*, sp_package_spec_cache, rhs.sp_package_spec_cache);
|
||||
swap_variables(sp_cache*, sp_package_body_cache, rhs.sp_package_body_cache);
|
||||
}
|
||||
void sp_caches_clear();
|
||||
};
|
||||
|
||||
|
||||
extern "C" void my_message_sql(uint error, const char *str, myf MyFlags);
|
||||
|
||||
|
||||
@ -2304,7 +2337,8 @@ class THD: public THD_count, /* this must be first */
|
||||
*/
|
||||
public Item_change_list,
|
||||
public MDL_context_owner,
|
||||
public Open_tables_state
|
||||
public Open_tables_state,
|
||||
public Sp_caches
|
||||
{
|
||||
private:
|
||||
inline bool is_stmt_prepare() const
|
||||
@ -3326,10 +3360,6 @@ public:
|
||||
enum_sql_command last_sql_command; // Last sql_command exceuted in mysql_execute_command()
|
||||
|
||||
sp_rcontext *spcont; // SP runtime context
|
||||
sp_cache *sp_proc_cache;
|
||||
sp_cache *sp_func_cache;
|
||||
sp_cache *sp_package_spec_cache;
|
||||
sp_cache *sp_package_body_cache;
|
||||
|
||||
/** number of name_const() substitutions, see sp_head.cc:subst_spvars() */
|
||||
uint query_name_consts;
|
||||
@ -4128,8 +4158,7 @@ public:
|
||||
|
||||
bool is_item_tree_change_register_required()
|
||||
{
|
||||
return !stmt_arena->is_conventional()
|
||||
|| stmt_arena->type() == Query_arena::TABLE_ARENA;
|
||||
return !stmt_arena->is_conventional();
|
||||
}
|
||||
|
||||
void change_item_tree(Item **place, Item *new_value)
|
||||
@ -4747,18 +4776,18 @@ public:
|
||||
mdl_context.release_transactional_locks(this);
|
||||
}
|
||||
int decide_logging_format(TABLE_LIST *tables);
|
||||
/*
|
||||
In Some cases when decide_logging_format is called it does not have all
|
||||
information to decide the logging format. So that cases we call decide_logging_format_2
|
||||
at later stages in execution.
|
||||
One example would be binlog format for IODKU but column with unique key is not inserted.
|
||||
We don't have inserted columns info when we call decide_logging_format so on later stage we call
|
||||
decide_logging_format_low
|
||||
|
||||
@returns 0 if no format is changed
|
||||
1 if there is change in binlog format
|
||||
/*
|
||||
In Some cases when decide_logging_format is called it does not have
|
||||
all information to decide the logging format. So that cases we call
|
||||
decide_logging_format_2 at later stages in execution.
|
||||
|
||||
One example would be binlog format for insert on duplicate key
|
||||
(IODKU) but column with unique key is not inserted. We do not have
|
||||
inserted columns info when we call decide_logging_format so on
|
||||
later stage we call reconsider_logging_format_for_iodup()
|
||||
*/
|
||||
int decide_logging_format_low(TABLE *table);
|
||||
void reconsider_logging_format_for_iodup(TABLE *table);
|
||||
|
||||
enum need_invoker { INVOKER_NONE=0, INVOKER_USER, INVOKER_ROLE};
|
||||
void binlog_invoker(bool role) { m_binlog_invoker= role ? INVOKER_ROLE : INVOKER_USER; }
|
||||
@ -5007,6 +5036,14 @@ public:
|
||||
bool is_binlog_dump_thread();
|
||||
#endif
|
||||
|
||||
/*
|
||||
Indicates if this thread is suspended due to awaiting an ACK from a
|
||||
replica. True if suspended, false otherwise.
|
||||
|
||||
Note that this variable is protected by Repl_semi_sync_master::LOCK_binlog
|
||||
*/
|
||||
bool is_awaiting_semisync_ack;
|
||||
|
||||
inline ulong wsrep_binlog_format() const
|
||||
{
|
||||
return WSREP_BINLOG_FORMAT(variables.binlog_format);
|
||||
|
Reference in New Issue
Block a user