1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-27 18:02:13 +03:00

Merge ../10.1 into bb-10.1-explain-json

This commit is contained in:
Sergei Petrunia
2014-10-15 17:21:59 +04:00
2515 changed files with 52642 additions and 564022 deletions

View File

@ -37,6 +37,7 @@
#include "violite.h" /* vio_is_connected */
#include "thr_lock.h" /* thr_lock_type, THR_LOCK_DATA,
THR_LOCK_INFO */
#include "thr_timer.h"
#include <mysql/psi/mysql_stage.h>
#include <mysql/psi/mysql_statement.h>
#include <mysql/psi/mysql_idle.h>
@ -50,12 +51,13 @@ void set_thd_stage_info(void *thd,
const char *calling_func,
const char *calling_file,
const unsigned int calling_line);
#define THD_STAGE_INFO(thd, stage) \
(thd)->enter_stage(& stage, NULL, __func__, __FILE__, __LINE__)
#include "my_apc.h"
#include "rpl_gtid.h"
#include "wsrep_mysqld.h"
class Reprepare_observer;
class Relay_log_info;
@ -448,17 +450,19 @@ enum killed_state
*/
ABORT_QUERY= 6,
ABORT_QUERY_HARD= 7,
KILL_TIMEOUT= 8,
KILL_TIMEOUT_HARD= 9,
/*
All of the following killed states will kill the connection
KILL_CONNECTION must be the first of these and it must start with
an even number (becasue of HARD bit)!
*/
KILL_CONNECTION= 8,
KILL_CONNECTION_HARD= 9,
KILL_SYSTEM_THREAD= 10,
KILL_SYSTEM_THREAD_HARD= 11,
KILL_SERVER= 12,
KILL_SERVER_HARD= 13
KILL_CONNECTION= 10,
KILL_CONNECTION_HARD= 11,
KILL_SYSTEM_THREAD= 12,
KILL_SYSTEM_THREAD_HARD= 13,
KILL_SERVER= 14,
KILL_SERVER_HARD= 15
};
extern int killed_errno(killed_state killed);
@ -507,6 +511,7 @@ typedef struct system_variables
ulonglong max_heap_table_size;
ulonglong tmp_table_size;
ulonglong long_query_time;
ulonglong max_statement_time;
ulonglong optimizer_switch;
sql_mode_t sql_mode; ///< which non-standard SQL behaviour should be enabled
sql_mode_t old_behavior; ///< which old SQL behaviour should be enabled
@ -567,9 +572,6 @@ typedef struct system_variables
ulong log_slow_rate_limit;
ulong binlog_format; ///< binlog format for this thd (see enum_binlog_format)
ulong progress_report_time;
my_bool binlog_annotate_row_events;
my_bool binlog_direct_non_trans_update;
my_bool sql_log_bin;
ulong completion_type;
ulong query_cache_type;
ulong tx_isolation;
@ -600,7 +602,6 @@ typedef struct system_variables
my_bool tx_read_only;
my_bool low_priority_updates;
my_bool query_cache_wlock_invalidate;
my_bool engine_condition_pushdown;
my_bool keep_files_on_create;
my_bool old_mode;
@ -608,6 +609,10 @@ typedef struct system_variables
my_bool old_passwords;
my_bool big_tables;
my_bool query_cache_strip_comments;
my_bool sql_log_slow;
my_bool sql_log_bin;
my_bool binlog_annotate_row_events;
my_bool binlog_direct_non_trans_update;
plugin_ref table_plugin;
plugin_ref tmp_table_plugin;
@ -638,7 +643,11 @@ typedef struct system_variables
ulong wt_timeout_short, wt_deadlock_search_depth_short;
ulong wt_timeout_long, wt_deadlock_search_depth_long;
double long_query_time_double;
my_bool wsrep_on;
my_bool wsrep_causal_reads;
uint wsrep_sync_wait;
ulong wsrep_retry_autocommit;
double long_query_time_double, max_statement_time_double;
my_bool pseudo_slave_mode;
@ -727,6 +736,7 @@ typedef struct system_status_var
ulong empty_queries;
ulong access_denied_errors;
ulong lost_connections;
ulong max_statement_time_exceeded;
/*
Number of statements sent from the client
*/
@ -793,6 +803,10 @@ mysqld_collation_get_by_name(const char *name,
return cs;
}
inline bool is_supported_parser_charset(CHARSET_INFO *cs)
{
return MY_TEST(cs->mbminlen == 1);
}
#ifdef MYSQL_SERVER
@ -1355,10 +1369,9 @@ enum enum_thread_type
SYSTEM_THREAD_DELAYED_INSERT= 1,
SYSTEM_THREAD_SLAVE_IO= 2,
SYSTEM_THREAD_SLAVE_SQL= 4,
SYSTEM_THREAD_NDBCLUSTER_BINLOG= 8,
SYSTEM_THREAD_EVENT_SCHEDULER= 16,
SYSTEM_THREAD_EVENT_WORKER= 32,
SYSTEM_THREAD_BINLOG_BACKGROUND= 64
SYSTEM_THREAD_EVENT_SCHEDULER= 8,
SYSTEM_THREAD_EVENT_WORKER= 16,
SYSTEM_THREAD_BINLOG_BACKGROUND= 32
};
inline char const *
@ -1371,7 +1384,6 @@ show_system_thread(enum_thread_type thread)
RETURN_NAME_AS_STRING(SYSTEM_THREAD_DELAYED_INSERT);
RETURN_NAME_AS_STRING(SYSTEM_THREAD_SLAVE_IO);
RETURN_NAME_AS_STRING(SYSTEM_THREAD_SLAVE_SQL);
RETURN_NAME_AS_STRING(SYSTEM_THREAD_NDBCLUSTER_BINLOG);
RETURN_NAME_AS_STRING(SYSTEM_THREAD_EVENT_SCHEDULER);
RETURN_NAME_AS_STRING(SYSTEM_THREAD_EVENT_WORKER);
default:
@ -2072,7 +2084,7 @@ public:
int is_current_stmt_binlog_format_row() const {
DBUG_ASSERT(current_stmt_binlog_format == BINLOG_FORMAT_STMT ||
current_stmt_binlog_format == BINLOG_FORMAT_ROW);
return current_stmt_binlog_format == BINLOG_FORMAT_ROW;
return WSREP_FORMAT(current_stmt_binlog_format) == BINLOG_FORMAT_ROW;
}
enum binlog_filter_state
@ -2756,7 +2768,8 @@ public:
/* Debug Sync facility. See debug_sync.cc. */
struct st_debug_sync_control *debug_sync_control;
#endif /* defined(ENABLED_DEBUG_SYNC) */
THD();
THD(bool is_wsrep_applier= false);
~THD();
void init(void);
@ -3271,8 +3284,7 @@ public:
tests fail and so force them to propagate the
lex->binlog_row_based_if_mixed upwards to the caller.
*/
if ((variables.binlog_format == BINLOG_FORMAT_MIXED) &&
(in_sub_stmt == 0))
if ((wsrep_binlog_format() == BINLOG_FORMAT_MIXED) && (in_sub_stmt == 0))
set_current_stmt_binlog_format_row();
DBUG_VOID_RETURN;
@ -3323,7 +3335,7 @@ public:
show_system_thread(system_thread)));
if (in_sub_stmt == 0)
{
if (variables.binlog_format == BINLOG_FORMAT_ROW)
if (wsrep_binlog_format() == BINLOG_FORMAT_ROW)
set_current_stmt_binlog_format_row();
else if (temporary_tables == NULL)
set_current_stmt_binlog_format_stmt();
@ -3711,8 +3723,8 @@ public:
mysql_mutex_t LOCK_wakeup_ready;
mysql_cond_t COND_wakeup_ready;
/*
The GTID assigned to the last commit. If no GTID was assigned to any commit
so far, this is indicated by last_commit_gtid.seq_no == 0.
The GTID assigned to the last commit. If no GTID was assigned to any commit
so far, this is indicated by last_commit_gtid.seq_no == 0.
*/
rpl_gtid last_commit_gtid;
@ -3731,6 +3743,76 @@ public:
return (temporary_tables ||
(rgi_slave && rgi_have_temporary_tables()));
}
inline ulong wsrep_binlog_format() const
{
return WSREP_FORMAT(variables.binlog_format);
}
#ifdef WITH_WSREP
const bool wsrep_applier; /* dedicated slave applier thread */
bool wsrep_applier_closing; /* applier marked to close */
bool wsrep_client_thread; /* to identify client threads*/
bool wsrep_PA_safe;
bool wsrep_converted_lock_session;
bool wsrep_apply_toi; /* applier processing in TOI */
enum wsrep_exec_mode wsrep_exec_mode;
query_id_t wsrep_last_query_id;
enum wsrep_query_state wsrep_query_state;
enum wsrep_conflict_state wsrep_conflict_state;
mysql_mutex_t LOCK_wsrep_thd;
mysql_cond_t COND_wsrep_thd;
wsrep_trx_meta_t wsrep_trx_meta;
uint32 wsrep_rand;
Relay_log_info *wsrep_rli;
rpl_group_info *wsrep_rgi;
wsrep_ws_handle_t wsrep_ws_handle;
ulong wsrep_retry_counter; // of autocommit
char *wsrep_retry_query;
size_t wsrep_retry_query_len;
enum enum_server_command wsrep_retry_command;
enum wsrep_consistency_check_mode
wsrep_consistency_check;
int wsrep_mysql_replicated;
const char *wsrep_TOI_pre_query; /* a query to apply before
the actual TOI query */
size_t wsrep_TOI_pre_query_len;
wsrep_po_handle_t wsrep_po_handle;
size_t wsrep_po_cnt;
#ifdef GTID_SUPPORT
rpl_sid wsrep_po_sid;
#endif /* GTID_SUPPORT */
void *wsrep_apply_format;
char wsrep_info[128]; /* string for dynamic proc info */
#endif /* WITH_WSREP */
/* Handling of timeouts for commands */
thr_timer_t query_timer;
public:
void set_query_timer()
{
#ifndef EMBEDDED_LIBRARY
/*
Don't start a query timer if
- If timeouts are not set
- if we are in a stored procedure or sub statement
- If this is a slave thread
- If we already have set a timeout (happens when running prepared
statements that calls mysql_execute_command())
*/
if (!variables.max_statement_time || spcont || in_sub_stmt ||
slave_thread || query_timer.expired == 0)
return;
thr_timer_settime(&query_timer, variables.max_statement_time);
#endif
}
void reset_query_timer()
{
#ifndef EMBEDDED_LIBRARY
if (!query_timer.expired)
thr_timer_end(&query_timer);
#endif
}
};
@ -4689,21 +4771,46 @@ public:
class my_var : public Sql_alloc {
public:
LEX_STRING s;
#ifndef DBUG_OFF
const LEX_STRING name;
enum type { SESSION_VAR, LOCAL_VAR, PARAM_VAR };
type scope;
my_var(const LEX_STRING& j, enum type s) : name(j), scope(s) { }
virtual ~my_var() {}
virtual bool set(THD *thd, Item *val) = 0;
};
class my_var_param: public my_var {
public:
Settable_routine_parameter *param;
my_var_param(Item_param *p)
: my_var(null_lex_str, PARAM_VAR),
param(p->get_settable_routine_parameter())
{ p->inout= Item_param::OUT_PARAM; }
~my_var_param() { }
bool set(THD *thd, Item *val);
};
class my_var_sp: public my_var {
public:
uint offset;
enum_field_types type;
/*
Routine to which this Item_splocal belongs. Used for checking if correct
runtime context is used for variable handling.
*/
sp_head *sp;
#endif
bool local;
uint offset;
enum_field_types type;
my_var (LEX_STRING& j, bool i, uint o, enum_field_types t)
:s(j), local(i), offset(o), type(t)
{}
~my_var() {}
my_var_sp(const LEX_STRING& j, uint o, enum_field_types t, sp_head *s)
: my_var(j, LOCAL_VAR), offset(o), type(t), sp(s) { }
~my_var_sp() { }
bool set(THD *thd, Item *val);
};
class my_var_user: public my_var {
public:
my_var_user(const LEX_STRING& j)
: my_var(j, SESSION_VAR) { }
~my_var_user() { }
bool set(THD *thd, Item *val);
};
class select_dumpvar :public select_result_interceptor {
@ -4846,6 +4953,11 @@ public:
*/
#define CF_SKIP_QUESTIONS (1U << 1)
/**
Do not check that wsrep snapshot is ready before allowing this command
*/
#define CF_SKIP_WSREP_CHECK (1U << 2)
void mark_transaction_to_rollback(THD *thd, bool all);
/* Inline functions */