summaryrefslogtreecommitdiff
path: root/sql/sql_class.h
diff options
context:
space:
mode:
authorSergei Petrunia <psergey@askmonty.org>2014-10-15 17:21:59 +0400
committerSergei Petrunia <psergey@askmonty.org>2014-10-15 17:21:59 +0400
commitbe1c17669cb90e18315d7675c8b4d3c906cd64a7 (patch)
treee4a0cddd284e813510666ec843344886a160a619 /sql/sql_class.h
parent041e03e251e783d51ca86e53112e3b87bd2da146 (diff)
parentfec5ab5a56cb9a45c621207620cc85079cddf537 (diff)
downloadmariadb-git-be1c17669cb90e18315d7675c8b4d3c906cd64a7.tar.gz
Merge ../10.1 into bb-10.1-explain-json
Diffstat (limited to 'sql/sql_class.h')
-rw-r--r--sql/sql_class.h180
1 files changed, 146 insertions, 34 deletions
diff --git a/sql/sql_class.h b/sql/sql_class.h
index c0636349b89..e1536071e08 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -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 */