MySQL 8.0.40
Source Code Documentation
sql_class.h
Go to the documentation of this file.
1/* Copyright (c) 2000, 2024, Oracle and/or its affiliates.
2
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License, version 2.0,
5 as published by the Free Software Foundation.
6
7 This program is designed to work with certain software (including
8 but not limited to OpenSSL) that is licensed under separate terms,
9 as designated in a particular file or component or in included license
10 documentation. The authors of MySQL hereby grant you an additional
11 permission to link the program and your derivative works with the
12 separately licensed software that they have either included with
13 the program or referenced in the documentation.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License, version 2.0, for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
23
24#ifndef SQL_CLASS_INCLUDED
25#define SQL_CLASS_INCLUDED
26
27/*
28 This file contains the declaration of the THD class and classes which THD
29 depends on. It should contain as little else as possible to increase
30 cohesion and reduce coupling. Since THD is used in many places, many files
31 are dependent on this header and thus require recompilation if it changes.
32 Historically this file contained "Classes in mysql".
33*/
34
35#include "my_config.h"
36
37#include <limits.h>
38#include <stdarg.h>
39#include <stdio.h>
40#include <string.h>
41#ifdef HAVE_SYS_TIME_H
42#include <sys/time.h>
43#endif
44#include <sys/types.h>
45#include <atomic>
46#include <bitset>
47#include <memory>
48#include <new>
49#include <string>
50
51#include "dur_prop.h" // durability_properties
52#include "lex_string.h"
53#include "m_ctype.h"
54#include "map_helpers.h"
55#include "my_alloc.h"
56#include "my_base.h"
57#include "my_command.h"
58#include "my_compiler.h"
59#include "my_dbug.h"
60#include "my_inttypes.h"
61#include "my_io.h"
62#include "my_psi_config.h"
63#include "my_sqlcommand.h"
64#include "my_sys.h"
65#include "my_table_map.h"
66#include "my_thread_local.h"
67#include "my_time_t.h"
80#include "mysql/thread_type.h"
81#include "mysql_com.h"
82#include "mysql_com_server.h" // NET_SERVER
83#include "mysqld_error.h"
84#include "pfs_thread_provider.h"
85#include "prealloced_array.h"
86#include "sql/auth/sql_security_ctx.h" // Security_context
87#include "sql/current_thd.h"
88#include "sql/dd/string_type.h" // dd::string_type
89#include "sql/discrete_interval.h" // Discrete_interval
90#include "sql/locked_tables_list.h" // enum_locked_tables_mode
91#include "sql/mdl.h"
92#include "sql/opt_costmodel.h"
93#include "sql/opt_trace_context.h" // Opt_trace_context
94#include "sql/psi_memory_key.h"
95#include "sql/query_options.h"
97#include "sql/rpl_context.h" // Rpl_thd_context
98#include "sql/rpl_gtid.h"
99#include "sql/session_tracker.h" // Session_tracker
100#include "sql/sql_connect.h"
101#include "sql/sql_const.h"
102#include "sql/sql_digest_stream.h" // sql_digest_state
103#include "sql/sql_error.h"
104#include "sql/sql_list.h"
105#include "sql/sql_plugin_ref.h"
106#include "sql/sys_vars_resource_mgr.h" // Session_sysvar_resource_manager
107#include "sql/system_variables.h" // system_variables
108#include "sql/transaction_info.h" // Ha_trx_info
109#include "sql/xa.h"
110#include "sql_string.h"
111#include "template_utils.h"
112#include "thr_lock.h"
113#include "violite.h"
114
115enum enum_check_fields : int;
116enum enum_tx_isolation : int;
117enum ha_notification_type : int;
118class Item;
119class Parser_state;
120class PROFILING;
122class Relay_log_info;
123class THD;
124class partition_info;
125class Protocol;
126class Protocol_binary;
127class Protocol_classic;
128class Protocol_text;
129template <class T>
130class mem_root_deque;
131class sp_rcontext;
132class user_var_entry;
133struct LEX;
134struct LEX_USER;
135struct TABLE;
136class Table_ref;
137struct timeval;
138struct User_level_lock;
139struct YYLTYPE;
140
141namespace dd {
142namespace cache {
143class Dictionary_client;
144}
145
146class DD_kill_immunizer;
147} // namespace dd
148
151class Query_result;
153class Rows_log_event;
154class Time_zone;
155class sp_cache;
157struct LOG_INFO;
158
159typedef struct user_conn USER_CONN;
160struct MYSQL_LOCK;
161
162extern "C" void thd_enter_cond(void *opaque_thd, mysql_cond_t *cond,
163 mysql_mutex_t *mutex,
164 const PSI_stage_info *stage,
165 PSI_stage_info *old_stage,
166 const char *src_function, const char *src_file,
167 int src_line);
168extern "C" void thd_exit_cond(void *opaque_thd, const PSI_stage_info *stage,
169 const char *src_function, const char *src_file,
170 int src_line);
171
172extern "C" void thd_enter_stage(void *opaque_thd,
173 const PSI_stage_info *new_stage,
174 PSI_stage_info *old_stage,
175 const char *src_function, const char *src_file,
176 int src_line);
177
178extern "C" void thd_set_waiting_for_disk_space(void *opaque_thd,
179 const bool waiting);
180
181#define THD_STAGE_INFO(thd, stage) \
182 (thd)->enter_stage(&stage, NULL, __func__, __FILE__, __LINE__)
183
184extern char empty_c_string[1];
185
186/*
187 We preallocate data for several storage engine plugins.
188 so: innodb + bdb + ndb + binlog + myisam + myisammrg + archive +
189 example + csv + heap + blackhole + federated + 0
190 (yes, the sum is deliberately inaccurate)
191*/
192constexpr size_t PREALLOC_NUM_HA = 15;
193
194#ifndef NDEBUG
195// Used to sample certain debug flags when a query is read but before the reply
196// is sent.
197enum class TDM { ANY, ON, ZERO, NOT_AVAILABLE };
199#endif /* not defined NDEBUG */
200
201/**
202 To be used for pool-of-threads (implemented differently on various OSs)
203*/
205 public:
206 void *data; /* scheduler-specific data structure */
207
209
210 ~thd_scheduler() = default;
211};
212
214void thd_set_psi(THD *thd, PSI_thread *psi);
215
216/**
217 Return @@session.terminology_use_previous for the current THD.
218
219 @return the integer value of one of the enumeration values in
220 terminology_use_previous::enum_compatibility_version.
221*/
222extern "C" unsigned int thd_get_current_thd_terminology_use_previous();
223
225 /**
226 Memory counter object doesn't update global memory counter and doesn't throw
227 OOM error.
228 */
230 /**
231 if MEM_CNT_UPDATE_GLOBAL_COUNTER is set, memory counter object updates
232 global memory counter.
233 */
235 /**
236 if MEM_CNT_GENERATE_ERROR is set, memory counter object generates OOM error if
237 any.
238*/
240 /**
241 if MEM_CNT_GENERATE_LOG_ERROR is set, memory counter object generates OOM
242 error to error log if any.
243*/
246
248 private:
249 bool m_enabled{false};
250 THD *m_thd{nullptr}; // Pointer to THD object.
251 Diagnostics_area m_da{false}; // Diagnostics area.
252 ulonglong mem_counter{0}; // Amount of memory consumed by thread.
253 ulonglong max_conn_mem{0}; // Max amount memory consumed by thread.
254 ulonglong glob_mem_counter{0}; // Amount of memory added to global
255 // memory counter.
256 uint curr_mode{MEM_CNT_DEFAULT}; // Current memory counter mode.
257 uint orig_mode{MEM_CNT_DEFAULT}; // Original memory counter mode
258 // (sets at init_mode() stage).
259 bool is_connection_stage{true}; // True on connection stage,
260 // resets to false after successful
261 // connection.
262 public:
265 assert(!m_enabled);
266 assert(glob_mem_counter == 0);
267 }
268 void set_thd(THD *thd) { m_thd = thd; }
269 void enable() { m_enabled = true; }
270 void disable();
271
272 void alloc_cnt(size_t size);
273 void free_cnt(size_t size);
274 int reset();
275 void flush();
276 /**
277 Restore original memory counter mode.
278 */
280 /**
281 Set NO ERROR memory counter mode.
282 */
285 }
286 /**
287 Function sets current memory counter mode.
288
289 @param mode_arg current memory counter mode.
290 */
291 void set_curr_mode(uint mode_arg) { curr_mode = mode_arg; }
292 /**
293 Function sets original memory counter mode.
294
295 @param mode_arg original memory counter mode.
296 */
297 void set_orig_mode(uint mode_arg) { orig_mode = mode_arg; }
298 /**
299 Check if memory counter error is issued.
300
301 @retval true if memory counter error is issued, false otherwise.
302 */
303 bool is_error() const { return m_da.is_error(); }
304 void set_thd_error_status() const;
305
306 private:
307 int generate_error(int err_no, ulonglong mem_limit, ulonglong mem_size);
308 /**
309 Check if memory counter is in error mode.
310
311 @retval true if memory counter is in error mode, false otherwise.
312 */
313 bool is_error_mode() const { return (curr_mode & MEM_CNT_GENERATE_ERROR); }
314 /**
315 Check if memory counter is in error log mode.
316
317 @retval true if memory counter is in error log mode, false otherwise.
318 */
319 bool is_error_log_mode() const {
321 }
322};
323
324/**
325 the struct aggregates two parameters that identify an event
326 uniquely in scope of communication of a particular master and slave couple.
327 I.e there can not be 2 events from the same staying connected master which
328 have the same coordinates.
329 @note
330 Such identifier is not yet unique generally as the event originating master
331 is resettable. Also the crashed master can be replaced with some other.
332*/
333typedef struct rpl_event_coordinates {
334 char *file_name; // binlog file name (directories stripped)
335 my_off_t pos; // event's position in the binlog file
337
338#define THD_SENTRY_MAGIC 0xfeedd1ff
339#define THD_SENTRY_GONE 0xdeadbeef
340
341#define THD_CHECK_SENTRY(thd) assert(thd->dbug_sentry == THD_SENTRY_MAGIC)
342
344 private:
345 /*
346 List of items created for this query. Every item adds itself to the list
347 on creation (see Item::Item() for details)
348 */
350
351 public:
352 MEM_ROOT *mem_root; // Pointer to current memroot
353 /// To check whether a reprepare operation is active
354 bool is_repreparing{false};
355 /*
356 The states reflects three different life cycles for three
357 different types of statements:
358 Prepared statement: STMT_INITIALIZED -> STMT_PREPARED -> STMT_EXECUTED.
359 Stored procedure: STMT_INITIALIZED_FOR_SP -> STMT_EXECUTED.
360 Other statements: STMT_REGULAR_EXECUTION never changes.
361 */
368 STMT_ERROR = -1
369 };
370
371 /*
372 State and state changes in SP:
373 1) When state is STMT_INITIALIZED_FOR_SP, objects in the item tree are
374 created on the statement memroot. This is enforced through
375 ps_arena_holder checking the state.
376 2) After the first execute (call p1()), this state should change to
377 STMT_EXECUTED. Objects will be created on the execution memroot and will
378 be destroyed at the end of each execution.
379 3) In case an ER_NEED_REPREPARE error occurs, state should be changed to
380 STMT_INITIALIZED_FOR_SP and objects will again be created on the
381 statement memroot. At the end of this execution, state should change to
382 STMT_EXECUTED.
383 */
384 private:
386
387 public:
388 Query_arena(MEM_ROOT *mem_root_arg, enum enum_state state_arg)
389 : m_item_list(nullptr), mem_root(mem_root_arg), state(state_arg) {}
390
391 /*
392 This constructor is used only when Query_arena is created as
393 backup storage for another instance of Query_arena.
394 */
397
398 virtual ~Query_arena() = default;
399
400 Item *item_list() const { return m_item_list; }
401 void reset_item_list() { m_item_list = nullptr; }
402 void set_item_list(Item *item) { m_item_list = item; }
403 void add_item(Item *item);
404 void free_items();
405 void set_state(enum_state state_arg) { state = state_arg; }
406 enum_state get_state() const { return state; }
407 bool is_stmt_prepare() const { return state == STMT_INITIALIZED; }
409 return (int)state < (int)STMT_PREPARED;
410 }
412 return (int)state <= (int)STMT_PREPARED;
413 }
414 /// @returns true if a regular statement, ie not prepared and not stored proc
415 bool is_regular() const { return state == STMT_REGULAR_EXECUTION; }
416
417 void *alloc(size_t size) { return mem_root->Alloc(size); }
418 void *mem_calloc(size_t size) {
419 void *ptr;
420 if ((ptr = mem_root->Alloc(size))) memset(ptr, 0, size);
421 return ptr;
422 }
423 template <typename T>
425 void *m = alloc(sizeof(T));
426 return m == nullptr ? nullptr : new (m) T;
427 }
428 template <typename T>
429 T *memdup_typed(const T *mem) {
430 return static_cast<T *>(memdup_root(mem_root, mem, sizeof(T)));
431 }
432 char *mem_strdup(const char *str) { return strdup_root(mem_root, str); }
433 char *strmake(const char *str, size_t size) const {
434 return strmake_root(mem_root, str, size);
435 }
437 LEX_CSTRING ret;
438 ret.str = strmake(str.str, str.length);
439 ret.length = ret.str ? str.length : 0;
440 return ret;
441 }
442 void *memdup(const void *str, size_t size) {
443 return memdup_root(mem_root, str, size);
444 }
445
446 /**
447 Copies memory-managing members from `set`. No references are kept to it.
448
449 @param set A Query_arena from which members are copied.
450 */
451 void set_query_arena(const Query_arena &set);
452
453 /**
454 Copy the current arena to `backup` and set the current
455 arena to match `source`
456
457 @param source A Query_arena from which members are copied.
458 @param backup A Query_arena to which members are first saved.
459 */
461};
462
464
465/**
466 Container for all prepared statements created/used in a connection.
467
468 Prepared statements in Prepared_statement_map have unique id
469 (guaranteed by id assignment in Prepared_statement::Prepared_statement).
470
471 Non-empty statement names are unique too: attempt to insert a new statement
472 with duplicate name causes older statement to be deleted.
473
474 Prepared statements are auto-deleted when they are removed from the map
475 and when the map is deleted.
476*/
477
479 public:
481
482 /**
483 Insert a new statement to the thread-local prepared statement map.
484
485 If there was an old statement with the same name, replace it with the
486 new one. Otherwise, check if max_prepared_stmt_count is not reached yet,
487 increase prepared_stmt_count, and insert the new statement. It's okay
488 to delete an old statement and fail to insert the new one.
489
490 All named prepared statements are also present in names_hash.
491 Prepared statement names in names_hash are unique.
492 The statement is added only if prepared_stmt_count < max_prepard_stmt_count
493 m_last_found_statement always points to a valid statement or is 0
494
495 @retval 0 success
496 @retval 1 error: out of resources or max_prepared_stmt_count limit has been
497 reached. An error is sent to the client, the statement
498 is deleted.
499 */
501
502 /** Find prepared statement by name. */
504
505 /** Find prepared statement by ID. */
506 Prepared_statement *find(ulong id);
507
508 /** Erase all prepared statements (calls Prepared_statement destructor). */
510
511 void claim_memory_ownership(bool claim);
512
513 void reset();
514
516
517 private:
521};
522
523/**
524 A registry for item tree transformations performed during
525 query optimization. We register only those changes which require
526 a rollback to re-execute a prepared statement or stored procedure
527 yet another time.
528*/
529
530class Item_change_record : public ilink<Item_change_record> {
531 private:
532 // not used
534
535 public:
541 bool m_cancel{false};
542};
543
545
546/**
547 Class that holds information about tables which were opened and locked
548 by the thread. It is also used to save/restore this information in
549 push_open_tables_state()/pop_open_tables_state().
550*/
551
553 private:
554 /**
555 A stack of Reprepare_observer-instances. The top most instance is the
556 currently active one. This stack is used during execution of prepared
557 statements and stored programs in order to detect metadata changes.
558 The locking subsystem reports a metadata change if the top-most item is not
559 NULL.
560
561 When Open_tables_state part of THD is reset to open a system or
562 INFORMATION_SCHEMA table, NULL is temporarily pushed to avoid spurious
563 ER_NEED_REPREPARE errors -- system and INFORMATION_SCHEMA tables are not
564 subject to metadata version tracking.
565
566 A stack is used here for the convenience -- in some cases we need to
567 temporarily override/disable current Reprepare_observer-instance.
568
569 NOTE: This is not a list of observers, only the top-most element will be
570 notified in case of a metadata change.
571
572 @sa check_and_update_table_version()
573 */
575
576 public:
578 return m_reprepare_observers.size() > 0 ? m_reprepare_observers.back()
579 : NULL;
580 }
581
583 m_reprepare_observers.push_back(o);
584 }
585
588 m_reprepare_observers.pop_back();
589 return retval;
590 }
591
593
594 public:
595 /**
596 List of regular tables in use by this thread. Contains persistent base
597 tables that were opened with @see open_tables().
598 */
600 /**
601 List of temporary tables used by this thread. Contains user-level
602 temporary tables, created with CREATE TEMPORARY TABLE, and
603 intermediate tables used in ALTER TABLE implementation.
604 */
606 /*
607 During a MySQL session, one can lock tables in two modes: automatic
608 or manual. In automatic mode all necessary tables are locked just before
609 statement execution, and all acquired locks are stored in 'lock'
610 member. Unlocking takes place automatically as well, when the
611 statement ends.
612 Manual mode comes into play when a user issues a 'LOCK TABLES'
613 statement. In this mode the user can only use the locked tables.
614 Trying to use any other tables will give an error.
615 The locked tables are also stored in this member, however,
616 thd->locked_tables_mode is turned on. Manual locking is described in
617 the 'LOCK_TABLES' chapter of the MySQL manual.
618 See also lock_tables() for details.
619 */
621
622 /*
623 CREATE-SELECT keeps an extra lock for the table being
624 created. This field is used to keep the extra lock available for
625 lower level routines, which would otherwise miss that lock.
626 */
628
629 /*
630 Enum enum_locked_tables_mode and locked_tables_mode member are
631 used to indicate whether the so-called "locked tables mode" is on,
632 and what kind of mode is active.
633
634 Locked tables mode is used when it's necessary to open and
635 lock many tables at once, for usage across multiple
636 (sub-)statements.
637 This may be necessary either for queries that use stored functions
638 and triggers, in which case the statements inside functions and
639 triggers may be executed many times, or for implementation of
640 LOCK TABLES, in which case the opened tables are reused by all
641 subsequent statements until a call to UNLOCK TABLES.
642
643 The kind of locked tables mode employed for stored functions and
644 triggers is also called "prelocked mode".
645 In this mode, first open_tables() call to open the tables used
646 in a statement analyses all functions used by the statement
647 and adds all indirectly used tables to the list of tables to
648 open and lock.
649 It also marks the parse tree of the statement as requiring
650 prelocking. After that, lock_tables() locks the entire list
651 of tables and changes THD::locked_tables_modeto LTM_PRELOCKED.
652 All statements executed inside functions or triggers
653 use the prelocked tables, instead of opening their own ones.
654 Prelocked mode is turned off automatically once close_thread_tables()
655 of the main statement is called.
656 */
658
660 BACKUPS_AVAIL = (1U << 0), /* There are backups available. */
661 SYSTEM_TABLES = (1U << 1) /* We are opening system tables. */
662 };
663
664 /*
665 Flags with information about the open tables state.
666 */
668 /**
669 This constructor initializes Open_tables_state instance which can only
670 be used as backup storage. To prepare Open_tables_state instance for
671 operations which open/lock/close tables (e.g. open_table()) one has to
672 call init_open_tables_state().
673 */
676
678
680};
681
682/**
683 Storage for backup of Open_tables_state. Must
684 be used only to open system tables (TABLE_CATEGORY_SYSTEM
685 and TABLE_CATEGORY_LOG).
686*/
687
689 public:
690 /**
691 When we backup the open tables state to open a system
692 table or tables, we want to save state of metadata
693 locks which were acquired before the backup. It is used
694 to release metadata locks on system tables after they are
695 no longer used.
696 */
698};
699
700/**
701 Enum that represents which phase of secondary engine optimization
702 the current statement is in.
703*/
705 /**
706 The current statement should only use tables from primary storage
707 engines. Use of secondary storage engines is disabled.
708 */
710
711 /**
712 The current statement should only use tables from the primary
713 storage engine. However, use of secondary storage engines is not
714 disabled, so the optimizer may choose to trigger a repreparation
715 against the secondary storage engine if it believes that use of a
716 secondary storage engine is beneficial.
717 */
719
720 /**
721 The current statement should use tables from a secondary storage
722 engine if possible. Otherwise, fall back to using tables from
723 primary storage engine only.
724 */
725 SECONDARY,
726};
727
728/**
729 @class Sub_statement_state
730 @brief Used to save context when executing a function or trigger
731*/
732
733/* Defines used for Sub_statement_state::in_sub_stmt */
734
735#define SUB_STMT_TRIGGER 1
736#define SUB_STMT_FUNCTION 2
737
739 public:
752};
753
754inline char const *show_system_thread(enum_thread_type thread) {
755#define RETURN_NAME_AS_STRING(NAME) \
756 case (NAME): \
757 return #NAME
758 switch (thread) {
759 static char buf[64];
774 default:
775 sprintf(buf, "<UNKNOWN SYSTEM THREAD: %d>", thread);
776 return buf;
777 }
778#undef RETURN_NAME_AS_STRING
779}
780
781/**
782 Storage engine specific thread local data.
783*/
784
785struct Ha_data {
786 /**
787 Storage engine specific thread local data.
788 Lifetime: one user connection.
789 */
790 void *ha_ptr;
791 /**
792 A memorizer to engine specific "native" transaction object to provide
793 storage engine detach-re-attach facility.
794 The server level transaction object can dissociate from storage engine
795 transactions. The released "native" transaction reference
796 can be hold in the member until it is reconciled later.
797 Lifetime: Depends on caller of @c hton::replace_native_transaction_in_thd.
798 For instance in the case of slave server applier handling XA transaction
799 it is from XA START to XA PREPARE.
800 */
802 /**
803 0: Life time: one statement within a transaction. If @@autocommit is
804 on, also represents the entire transaction.
805 @sa trans_register_ha()
806
807 1: Life time: one transaction within a connection.
808 If the storage engine does not participate in a transaction,
809 this should not be used.
810 @sa trans_register_ha()
811 */
813
814 /**
815 NULL: engine is not bound to this thread
816 non-NULL: engine is bound to this thread, engine shutdown forbidden
817 */
819
821};
822
823/**
824 An instance of the global read lock in a connection.
825 Implemented in lock.cc.
826*/
827
829 public:
834 };
835
837 : m_state(GRL_NONE),
840
841 bool lock_global_read_lock(THD *thd);
842 void unlock_global_read_lock(THD *thd);
843
844 /**
845 Used by innodb memcached server to check if any connections
846 have global read lock
847 */
849
850 /**
851 Check if this connection can acquire protection against GRL and
852 emit error if otherwise.
853 */
855 if (m_state) {
856 my_error(ER_CANT_UPDATE_WITH_READLOCK, MYF(0));
857 return true;
858 }
859 return false;
860 }
862 bool is_acquired() const { return m_state != GRL_NONE; }
864
865 private:
866 static std::atomic<int32> m_atomic_active_requests;
868 /**
869 In order to acquire the global read lock, the connection must
870 acquire shared metadata lock in GLOBAL namespace, to prohibit
871 all DDL.
872 */
874 /**
875 Also in order to acquire the global read lock, the connection
876 must acquire a shared metadata lock in COMMIT namespace, to
877 prohibit commits.
878 */
880};
881
882extern "C" void my_message_sql(uint error, const char *str, myf MyFlags);
883
884/**
885 This class keeps the context of transactional DDL statements. Currently only
886 CREATE TABLE with START TRANSACTION uses this context.
887*/
889 public:
890 explicit Transactional_ddl_context(THD *thd) : m_thd(thd) {
891 assert(m_thd != nullptr);
892 }
893
895 assert(!m_hton);
896 post_ddl();
897 }
898
899 void init(dd::String_type db, dd::String_type tablename,
900 const handlerton *hton);
901
902 bool inited() { return m_hton != nullptr; }
903
904 void rollback();
905
906 void post_ddl();
907
908 private:
909 // The current thread.
910 THD *m_thd{nullptr};
911
912 // Handlerton pointer to table's engine begin created.
913 const handlerton *m_hton{nullptr};
914
915 // Schema and table name being created.
918};
919
920struct PS_PARAM;
921
922/**
923 @class THD
924 For each client connection we create a separate thread with THD serving as
925 a thread/connection descriptor
926*/
927
928class THD : public MDL_context_owner,
929 public Query_arena,
930 public Open_tables_state {
931 public:
932 /**
933 Controlled memory stats for this session.
934 This member is the first in THD,
935 to initialize Thd_mem_cnt() before allocating more memory.
936 */
938
939 private:
940 bool is_stmt_prepare() const = delete;
943 inline bool is_regular() const = delete;
944
945 public:
947
948 /**
949 MARK_COLUMNS_NONE: Means mark_used_columns is not set and no indicator to
950 handler of fields used is set
951 MARK_COLUMNS_READ: Means a bit in read set is set to inform handler
952 that the field is to be read. Update covering_keys
953 and merge_keys too.
954 MARK_COLUMNS_WRITE: Means a bit is set in write set to inform handler
955 that it needs to update this field in write_row
956 and update_row.
957 MARK_COLUMNS_TEMP: Mark bit in read set, but ignore key sets.
958 Used by filesort().
959 */
961 /**
962 Used by Item::check_column_privileges() to tell which privileges
963 to check for.
964 Set to ~0ULL before starting to resolve a statement.
965 Set to desired privilege mask before calling a resolver function that will
966 call Item::check_column_privileges().
967 After use, restore previous value as current value.
968 */
970
971 private:
972 /**
973 The lex to hold the parsed tree of conventional (non-prepared) queries.
974 Whereas for prepared and stored procedure statements we use an own lex
975 instance for each new query, for conventional statements we reuse
976 the same lex. (@see dispatch_sql_command for details).
977 */
978 std::unique_ptr<LEX> main_lex;
979
980 public:
981 LEX *lex; // parse tree descriptor
982 dd::cache::Dictionary_client *dd_client() const // Get the dictionary client.
983 {
984 return m_dd_client.get();
985 }
986
987 private:
988 std::unique_ptr<dd::cache::Dictionary_client> m_dd_client;
989
990 /**
991 The query associated with this statement.
992 */
995 std::atomic<bool> m_safe_to_display;
996
997 /**
998 Currently selected catalog.
999 */
1000
1002 /**
1003 Name of the current (default) database.
1004
1005 If there is the current (default) database, "db" contains its name. If
1006 there is no current (default) database, "db" is NULL and "db_length" is
1007 0. In other words, "db", "db_length" must either be NULL, or contain a
1008 valid database name.
1009
1010 @note this attribute is set and allocated by the slave SQL thread (for
1011 the THD of that thread); that thread is (and must remain, for now) the
1012 only responsible for freeing this member.
1013 */
1015
1016 /**
1017 Resource group context indicating the current resource group
1018 and the name of the resource group to switch to during execution
1019 of a query.
1020 */
1022
1023 /**
1024 In some cases, we may want to modify the query (i.e. replace
1025 passwords with their hashes before logging the statement etc.).
1026
1027 In case the query was rewritten, the original query will live in
1028 m_query_string, while the rewritten query lives in rewritten_query.
1029 If rewritten_query is empty, m_query_string should be logged.
1030 If rewritten_query is non-empty, the rewritten query it contains
1031 should be used in logs (general log, slow query log, binary log).
1032
1033 Currently, password obfuscation is the only rewriting we do; more
1034 may follow at a later date, both pre- and post parsing of the query.
1035 Rewriting of binloggable statements must preserve all pertinent
1036 information.
1037
1038 Similar restrictions as for m_query_string (see there) hold for locking:
1039 - Value may only be (re)set from owning thread (current_thd)
1040 - Value must be modified using (reset|swap)_rewritten_query().
1041 Doing so will protect the update with LOCK_thd_query.
1042 - The owner (current_thd) may read the value without holding the lock.
1043 - Other threads may read the value, but must hold LOCK_thd_query to do so.
1044 */
1046
1047 public:
1048 /* Used to execute base64 coded binlog events in MySQL server */
1050 /* Slave applier execution context */
1052
1053 /* Is transaction commit still pending */
1055
1056 /**
1057 The function checks whether the thread is processing queries from binlog,
1058 as automatically generated by mysqlbinlog.
1059
1060 @return true when the thread is a binlog applier
1061 */
1062 bool is_binlog_applier() const {
1063 return rli_fake && variables.pseudo_replica_mode;
1064 }
1065
1066 /**
1067 When the thread is a binlog or slave applier it detaches the engine
1068 ha_data associated with it and memorizes the fact of that.
1069 */
1071
1072 /**
1073 When the thread is a binlog or slave applier it reattaches the engine
1074 ha_data associated with it and memorizes the fact of that.
1075 */
1077
1078 /**
1079 @return true when the current binlog (rli_fake) or slave (rli_slave)
1080 applier thread has detached the engine ha_data,
1081 see @c rpl_detach_engine_ha_data.
1082 @note The detached transaction applier resets a memo
1083 mark at once with this check.
1084 */
1085 bool is_engine_ha_data_detached() const;
1086
1088 /*
1089 Constant for THD::where initialization in the beginning of every query.
1090
1091 It's needed because we do not save/restore THD::where normally during
1092 primary (non subselect) query execution.
1093 */
1094 static const char *const DEFAULT_WHERE;
1095
1096 /** Additional network instrumentation for the server only. */
1098 /**
1099 Hash for user variables.
1100 User variables are per session,
1101 but can also be monitored outside of the session,
1102 so a lock is needed to prevent race conditions.
1103 Protected by @c LOCK_thd_data.
1104 */
1107 struct rand_struct rand; // used for authentication
1108 struct System_variables variables; // Changeable local variables
1109 struct System_status_var status_var; // Per thread statistic vars
1110 struct System_status_var
1111 *copy_status_var_ptr; // A copy of the statistic vars asof the start of
1112 // the query
1113 struct System_status_var *initial_status_var; /* used by show status */
1114 // has status_var already been added to global_status_var?
1116
1117 /**
1118 Session's connection attributes for the connected client
1119 */
1120 std::vector<char> m_connection_attributes;
1121
1122 /**
1123 Current query cost.
1124 @sa system_status_var::last_query_cost
1125 */
1127 /**
1128 Current query partial plans.
1129 @sa system_status_var::last_query_partial_plans
1130 */
1132
1133 /**
1134 Clear the query costs attributes for the current query.
1135 */
1139 }
1140
1141 /**
1142 Save the current query costs attributes in
1143 the thread session status.
1144 Use this method only after the query execution is completed,
1145 so that
1146 @code SHOW SESSION STATUS like 'last_query_%' @endcode
1147 @code SELECT * from performance_schema.session_status
1148 WHERE VARIABLE_NAME like 'last_query_%' @endcode
1149 actually reports the previous query, not itself.
1150 */
1152 assert(!status_var_aggregated);
1155 }
1156
1157 /**
1158 Clear copy of the status variables.
1159 */
1161
1162 /**
1163 Copy status variables into a structure pointed by the specified pointer and
1164 keep track of the pointer internally.
1165
1166 @param dst_var status variable structure pointer, where internal status
1167 variables are copied into.
1168 */
1170 *dst_var = status_var;
1171 copy_status_var_ptr = dst_var;
1172 }
1173
1174 /**
1175 Copy status variables into a structure pointed by the specified pointer
1176 passed into copy_status_var method call.
1177 */
1179 if (copy_status_var_ptr) {
1180 /* Reset for values at start of next statement */
1182 }
1183 }
1184
1185 THR_LOCK_INFO lock_info; // Locking info of this thread
1186 /**
1187 Protects THD data accessed from other threads.
1188 The attributes protected are:
1189 - thd->is_killable (used by KILL statement and shutdown).
1190 - thd->user_vars (user variables, inspected by monitoring)
1191 Is locked when THD is deleted.
1192 */
1194
1195 /**
1196 Protects THD::m_query_string. No other mutexes should be locked
1197 while having this mutex locked.
1198 */
1200
1201 /**
1202 Protects THD::variables while being updated. This should be taken inside
1203 of LOCK_thd_data and outside of LOCK_global_system_variables.
1204 */
1206
1207#ifndef NDEBUG
1209#endif
1210
1211 /**
1212 Protects THD::m_protocol when it gets removed in x plugin.
1213 */
1215
1216 /**
1217 Protects THD::m_security_ctx from inspection (e.g. by old-style
1218 SHOW PROCESSLIST) while COM_CHANGE_USER changes the context.
1219 */
1221
1222 /**
1223 Protects query plan (SELECT/UPDATE/DELETE's) from being freed/changed
1224 while another thread explains it. Following structures are protected by
1225 this mutex:
1226 THD::Query_plan
1227 Modification_plan
1228 Query_block::join
1229 JOIN::plan_state
1230 Tree of Query_expression after THD::Query_plan was set till
1231 THD::Query_plan cleanup
1232 JOIN_TAB::select->quick
1233 Code that changes objects above should take this mutex.
1234 Explain code takes this mutex to block changes to named structures to
1235 avoid crashes in following functions:
1236 explain_single_table_modification
1237 explain_query
1238 Sql_cmd_explain_other_thread::execute
1239 When doing EXPLAIN CONNECTION:
1240 all explain code assumes that this mutex is already taken.
1241 When doing ordinary EXPLAIN:
1242 the mutex does need to be taken (no need to protect reading my own data,
1243 moreover EXPLAIN CONNECTION can't run on an ordinary EXPLAIN).
1244 */
1245 private:
1247
1248 /**
1249 Keep a cached value saying whether the connection is alive. Update when
1250 pushing, popping or getting the protocol. Used by
1251 information_schema.processlist to avoid locking mutexes that might
1252 affect performance.
1253 */
1255
1256 public:
1257 /// Locks the query plan of this THD
1260
1261 /** All prepared statements of this connection. */
1263 /*
1264 A pointer to the stack frame of handle_one_connection(),
1265 which is called first in the thread for handling a client
1266 */
1267 const char *thread_stack;
1268
1269 /**
1270 @note
1271 Some members of THD (currently 'Statement::db',
1272 'catalog' and 'query') are set and allocated by the slave SQL thread
1273 (for the THD of that thread); that thread is (and must remain, for now)
1274 the only responsible for freeing these 3 members. If you add members
1275 here, and you add code to set them in replication, don't forget to
1276 free_them_and_set_them_to_0 in replication properly. For details see
1277 the 'err:' label of the handle_slave_sql() in sql/slave.cc.
1278
1279 @see handle_slave_sql
1280 */
1281
1284
1288
1289 /**
1290 @note
1291 The optional password validation plugin doesn't have any API for
1292 temporally disable its functionality for a particular session.
1293 To get around this issue we introduce a boolean variable in the THD
1294 which we check before each call to the password validation plugin.
1295 Password validation is invoked from within the authentication plugin
1296 in the generate_authentication_string() method.
1297
1298 @see generate_authentication_string
1299 */
1301
1302 std::unique_ptr<Protocol_text> protocol_text; // Normal protocol
1303 std::unique_ptr<Protocol_binary> protocol_binary; // Binary protocol
1304
1305 const Protocol *get_protocol() const { return m_protocol; }
1306
1308
1310#ifndef NDEBUG
1311 if (current_thd != this) {
1312 /*
1313 When inspecting this thread from monitoring,
1314 the monitoring thread MUST lock LOCK_thd_data,
1315 to be allowed to safely inspect SSL status variables.
1316 */
1318 }
1319#endif
1320 return m_SSL;
1321 }
1322
1323 /**
1324 Asserts that the protocol is of type text or binary and then
1325 returns the m_protocol casted to Protocol_classic. This method
1326 is needed to prevent misuse of pluggable protocols by legacy code
1327 */
1329 assert(is_classic_protocol());
1330 return pointer_cast<const Protocol_classic *>(m_protocol);
1331 }
1332
1334
1335 private:
1336 Protocol *m_protocol; // Current protocol
1337 /**
1338 SSL data attached to this connection.
1339 This is an opaque pointer,
1340 When building with SSL, this pointer is non NULL
1341 only if the connection is using SSL.
1342 When building without SSL, this pointer is always NULL.
1343 The SSL data can be inspected to read per thread
1344 status variables,
1345 and this can be inspected while the thread is running.
1346 */
1347 SSL_handle m_SSL = {nullptr};
1348
1349 public:
1350 /**
1351 Query plan for EXPLAINable commands, should be locked with
1352 LOCK_query_plan before using.
1353 */
1355 private:
1356 THD *const thd;
1357 /// Original sql_command;
1359 /// LEX of topmost statement
1361 /// Query plan for UPDATE/DELETE/INSERT/REPLACE
1363 /// True if query is run in prepared statement
1364 bool is_ps;
1365
1366 explicit Query_plan(const Query_plan &); ///< not defined
1367 Query_plan &operator=(const Query_plan &); ///< not defined
1368
1369 public:
1370 /// Asserts that current_thd has locked this plan, if it does not own it.
1372#ifdef NDEBUG
1373 {}
1374#else
1375 ;
1376#endif
1377
1378 explicit Query_plan(THD *thd_arg)
1379 : thd(thd_arg),
1381 lex(nullptr),
1383 is_ps(false) {
1384 }
1385
1386 /**
1387 Set query plan.
1388
1389 @note This function takes THD::LOCK_query_plan mutex.
1390 */
1391 void set_query_plan(enum_sql_command sql_cmd, LEX *lex_arg, bool ps);
1392
1393 /*
1394 The 4 getters below expect THD::LOCK_query_plan to be already taken
1395 if called from another thread.
1396 */
1399 return sql_command;
1400 }
1401 LEX *get_lex() const {
1403 return lex;
1404 }
1407 return modification_plan;
1408 }
1409 bool is_ps_query() const {
1411 return is_ps;
1412 }
1413 bool is_single_table_plan() const;
1415
1417
1418 const LEX_CSTRING &catalog() const { return m_catalog; }
1419
1421
1422 private:
1424
1425 /*
1426 Points to info-string that we show in SHOW PROCESSLIST
1427 You are supposed to update thd->proc_info only if you have coded
1428 a time-consuming piece that MySQL can get stuck in for a long time.
1429
1430 Set it using the thd_proc_info(THD *thread, const char *message)
1431 macro/function.
1432
1433 This member is accessed and assigned without any synchronization.
1434 Therefore, it may point only to constant (statically
1435 allocated) strings, which memory won't go away over time.
1436 */
1437 const char *m_proc_info;
1438 /**
1439 Return the m_proc_info, possibly using the string of an older
1440 server release, according to @@terminology_use_previous.
1441
1442 @param sysvars Use the value of
1443 @@terminology_use_previous stored in this
1444 System_variables object.
1445
1446 @return The "proc_info", also known as "stage", of this thread.
1447 */
1448 const char *proc_info(const System_variables &sysvars) const;
1449
1450 public:
1451 // See comment in THD::enter_cond about why SUPPRESS_TSAN is needed.
1452 void enter_stage(const PSI_stage_info *stage, PSI_stage_info *old_stage,
1453 const char *calling_func, const char *calling_file,
1454 const unsigned int calling_line) SUPPRESS_TSAN;
1455 const char *proc_info() const { return m_proc_info; }
1456 /**
1457 Return the m_proc_info, possibly using the string of an older
1458 server release, according to
1459 @@session.terminology_use_previous.
1460
1461 @param invoking_thd Use
1462 @@session.terminology_use_previous of this session.
1463
1464 @return The "proc_info", also known as "stage", of this thread.
1465 */
1466 const char *proc_info_session(THD *invoking_thd) const {
1467 return proc_info(invoking_thd->variables);
1468 }
1471
1472 /*
1473 Used in error messages to tell user in what part of MySQL we found an
1474 error. E. g. when where= "having clause", if fix_fields() fails, user
1475 will know that the error was in having clause.
1476 */
1477 const char *where;
1478
1480
1484 /*
1485 A thread can hold named user-level locks. This variable
1486 contains granted tickets if a lock is present. See item_func.cc and
1487 chapter 'Miscellaneous functions', for functions GET_LOCK, RELEASE_LOCK.
1488 */
1491#ifndef NDEBUG
1492 uint dbug_sentry; // watch out for memory corruption
1493#endif
1495 /**
1496 Mutex protecting access to current_mutex and current_cond.
1497 */
1499 /**
1500 The mutex used with current_cond.
1501 @see current_cond
1502 */
1503 std::atomic<mysql_mutex_t *> current_mutex;
1504 /**
1505 Pointer to the condition variable the thread owning this THD
1506 is currently waiting for. If the thread is not waiting, the
1507 value is NULL. Set by THD::enter_cond().
1508
1509 If this thread is killed (shutdown or KILL stmt), another
1510 thread will broadcast on this condition variable so that the
1511 thread can be unstuck.
1512 */
1513 std::atomic<mysql_cond_t *> current_cond;
1514 /**
1515 Condition variable used for waiting by the THR_LOCK.c subsystem.
1516 */
1518
1519 /// @brief Enables ordering in ha_commit_low. Used in binlog::commit
1520 /// @note Additional requirements need to be met
1521 /// in order to invoke commit ordering in ha_commit_low
1522 /// @see is_ha_commit_low_invoking_commit_order
1524
1525 /// @brief Enables ordering in ha_commit_low. Used in binlog::commit
1526 /// @note Additional requirements need to be met
1527 /// in order to invoke commit ordering in ha_commit_low
1528 /// @see is_ha_commit_low_invoking_commit_order
1530
1531 /// @brief Obtains flag indicating whether additional ordering in the
1532 /// ha_commit_low function is enabled. If not, ordering will take place in
1533 /// binlog::commit
1534 /// @details Accessor for the m_is_low_level_commit_ordering_enabled
1535 /// @return When true, ha_commit_low may order this transaction
1537
1538 private:
1539 /// @brief Flag indicating whether additional ordering in the ha_commit_low
1540 /// function is enabled. If disabled, ordering will take place in
1541 /// binlog::commit. It is set up in binlog::commit
1543
1544 /**
1545 Type of current query: COM_STMT_PREPARE, COM_QUERY, etc.
1546 Set from first byte of the packet in do_command()
1547 */
1549
1550 private:
1552
1553 public:
1554 void set_admin_connection(bool admin) { m_is_admin_conn = admin; }
1555 bool is_admin_connection() const { return m_is_admin_conn; }
1556
1559 uint32 file_id; // for LOAD DATA INFILE
1560 /* remote (peer) port */
1562 struct timeval start_time;
1563 struct timeval user_time;
1564 /**
1565 Query start time, expressed in microseconds.
1566 */
1568
1569 private:
1570 /**
1571 Time spent waiting for TABLE locks and DATA locks.
1572 Expressed in microseconds.
1573 */
1575
1576 public:
1578 void inc_lock_usec(ulonglong usec);
1580 top = m_lock_usec;
1581 m_lock_usec = 0;
1582 }
1584
1585 /**
1586 Type of lock to be used for all DML statements, except INSERT, in cases
1587 when lock is not specified explicitly. Set to TL_WRITE or
1588 TL_WRITE_LOW_PRIORITY depending on whether low_priority_updates option is
1589 off or on.
1590 */
1592 /**
1593 Type of lock to be used for INSERT statement if lock is not specified
1594 explicitly. Set to TL_WRITE_CONCURRENT_INSERT or TL_WRITE_LOW_PRIORITY
1595 depending on whether low_priority_updates option is off or on.
1596 */
1598
1599 /* <> 0 if we are inside of trigger or stored function. */
1601
1602 /**
1603 Used by fill_status() to avoid acquiring LOCK_status mutex twice
1604 when this function is called recursively (e.g. queries
1605 that contains SELECT on I_S.GLOBAL_STATUS with subquery on the
1606 same I_S table).
1607 Incremented each time fill_status() function is entered and
1608 decremented each time before it returns from the function.
1609 */
1612
1613 private:
1614 /* container for handler's private per-connection data */
1616
1617 public:
1618 /**
1619 Retrieve Ha_data for a given slot. Each handler has a fixed slot nr.
1620 */
1621 Ha_data *get_ha_data(int slot) { return &ha_data[slot]; }
1622
1623 /**
1624 Copy ha_data into the provided argument. Used by Attachble_transaction.
1625 */
1627 /*
1628 Protect with LOCK_thd_data avoid accessing ha_data while it
1629 is being modified.
1630 */
1631 mysql_mutex_lock(&this->LOCK_thd_data);
1632 *backup = ha_data;
1633 mysql_mutex_unlock(&this->LOCK_thd_data);
1634 }
1635
1636 /**
1637 Restore ha_data from the provided backup copy.
1638 Used by Attachable_Transaction.
1639 */
1642 /*
1643 Protect with LOCK_thd_data to avoid e.g. KILL CONNECTION
1644 reading ha_data while it is being modified.
1645 */
1646 mysql_mutex_lock(&this->LOCK_thd_data);
1647 ha_data = backup;
1648 mysql_mutex_unlock(&this->LOCK_thd_data);
1649 }
1650
1651 /*
1652 Position of first event in Binlog
1653 *after* last event written by this
1654 thread.
1655 */
1657 void set_next_event_pos(const char *_filename, ulonglong _pos);
1658 void clear_next_event_pos();
1659
1660 /*
1661 Ptr to row event extra data to be written to Binlog /
1662 received from Binlog.
1663
1664 */
1666
1668
1669 /**
1670 * @brief Configure size of binlog transaction cache. Used to configure the
1671 * size of an individual cache, normally to a value that differs from the
1672 * default `binlog_cache_size` which controls the size otherwise.
1673 *
1674 * @note Assumes that the binlog cache manager already exist (i.e created
1675 * by call to binlog_setup_trx_data()) and is empty.
1676 *
1677 * @param new_size The new size of cache. Value exceeding
1678 * `max_binlog_cache_size` will be clamped and warning logged. Value must be
1679 * a multiple of IO_SIZE which is the block size for all binlog cache size
1680 * related variables.
1681 *
1682 * @return true if new cache size can't be configured, in that case the cache
1683 * is not usable.
1684 */
1685 bool binlog_configure_trx_cache_size(ulong new_size);
1686
1687 /*
1688 Public interface to write RBR events to the binlog
1689 */
1690 int binlog_write_table_map(TABLE *table, bool is_transactional,
1691 bool binlog_rows_query);
1692 int binlog_write_row(TABLE *table, bool is_transactional,
1693 const uchar *new_data,
1694 const unsigned char *extra_row_info);
1695 int binlog_delete_row(TABLE *table, bool is_transactional,
1696 const uchar *old_data,
1697 const unsigned char *extra_row_info);
1698 int binlog_update_row(TABLE *table, bool is_transactional,
1699 const uchar *old_data, const uchar *new_data,
1700 const uchar *extra_row_info);
1701 void set_server_id(uint32 sid) { server_id = sid; }
1702
1703 /*
1704 Member functions to handle pending event for row-level logging.
1705 */
1706 template <class RowsEventT>
1708 TABLE *table, uint32 serv_id, size_t needed, bool is_transactional,
1709 const unsigned char *extra_row_info, uint32 source_part_id = INT_MAX);
1710 Rows_log_event *binlog_get_pending_rows_event(bool is_transactional) const;
1711 inline int binlog_flush_pending_rows_event(bool stmt_end) {
1712 return (binlog_flush_pending_rows_event(stmt_end, false) ||
1713 binlog_flush_pending_rows_event(stmt_end, true));
1714 }
1715 int binlog_flush_pending_rows_event(bool stmt_end, bool is_transactional);
1716
1717 /**
1718 Determine the binlog format of the current statement.
1719
1720 @retval 0 if the current statement will be logged in statement
1721 format.
1722 @retval nonzero if the current statement will be logged in row
1723 format.
1724 */
1729 }
1730
1731 /**
1732 Determine if binlogging is currently disabled for this session.
1733
1734 There are two ways that binlogging can be disabled:
1735
1736 1. The binary log file is closed (globally). This can happen for
1737 two reasons: either --skip-log-bin was used on the command line,
1738 or a binlog write error happened when binlog_error_action=IGNORE_ERROR.
1739
1740 2. The binary log is disabled on session level. This can happen for
1741 two reasons: either the user has set @@session.sql_log_bin = 0,
1742 or the server code has internally disabled the binary log (by
1743 either setting thd->variables.option_bits &= ~OPTION_BIN_LOG or
1744 creating a Disable_binlog_guard object).
1745
1746 Even if this function returns true and the binary log is disabled,
1747 it is possible that the statement will be written to the binary log,
1748 in the cases where the server has merely temporarily disabled binary
1749 logging.
1750
1751 And even if this function returns false and the binary log is
1752 enabled, it is possible that the statement will not be written to
1753 the binary log, e.g. in case it is a no-op, it fails, it gets rolled
1754 back, or some other session closes the binary log due to a write
1755 error when using binlog_error_action=IGNORE_ERROR.
1756
1757 @retval true The binary log is currently disabled for the statement.
1758
1759 @retval false The binary log is currently enabled for the statement.
1760 */
1762
1763 /**
1764 Determine if binlogging is currently disabled for this session.
1765 If the binary log is disabled for this thread (either by log_bin=0 or
1766 sql_log_bin=0 or by log_replica_updates=0 for a slave thread), then the
1767 statement will not be written to the binary log.
1768
1769 @retval true The binary log is currently disabled for the statement.
1770
1771 @retval false The binary log is currently enabled for the statement.
1772 */
1774
1775 /**
1776 Checks whether binlog caches are disabled (binlog does not cache data) or
1777 empty in case binloggging is enabled in the current call to this function.
1778 This function may be safely called in case binlogging is disabled.
1779 @retval true binlog local caches are empty or disabled and binlogging is
1780 enabled
1781 @retval false binlog local caches are enabled and contain data or binlogging
1782 is disabled
1783 */
1785
1786 /**
1787 Determine if binloging is enabled in row format and write set extraction is
1788 enabled for this session
1789 @retval true if is enable
1790 @retval false otherwise
1791 */
1793
1794 /** Tells whether the given optimizer_switch flag is on */
1796 return (variables.optimizer_switch & flag);
1797 }
1798
1804
1807 }
1808
1812 }
1813
1817 }
1818
1820 return m_binlog_filter_state;
1821 }
1822
1823 /** Holds active timer object */
1825 /**
1826 After resetting(cancelling) timer, current timer object is cached
1827 with timer_cache timer to reuse.
1828 */
1830
1831 private:
1832 /*
1833 Indicates that the command which is under execution should ignore the
1834 'read_only' and 'super_read_only' options.
1835 */
1837 /**
1838 Indicate if the current statement should be discarded
1839 instead of written to the binlog.
1840 This is used to discard special statements, such as
1841 DML or DDL that affects only 'local' (non replicated)
1842 tables, such as performance_schema.*
1843 */
1845
1846 /**
1847 Indicates the format in which the current statement will be
1848 logged. This can only be set from @c decide_logging_format().
1849 */
1851
1852 /**
1853 Bit field for the state of binlog warnings.
1854
1855 The first Lex::BINLOG_STMT_UNSAFE_COUNT bits list all types of
1856 unsafeness that the current statement has.
1857
1858 This must be a member of THD and not of LEX, because warnings are
1859 detected and issued in different places (@c
1860 decide_logging_format() and @c binlog_query(), respectively).
1861 Between these calls, the THD->lex object may change; e.g., if a
1862 stored routine is invoked. Only THD persists between the calls.
1863 */
1865
1866 /*
1867 Number of outstanding table maps, i.e., table maps in the
1868 transaction cache.
1869 */
1871 /*
1872 MTS: db names listing to be updated by the query databases
1873 */
1875
1876 /**
1877 The binary log position of the transaction.
1878
1879 The file and position are zero if the current transaction has not
1880 been written to the binary log.
1881
1882 @see set_trans_pos
1883 @see get_trans_pos
1884
1885 @todo Similar information is kept in the patch for BUG#11762277
1886 and by the master/slave heartbeat implementation. We should merge
1887 these positions instead of maintaining three different ones.
1888 */
1889 /**@{*/
1890 const char *m_trans_log_file;
1893 /**@}*/
1894 // NOTE: Ideally those two should be in Protocol,
1895 // but currently its design doesn't allow that.
1896 NET net; // client connection descriptor
1897 String packet; // dynamic buffer for network I/O
1898 public:
1899 const NET *get_net() const { return &net; }
1900
1902
1904
1907 }
1908
1909 void issue_unsafe_warnings();
1910
1913
1914 /*
1915 MTS: accessor to binlog_accessed_db_names list
1916 */
1919 }
1920
1921 /* MTS: method inserts a new unique name into binlog_updated_dbs */
1922 void add_to_binlog_accessed_dbs(const char *db);
1923
1924 bool is_applier_thread() const {
1927 }
1928
1929 private:
1930 std::unique_ptr<Transaction_ctx> m_transaction;
1931
1932 /** An utility struct for @c Attachable_trx */
1936 void backup(THD *thd);
1937 void restore(THD *thd);
1938
1939 /// SQL-command.
1941
1943
1944 /// Open-tables state.
1946
1947 /// SQL_MODE.
1949
1950 /// Transaction isolation level.
1952
1953 /// Ha_data array.
1955
1956 /// Transaction_ctx instance.
1958
1959 /// Transaction read-only state.
1961
1962 /// THD options.
1964
1965 /// Current transaction instrumentation.
1967
1968 /// Server status flags.
1970
1971 /// THD::in_lock_tables value.
1973
1974 /**
1975 Current time zone (i.e. @@session.time_zone) usage indicator.
1976
1977 Saving it allows data-dictionary code to read timestamp values
1978 as datetimes from system tables without disturbing user's statement.
1979
1980 TODO: We need to change DD code not to use @@session.time_zone at all and
1981 stick to UTC for internal storage of timestamps in DD objects.
1982 */
1984
1985 /**
1986 Transaction rollback request flag.
1987
1988 InnoDB can try to access table definition while rolling back regular
1989 transaction. So we need to be able to start attachable transaction
1990 without being affected by, and affecting, the rollback state of regular
1991 transaction.
1992 */
1994 };
1995
1996 public:
1998
1999 private:
2000 /**
2001 Class representing read-only attachable transaction, encapsulates
2002 knowledge how to backup state of current transaction, start
2003 read-only attachable transaction in SE, finalize it and then restore
2004 state of original transaction back. Also serves as a base class for
2005 read-write attachable transaction implementation.
2006 */
2008 public:
2009 Attachable_trx(THD *thd, Attachable_trx *prev_trx);
2010 virtual ~Attachable_trx();
2012 return m_prev_attachable_trx;
2013 }
2014 virtual bool is_read_only() const { return true; }
2015
2016 protected:
2017 /// THD instance.
2019
2021
2022 /**
2023 Attachable_trx which was active for the THD before when this
2024 transaction was started (NULL in most cases).
2025 */
2027
2028 /// Transaction state data.
2030
2031 private:
2034 };
2035
2036 /**
2037 A derived from THD::Attachable_trx class allows updates in
2038 the attachable transaction. Callers of the class methods must
2039 make sure the attachable_rw won't cause deadlock with the main transaction.
2040 The destructor does not invoke ha_commit_{stmt,trans} nor ha_rollback_trans
2041 on purpose.
2042 Burden to terminate the read-write instance also lies on the caller!
2043 In order to use this interface it *MUST* prove that no side effect to
2044 the global transaction state can be inflicted by a chosen method.
2045
2046 This class is being used only by class Gtid_table_access_context by
2047 replication and by dd::info_schema::Table_statistics.
2048 */
2049
2051 public:
2052 bool is_read_only() const override { return false; }
2053 explicit Attachable_trx_rw(THD *thd);
2054
2055 private:
2058 };
2059
2061
2062 public:
2064
2065 const Transaction_ctx *get_transaction() const { return m_transaction.get(); }
2066
2067 /**
2068 Changes the Transaction_ctx instance within THD-object. The previous
2069 Transaction_ctx instance is destroyed.
2070
2071 @note this is a THD-internal operation which MUST NOT be used outside.
2072
2073 @param transaction_ctx new Transaction_ctx instance to be associated with
2074 the THD-object.
2075 */
2076 void set_transaction(Transaction_ctx *transaction_ctx);
2077
2079
2080 Vio *active_vio = {nullptr};
2081
2082 /* Active network vio for clone remote connection. */
2083 Vio *clone_vio = {nullptr};
2084
2085 /**
2086 This is used to track transient changes to items during optimization of a
2087 prepared statement/stored procedure. Change objects are created by
2088 change_item_tree() in memory root of THD, and freed by
2089 rollback_item_tree_changes(). Changes recorded here are rolled back at
2090 the end of execution.
2091
2092 Transient changes require the following conditions:
2093 - The statement is not regular (ie. it is prepared or part of SP).
2094 - The change is performed outside preparation code (ie. it is
2095 performed during the optimization phase).
2096 - The change is applied to non-transient items (ie. items that have
2097 been created before or during preparation, not items that have been
2098 created in the optimization phase. Notice that the tree of AND/OR
2099 conditions is always as transient objects during optimization.
2100 Doing this should be quite harmless, though.)
2101 change_item_tree() only records changes to non-regular statements.
2102 It is also ensured that no changes are applied in preparation phase by
2103 asserting that the list of items is empty (see Sql_cmd_dml::prepare()).
2104 Other constraints are not enforced, in particular care must be taken
2105 so that all changes made during optimization to non-transient Items in
2106 non-regular statements must be recorded.
2107 */
2109
2110 /*
2111 A permanent memory area of the statement. For conventional
2112 execution, the parsed tree and execution runtime reside in the same
2113 memory root. In this case stmt_arena points to THD. In case of
2114 a prepared statement or a stored procedure statement, thd->mem_root
2115 conventionally points to runtime memory, and thd->stmt_arena
2116 points to the memory of the PS/SP, where the parsed tree of the
2117 statement resides. Whenever you need to perform a permanent
2118 transformation of a parsed tree, you should allocate new memory in
2119 stmt_arena, to allow correct re-execution of PS/SP.
2120 Note: in the parser, stmt_arena == thd, even for PS/SP.
2121 */
2123
2124 /*
2125 map for tables that will be updated for a multi-table update query
2126 statement, for other query statements, this will be zero.
2127 */
2129
2130 /* Tells if LAST_INSERT_ID(#) was called for the current statement */
2132 /*
2133 ALL OVER THIS FILE, "insert_id" means "*automatically generated* value for
2134 insertion into an auto_increment column".
2135 */
2136 /*
2137 This is the first autogenerated insert id which was *successfully*
2138 inserted by the previous statement (exactly, if the previous statement
2139 didn't successfully insert an autogenerated insert id, then it's the one
2140 of the statement before, etc).
2141 It can also be set by SET LAST_INSERT_ID=# or SELECT LAST_INSERT_ID(#).
2142 It is returned by LAST_INSERT_ID().
2143 */
2145 /*
2146 Variant of the above, used for storing in statement-based binlog. The
2147 difference is that the one above can change as the execution of a stored
2148 function progresses, while the one below is set once and then does not
2149 change (which is the value which statement-based binlog needs).
2150 */
2152 /*
2153 This is the first autogenerated insert id which was *successfully*
2154 inserted by the current statement. It is maintained only to set
2155 first_successful_insert_id_in_prev_stmt when statement ends.
2156 */
2158 /*
2159 We follow this logic:
2160 - when stmt starts, first_successful_insert_id_in_prev_stmt contains the
2161 first insert id successfully inserted by the previous stmt.
2162 - as stmt makes progress, handler::insert_id_for_cur_row changes;
2163 every time get_auto_increment() is called,
2164 auto_inc_intervals_in_cur_stmt_for_binlog is augmented with the
2165 reserved interval (if statement-based binlogging).
2166 - at first successful insertion of an autogenerated value,
2167 first_successful_insert_id_in_cur_stmt is set to
2168 handler::insert_id_for_cur_row.
2169 - when stmt goes to binlog,
2170 auto_inc_intervals_in_cur_stmt_for_binlog is binlogged if
2171 non-empty.
2172 - when stmt ends, first_successful_insert_id_in_prev_stmt is set to
2173 first_successful_insert_id_in_cur_stmt.
2174 */
2175 /*
2176 stmt_depends_on_first_successful_insert_id_in_prev_stmt is set when
2177 LAST_INSERT_ID() is used by a statement.
2178 If it is set, first_successful_insert_id_in_prev_stmt_for_binlog will be
2179 stored in the statement-based binlog.
2180 This variable is CUMULATIVE along the execution of a stored function or
2181 trigger: if one substatement sets it to 1 it will stay 1 until the
2182 function/trigger ends, thus making sure that
2183 first_successful_insert_id_in_prev_stmt_for_binlog does not change anymore
2184 and is propagated to the caller for binlogging.
2185 */
2187 /*
2188 List of auto_increment intervals reserved by the thread so far, for
2189 storage in the statement-based binlog.
2190 Note that its minimum is not first_successful_insert_id_in_cur_stmt:
2191 assuming a table with an autoinc column, and this happens:
2192 INSERT INTO ... VALUES(3);
2193 SET INSERT_ID=3; INSERT IGNORE ... VALUES (NULL);
2194 then the latter INSERT will insert no rows
2195 (first_successful_insert_id_in_cur_stmt == 0), but storing "INSERT_ID=3"
2196 in the binlog is still needed; the list's minimum will contain 3.
2197 This variable is cumulative: if several statements are written to binlog
2198 as one (stored functions or triggers are used) this list is the
2199 concatenation of all intervals reserved by all statements.
2200 */
2202 /* Used by replication and SET INSERT_ID */
2204 /*
2205 There is BUG#19630 where statement-based replication of stored
2206 functions/triggers with two auto_increment columns breaks.
2207 We however ensure that it works when there is 0 or 1 auto_increment
2208 column; our rules are
2209 a) on master, while executing a top statement involving substatements,
2210 first top- or sub- statement to generate auto_increment values wins the
2211 exclusive right to see its values be written to binlog (the write
2212 will be done by the statement or its caller), and the losers won't see
2213 their values be written to binlog.
2214 b) on slave, while replicating a top statement involving substatements,
2215 first top- or sub- statement to need to read auto_increment values from
2216 the master's binlog wins the exclusive right to read them (so the losers
2217 won't read their values from binlog but instead generate on their own).
2218 a) implies that we mustn't backup/restore
2219 auto_inc_intervals_in_cur_stmt_for_binlog.
2220 b) implies that we mustn't backup/restore auto_inc_intervals_forced.
2221
2222 If there are more than 1 auto_increment columns, then intervals for
2223 different columns may mix into the
2224 auto_inc_intervals_in_cur_stmt_for_binlog list, which is logically wrong,
2225 but there is no point in preventing this mixing by preventing intervals
2226 from the secondly inserted column to come into the list, as such
2227 prevention would be wrong too.
2228 What will happen in the case of
2229 INSERT INTO t1 (auto_inc) VALUES(NULL);
2230 where t1 has a trigger which inserts into an auto_inc column of t2, is
2231 that in binlog we'll store the interval of t1 and the interval of t2 (when
2232 we store intervals, soon), then in slave, t1 will use both intervals, t2
2233 will use none; if t1 inserts the same number of rows as on master,
2234 normally the 2nd interval will not be used by t1, which is fine. t2's
2235 values will be wrong if t2's internal auto_increment counter is different
2236 from what it was on master (which is likely). In 5.1, in mixed binlogging
2237 mode, row-based binlogging is used for such cases where two
2238 auto_increment columns are inserted.
2239 */
2243 }
2246 /* It's the first time we read it */
2250 }
2252 }
2259 }
2260
2261 /*
2262 Used by Intvar_log_event::do_apply_event() and by "SET INSERT_ID=#"
2263 (mysqlbinlog). We'll soon add a variant which can take many intervals in
2264 argument.
2265 */
2267 auto_inc_intervals_forced.clear(); // in case of multiple SET INSERT_ID
2268 auto_inc_intervals_forced.append(next_id, ULLONG_MAX, 0);
2269 }
2270
2271 /**
2272 Stores the result of the FOUND_ROWS() function. Set at query end, stable
2273 throughout the query.
2274 */
2276 /**
2277 Dynamic, collected and set also in subqueries. Not stable throughout query.
2278 previous_found_rows is a snapshot of this take at query end making it
2279 stable throughout the next query, see update_previous_found_rows.
2280 */
2282
2283 /*
2284 Indicate if the gtid_executed table is being operated implicitly
2285 within current transaction. This happens because we are inserting
2286 a GTID specified through SET GTID_NEXT by user client or
2287 slave SQL thread/workers.
2288 */
2290 /*
2291 Indicate that a sub-statement is being operated implicitly
2292 within current transaction.
2293 As we don't want that this implicit sub-statement to consume the
2294 GTID of the actual transaction, we set it true at the beginning of
2295 the sub-statement and set it false again after "committing" the
2296 sub-statement.
2297 When it is true, the applier will not save the transaction owned
2298 gtid into mysql.gtid_executed table before transaction prepare, as
2299 it does when binlog is disabled, or binlog is enabled and
2300 log_replica_updates is disabled.
2301 Also the flag is made to defer updates to the slave info table from
2302 intermediate commits by non-atomic DDL.
2303 Rpl_info_table::do_flush_info(), rpl_rli.h::is_atomic_ddl_commit_on_slave()
2304 uses this flag.
2305 */
2307
2308 private:
2309 /**
2310 Stores the result of ROW_COUNT() function.
2311
2312 ROW_COUNT() function is a MySQL extension, but we try to keep it
2313 similar to ROW_COUNT member of the GET DIAGNOSTICS stack of the SQL
2314 standard (see SQL99, part 2, search for ROW_COUNT). Its value is
2315 implementation defined for anything except INSERT, DELETE, UPDATE.
2316
2317 ROW_COUNT is assigned according to the following rules:
2318
2319 - In my_ok():
2320 - for DML statements: to the number of affected rows;
2321 - for DDL statements: to 0.
2322
2323 - In my_eof(): to -1 to indicate that there was a result set.
2324
2325 We derive this semantics from the JDBC specification, where int
2326 java.sql.Statement.getUpdateCount() is defined to (sic) "return the
2327 current result as an update count; if the result is a ResultSet
2328 object or there are no more results, -1 is returned".
2329
2330 - In my_error(): to -1 to be compatible with the MySQL C API and
2331 MySQL ODBC driver.
2332
2333 - For SIGNAL statements: to 0 per WL#2110 specification (see also
2334 sql_signal.cc comment). Zero is used since that's the "default"
2335 value of ROW_COUNT in the Diagnostics Area.
2336 */
2337
2338 longlong m_row_count_func; /* For the ROW_COUNT() function */
2339
2340 public:
2342
2343 inline void set_row_count_func(longlong row_count_func) {
2344 m_row_count_func = row_count_func;
2345 }
2346
2348
2349 private:
2350 /**
2351 Number of rows we actually sent to the client, including "synthetic"
2352 rows in ROLLUP etc.
2353 */
2355
2356 /**
2357 Number of rows read and/or evaluated for a statement. Used for
2358 slow log reporting.
2359
2360 An examined row is defined as a row that is read and/or evaluated
2361 according to a statement condition, including in
2362 create_sort_index(). Rows may be counted more than once, e.g., a
2363 statement including ORDER BY could possibly evaluate the row in
2364 filesort() before reading it for e.g. update.
2365 */
2367
2368 private:
2370
2371 public:
2372 void set_user_connect(USER_CONN *uc);
2373 const USER_CONN *get_user_connect() const { return m_user_connect; }
2374
2377
2379
2381
2383
2385
2386 public:
2388
2390
2392
2395
2404 void inc_status_sort_range();
2406 void inc_status_sort_scan();
2409
2411#if defined(ENABLED_PROFILING)
2412 std::unique_ptr<PROFILING> profiling;
2413#endif
2414
2415 /** Current stage progress instrumentation. */
2417 /** Current statement digest. */
2419 /** Current statement digest token array. */
2420 unsigned char *m_token_array;
2421 /** Top level statement digest. */
2423
2424 /** Current statement instrumentation. */
2426#ifdef HAVE_PSI_STATEMENT_INTERFACE
2427 /** Current statement instrumentation state. */
2429#endif /* HAVE_PSI_STATEMENT_INTERFACE */
2430
2431 /** Current transaction instrumentation. */
2433#ifdef HAVE_PSI_TRANSACTION_INTERFACE
2434 /** Current transaction instrumentation state. */
2436#endif /* HAVE_PSI_TRANSACTION_INTERFACE */
2437
2438 /** Idle instrumentation. */
2440#ifdef HAVE_PSI_IDLE_INTERFACE
2441 /** Idle instrumentation state. */
2443#endif /* HAVE_PSI_IDLE_INTERFACE */
2444 /** True if the server code is IDLE for this connection. */
2446
2447 /*
2448 Id of current query. Statement can be reused to execute several queries
2449 query_id is global in context of the whole MySQL server.
2450 ID is automatically generated from mutex-protected counter.
2451 It's used in handler code for various purposes: to check which columns
2452 from table are necessary for this select, to check if it's necessary to
2453 update auto-updatable fields (like auto_increment and timestamp).
2454 */
2456
2457 /* Statement id is thread-wide. This counter is used to generate ids */
2461 /**
2462 This counter is 32 bit because of the client protocol.
2463
2464 @note It is not meant to be used for my_thread_self(), see @c real_id for
2465 this.
2466
2467 @note Set to reserved_thread_id on initialization. This is a magic
2468 value that is only to be used for temporary THDs not present in
2469 the global THD list.
2470 */
2471 private:
2473
2474 public:
2475 /**
2476 Assign a value to m_thread_id by calling
2477 Global_THD_manager::get_new_thread_id().
2478 */
2479 void set_new_thread_id();
2484
2485 // Check if this THD belongs to a system thread.
2487
2488 // Check if this THD belongs to a dd bootstrap system thread.
2489 bool is_dd_system_thread() const {
2492 }
2493
2494 // Check if this THD belongs to the initialize system thread. The
2495 // initialize thread executes statements that are compiled into the
2496 // server.
2499 }
2500
2501 // Check if this THD is executing statements passed through a init file.
2504 }
2505
2506 // Check if this THD belongs to a bootstrap system thread. Note that
2507 // this thread type may execute statements submitted by the user.
2511 }
2512
2513 // Check if this THD belongs to a server upgrade thread. Server upgrade
2514 // threads execute statements that are compiled into the server.
2517 }
2518
2519 /*
2520 Current or next transaction isolation level.
2521 When a connection is established, the value is taken from
2522 @@session.tx_isolation (default transaction isolation for
2523 the session), which is in turn taken from @@global.tx_isolation
2524 (the global value).
2525 If there is no transaction started, this variable
2526 holds the value of the next transaction's isolation level.
2527 When a transaction starts, the value stored in this variable
2528 becomes "actual".
2529 At transaction commit or rollback, we assign this variable
2530 again from @@session.tx_isolation.
2531 The only statement that can otherwise change the value
2532 of this variable is SET TRANSACTION ISOLATION LEVEL.
2533 Its purpose is to effect the isolation level of the next
2534 transaction in this session. When this statement is executed,
2535 the value in this variable is changed. However, since
2536 this statement is only allowed when there is no active
2537 transaction, this assignment (naturally) only affects the
2538 upcoming transaction.
2539 At the end of the current active transaction the value is
2540 be reset again from @@session.tx_isolation, as described
2541 above.
2542 */
2544 /*
2545 Current or next transaction access mode.
2546 See comment above regarding tx_isolation.
2547 */
2549 /*
2550 Transaction cannot be rolled back must be given priority.
2551 When two transactions conflict inside InnoDB, the one with
2552 greater priority wins.
2553 */
2555 /*
2556 All transactions executed by this thread will have high
2557 priority mode, independent of tx_priority value.
2558 */
2560
2562
2563 // For user variables replication
2565 MEM_ROOT *user_var_events_alloc; /* Allocate above array elements here */
2566
2567 /**
2568 Used by MYSQL_BIN_LOG to maintain the commit queue for binary log
2569 group commit.
2570 */
2572
2573 /**
2574 The member is served for marking a query that CREATEs or ALTERs
2575 a table declared with a TIMESTAMP column as dependent on
2576 @@session.explicit_defaults_for_timestamp.
2577 Is set to true by parser, unset at the end of the query.
2578 Possible marking in checked by binary logger.
2579 */
2581
2582 /**
2583 Functions to set and get transaction position.
2584
2585 These functions are used to set the transaction position for the
2586 transaction written when committing this transaction.
2587 */
2588 /**@{*/
2589 void set_trans_pos(const char *file, my_off_t pos) {
2590 DBUG_TRACE;
2591 assert(((file == nullptr) && (pos == 0)) ||
2592 ((file != nullptr) && (pos != 0)));
2593 if (file) {
2594 DBUG_PRINT("enter", ("file: %s, pos: %llu", file, pos));
2595 // Only the file name should be used, not the full path
2599 assert(strlen(m_trans_log_file) <= FN_REFLEN);
2601 } else {
2602 m_trans_log_file = nullptr;
2603 m_trans_fixed_log_file = nullptr;
2604 }
2605
2606 m_trans_end_pos = pos;
2607 DBUG_PRINT("return",
2608 ("m_trans_log_file: %s, m_trans_fixed_log_file: %s, "
2609 "m_trans_end_pos: %llu",
2611 return;
2612 }
2613
2614 void get_trans_pos(const char **file_var, my_off_t *pos_var) const {
2615 DBUG_TRACE;
2616 if (file_var) *file_var = m_trans_log_file;
2617 if (pos_var) *pos_var = m_trans_end_pos;
2618 DBUG_PRINT("return",
2619 ("file: %s, pos: %llu", file_var ? *file_var : "<none>",
2620 pos_var ? *pos_var : 0));
2621 return;
2622 }
2623
2624 void get_trans_fixed_pos(const char **file_var, my_off_t *pos_var) const {
2625 DBUG_TRACE;
2626 if (file_var) *file_var = m_trans_fixed_log_file;
2627 if (pos_var) *pos_var = m_trans_end_pos;
2628 DBUG_PRINT("return",
2629 ("file: %s, pos: %llu", file_var ? *file_var : "<none>",
2630 pos_var ? *pos_var : 0));
2631 return;
2632 }
2633
2634 /**@}*/
2635
2636 /*
2637 Error code from committing or rolling back the transaction.
2638 */
2647
2648 /*
2649 Define durability properties that engines may check to
2650 improve performance.
2651 */
2653
2654 /*
2655 If checking this in conjunction with a wait condition, please
2656 include a check after enter_cond() if you want to avoid a race
2657 condition. For details see the implementation of awake(),
2658 especially the "broadcast" part.
2659 */
2662 KILL_CONNECTION = ER_SERVER_SHUTDOWN,
2663 KILL_QUERY = ER_QUERY_INTERRUPTED,
2664 KILL_TIMEOUT = ER_QUERY_TIMEOUT,
2665 KILLED_NO_VALUE /* means neither of the states */
2667 std::atomic<killed_state> killed;
2668
2669 /**
2670 Whether we are currently in the execution phase of an EXPLAIN ANALYZE query.
2671 If so, send_kill_message() won't actually set an error; we will add a
2672 warning near the end of the execution instead.
2673 */
2675
2676 /**
2677 When operation on DD tables is in progress then THD is set to kill immune
2678 mode.
2679 This member holds DD_kill_immunizer object created to make DD operations
2680 immune from the kill operations. Member also indicated whether THD is in
2681 kill immune mode or not.
2682 */
2684
2685 /* scramble - random string sent to client on handshake */
2687
2688 /// @todo: slave_thread is completely redundant, we should use 'system_thread'
2689 /// instead /sven
2691
2693
2694 private:
2695 /**
2696 Set to true if execution of the current compound statement
2697 can not continue. In particular, disables activation of
2698 CONTINUE or EXIT handlers of stored routines.
2699 Reset in the end of processing of the current user request, in
2700 @see mysql_reset_thd_for_next_command().
2701 */
2703
2704 public:
2705 /**
2706 Set by a storage engine to request the entire
2707 transaction (that possibly spans multiple engines) to
2708 rollback. Reset in ha_rollback.
2709 */
2711 /**
2712 true if we are in a sub-statement and the current error can
2713 not be safely recovered until we left the sub-statement mode.
2714 In particular, disables activation of CONTINUE and EXIT
2715 handlers inside sub-statements. E.g. if it is a deadlock
2716 error and requires a transaction-wide rollback, this flag is
2717 raised (traditionally, MySQL first has to close all the reads
2718 via @see handler::ha_index_or_rnd_end() and only then perform
2719 the rollback).
2720 Reset to false when we leave the sub-statement mode.
2721 */
2726 /**
2727 True if a slave error. Causes the slave to stop. Not the same
2728 as the statement execution error (is_error()), since
2729 a statement may be expected to return an error, e.g. because
2730 it returned an error on master, and this is OK on the slave.
2731 */
2733
2734 /** is set if some thread specific value(s) used in a statement. */
2736 /**
2737 is set if a statement accesses a temporary table created through
2738 CREATE TEMPORARY TABLE.
2739 */
2742 bool enable_slow_log; /* enable slow log for current statement */
2743 /* set during loop of derived table processing */
2745 // Set while parsing INFORMATION_SCHEMA system views.
2747
2748 /** Current SP-runtime context. */
2752
2753 /** number of name_const() substitutions, see sp_head.cc:subst_spvars() */
2755
2756 /* Used by the sys_var class to store temporary values */
2757 union {
2764
2765 struct {
2766 /*
2767 If true, mysql_bin_log::write(Log_event) call will not write events to
2768 binlog, and maintain 2 below variables instead (use
2769 mysql_bin_log.start_union_events to turn this on)
2770 */
2772 /*
2773 If true, at least one mysql_bin_log::write(Log_event) call has been
2774 made after last mysql_bin_log.start_union_events() call.
2775 */
2777 /*
2778 If true, at least one mysql_bin_log::write(Log_event e), where
2779 e.cache_stmt == true call has been made after last
2780 mysql_bin_log.start_union_events() call.
2781 */
2783
2784 /*
2785 'queries' (actually SP statements) that run under inside this binlog
2786 union have thd->query_id >= first_query_id.
2787 */
2790
2791 /**
2792 Internal parser state.
2793 Note that since the parser is not re-entrant, we keep only one parser
2794 state here. This member is valid only when executing code during parsing.
2795 */
2797
2799
2801
2802 /**
2803 Array of active audit plugins which have been used by this THD.
2804 This list is later iterated to invoke release_thd() on those
2805 plugins.
2806 */
2808 /**
2809 Array of bits indicating which audit classes have already been
2810 added to the list of audit plugins which are currently in use.
2811 */
2813
2814#if defined(ENABLED_DEBUG_SYNC)
2815 /* Debug Sync facility. See debug_sync.cc. */
2816 struct st_debug_sync_control *debug_sync_control;
2817#endif /* defined(ENABLED_DEBUG_SYNC) */
2818
2819 // We don't want to load/unload plugins for unit tests.
2821
2822 /*
2823 Audit API events are generated, when this flag is true. The flag
2824 is initially true, but it can be set false in some cases, e.g.
2825 Session Service's THDs are created with auditing disabled. Auditing
2826 is enabled on MYSQL_AUDIT_CONNECTION_CONNECT event.
2827 */
2829
2830 explicit THD(bool enable_plugins = true);
2831
2832 /*
2833 The THD dtor is effectively split in two:
2834 THD::release_resources() and ~THD().
2835
2836 We want to minimize the time we hold LOCK_thd_list,
2837 so when destroying a global thread, do:
2838
2839 thd->release_resources()
2840 Global_THD_manager::get_instance()->remove_thd();
2841 delete thd;
2842 */
2843 ~THD() override;
2844
2845 void release_resources();
2846 /**
2847 @returns true if THD resources are released.
2848 */
2849 bool release_resources_done() const;
2850 /**
2851 Check if THD is being disposed (i.e. m_thd_life_cycle_stage >=
2852 SCHEDULED_FOR_DISPOSAL)
2853
2854 Non-owner thread should acquire LOCK_thd_data to check THD state without
2855 getting into races.
2856
2857 @returns true of THD is being disposed.
2858 */
2859 bool is_being_disposed() const;
2860
2861 private:
2862 /**
2863 Represents life cycle stages of THD instance.
2864 Stage transition in THD clean up:
2865 1. ACTIVE -> ACTIVE_AND_CLEAN
2866
2867 Stage transition in THD disposal:
2868 1. ACTIVE -> SCHEDULED_FOR_DISPOSAL -> CLEANED_UP -> RESOURCES_RELEASED
2869 -> DISPOSED.
2870 2. ACTIVE_AND_CLEAN -> CLEANED_UP -> RESOURCES_RELEASED -> DISPOSED.
2871 */
2878 DISPOSED
2881 enum_thd_life_cycle_stages::ACTIVE};
2882
2883 /**
2884 Set THD in ACTIVE life stage to disposal stage.
2885
2886 To avoid race conditions with non-owner thread checking THD disposal state,
2887 LOCK_thd_data should be acquired before changing THD stage to disposal
2888 stage.
2889 */
2890 void start_disposal();
2891
2892 /**
2893 @returns true if THD is cleaned up.
2894 */
2895 bool is_cleanup_done();
2896 void cleanup(void);
2897
2898 void init(void);
2899
2900 public:
2901 /**
2902 Initialize memory roots necessary for query processing and (!)
2903 pre-allocate memory for it. We can't do that in THD constructor because
2904 there are use cases (acl_init, watcher threads,
2905 killing mysqld) where it's vital to not allocate excessive and not used
2906 memory. Note, that we still don't return error from init_query_mem_roots()
2907 if preallocation fails, we should notice that at the first call to
2908 alloc_root.
2909 */
2910 void init_query_mem_roots();
2911 void cleanup_connection(void);
2912 void cleanup_after_query();
2913 void store_globals();
2914 void restore_globals();
2915
2916 inline void set_active_vio(Vio *vio) {
2918 active_vio = vio;
2920 }
2921
2922 inline void set_ssl(Vio *vio) {
2924 m_SSL = (SSL *)vio->ssl_arg;
2926 }
2927
2928 inline void clear_active_vio() {
2930 active_vio = nullptr;
2931 m_SSL = nullptr;
2933 }
2934
2935 /** Set active clone network Vio for remote clone.
2936 @param[in] vio network vio */
2937 inline void set_clone_vio(Vio *vio) {
2939 clone_vio = vio;
2941 }
2942
2943 /** Clear clone network Vio for remote clone. */
2944 inline void clear_clone_vio() {
2946 clone_vio = nullptr;
2948 }
2949
2950 /** Check if clone network Vio is active. */
2951 inline bool check_clone_vio() {
2953 bool is_active = (clone_vio != nullptr);
2955 return (is_active);
2956 }
2957
2958 /** Shutdown clone vio, if active. */
2959 void shutdown_clone_vio();
2960
2962
2963 void shutdown_active_vio();
2964 void awake(THD::killed_state state_to_set);
2965
2966 /** Disconnect the associated communication endpoint. */
2967 void disconnect(bool server_shutdown = false);
2968
2970 /* The query can be logged in row format or in statement format. */
2972
2973 /* The query has to be logged in statement format. */
2975
2978
2979 int binlog_query(enum_binlog_query_type qtype, const char *query,
2980 size_t query_len, bool is_trans, bool direct,
2981 bool suppress_use, int errcode);
2982
2983 // Begin implementation of MDL_context_owner interface.
2984
2986 const PSI_stage_info *stage, PSI_stage_info *old_stage,
2987 const char *src_function, const char *src_file,
2988 int src_line) override {
2989 DBUG_TRACE;
2991 /*
2992 Sic: We don't lock LOCK_current_cond here.
2993 If we did, we could end up in deadlock with THD::awake()
2994 which locks current_mutex while LOCK_current_cond is locked.
2995 */
2996 current_mutex = mutex;
2997 current_cond = cond;
2998 enter_stage(stage, old_stage, src_function, src_file, src_line);
2999 return;
3000 }
3001
3002 void exit_cond(const PSI_stage_info *stage, const char *src_function,
3003 const char *src_file, int src_line) override {
3004 DBUG_TRACE;
3005 /*
3006 current_mutex must be unlocked _before_ LOCK_current_cond is
3007 locked (if that would not be the case, you'll get a deadlock if someone
3008 does a THD::awake() on you).
3009 */
3012 current_mutex = nullptr;
3013 current_cond = nullptr;
3015 enter_stage(stage, nullptr, src_function, src_file, src_line);
3016 return;
3017 }
3018
3019 int is_killed() const final { return killed; }
3021 /*
3022 We need to return if this thread can have any commit order waiters
3023 which are still accounted by MDL deadlock detector (even in absence
3024 of any MDL locks). We approximate this check by testing whether
3025 this thread is replication applier. Doing more precise check is going
3026 to be more expensive and possibly racy.
3027 */
3028 return slave_thread;
3029 }
3030
3031 THD *get_thd() override { return this; }
3032
3033 /**
3034 A callback to the server internals that is used to address
3035 special cases of the locking protocol.
3036 Invoked when acquiring an exclusive lock, for each thread that
3037 has a conflicting shared metadata lock.
3038
3039 This function aborts waiting of the thread on a data lock, to make
3040 it notice the pending exclusive lock and back off.
3041
3042 @note This function does not wait for the thread to give away its
3043 locks. Waiting is done outside for all threads at once.
3044
3045 @param ctx_in_use The MDL context owner (thread) to wake up.
3046 @param needs_thr_lock_abort Indicates that to wake up thread
3047 this call needs to abort its waiting
3048 on table-level lock.
3049 */
3050 void notify_shared_lock(MDL_context_owner *ctx_in_use,
3051 bool needs_thr_lock_abort) override;
3052
3053 bool notify_hton_pre_acquire_exclusive(const MDL_key *mdl_key,
3054 bool *victimized) override;
3055
3056 void notify_hton_post_release_exclusive(const MDL_key *mdl_key) override;
3057
3058 /**
3059 Provide thread specific random seed for MDL_context's PRNG.
3060
3061 Note that even if two connections will request seed during handling of
3062 statements which were started at exactly the same time, and thus will
3063 get the same values in PRNG at the start, they will naturally diverge
3064 soon, since calls to PRNG in MDL subsystem are affected by many factors
3065 making process quite random. OTOH the fact that we use time as a seed
3066 gives more randomness and thus better coverage in tests as opposed to
3067 using thread_id for the same purpose.
3068 */
3069 uint get_rand_seed() const override { return (uint)start_utime; }
3070
3071 // End implementation of MDL_context_owner interface.
3072
3073 inline bool is_strict_mode() const {
3074 return (variables.sql_mode &
3076 }
3077 inline const CHARSET_INFO *collation() {
3078 return variables.collation_server ? variables.collation_server
3080 }
3082 time_zone_used = true;
3083 return variables.time_zone;
3084 }
3085 time_t query_start_in_secs() const { return start_time.tv_sec; }
3087 void set_time();
3088 void set_time(const struct timeval *t) {
3089 user_time = *t;
3090 set_time();
3091 }
3092 inline bool is_fsp_truncate_mode() const {
3094 }
3095
3096 /**
3097 Evaluate the current time, and if it exceeds the long-query-time
3098 setting, mark the query as slow.
3099 */
3101
3103
3104 /*
3105 Call when it is clear that the query is ended and we have collected the
3106 right value for current_found_rows. Calling this method makes a snapshot of
3107 that value and makes it ready and stable for subsequent FOUND_ROWS() call
3108 in the next statement.
3109 */
3112 }
3113
3114 /**
3115 Returns true if session is in a multi-statement transaction mode.
3116
3117 OPTION_NOT_AUTOCOMMIT: When autocommit is off, a multi-statement
3118 transaction is implicitly started on the first statement after a
3119 previous transaction has been ended.
3120
3121 OPTION_BEGIN: Regardless of the autocommit status, a multi-statement
3122 transaction can be explicitly started with the statements "START
3123 TRANSACTION", "BEGIN [WORK]", "[COMMIT | ROLLBACK] AND CHAIN", etc.
3124
3125 Note: this doesn't tell you whether a transaction is active.
3126 A session can be in multi-statement transaction mode, and yet
3127 have no active transaction, e.g., in case of:
3128 set \@\@autocommit=0;
3129 set \@a= 3; <-- these statements don't
3130 set transaction isolation level serializable; <-- start an active
3131 flush tables; <-- transaction
3132
3133 I.e. for the above scenario this function returns true, even
3134 though no active transaction has begun.
3135 @sa in_active_multi_stmt_transaction()
3136 */
3138 return variables.option_bits & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN);
3139 }
3140 /**
3141 true if the session is in a multi-statement transaction mode
3142 (@sa in_multi_stmt_transaction_mode()) *and* there is an
3143 active transaction, i.e. there is an explicit start of a
3144 transaction with BEGIN statement, or implicit with a
3145 statement that uses a transactional engine.
3146
3147 For example, these scenarios don't start an active transaction
3148 (even though the server is in multi-statement transaction mode):
3149
3150 @verbatim
3151 set @@autocommit=0;
3152 select * from nontrans_table;
3153 set @var = true;
3154 flush tables;
3155 @endverbatim
3156
3157 Note, that even for a statement that starts a multi-statement
3158 transaction (i.e. select * from trans_table), this
3159 flag won't be set until we open the statement's tables
3160 and the engines register themselves for the transaction
3161 (see trans_register_ha()),
3162 hence this method is reliable to use only after
3163 open_tables() has completed.
3164
3165 Why do we need a flag?
3166 ----------------------
3167 We need to maintain a (at first glance redundant)
3168 session flag, rather than looking at thd->transaction.all.ha_list
3169 because of explicit start of a transaction with BEGIN.
3170
3171 I.e. in case of
3172 BEGIN;
3173 select * from nontrans_t1; <-- in_active_multi_stmt_transaction() is true
3174 */
3177 }
3179 return !stmt_arena->is_stmt_prepare();
3180 }
3181
3183 const char *from, size_t from_length,
3184 const CHARSET_INFO *from_cs, bool report_error = false);
3185
3187
3188 /**
3189 Clear the current error, if any.
3190 We do not clear is_fatal_error or is_fatal_sub_stmt_error since we
3191 assume this is never called if the fatal error is set.
3192 @todo: To silence an error, one should use Internal_error_handler
3193 mechanism. In future this function will be removed.
3194 */
3195 inline void clear_error() {
3196 DBUG_TRACE;
3198 is_slave_error = false;
3199 return;
3200 }
3201
3202 bool is_classic_protocol() const;
3203
3204 /** Return false if connection to client is broken. */
3205 bool is_connected(bool use_cached_connection_alive = false) final;
3206
3207 /**
3208 Mark the current error as fatal. Warning: this does not
3209 set any error, it sets a property of the error, so must be
3210 followed or prefixed with my_error().
3211 */
3213 bool is_fatal_error() const { return m_is_fatal_error; }
3214 /**
3215 true if there is an error in the error stack.
3216
3217 Please use this method instead of direct access to
3218 net.report_error.
3219
3220 If true, the current (sub)-statement should be aborted.
3221 The main difference between this member and is_fatal_error
3222 is that a fatal error can not be handled by a stored
3223 procedure continue handler, whereas a normal error can.
3224
3225 To raise this flag, use my_error().
3226 */
3227 inline bool is_error() const { return get_stmt_da()->is_error(); }
3228
3229 /// Returns first Diagnostics Area for the current statement.
3231
3232 /// Returns first Diagnostics Area for the current statement.
3233 const Diagnostics_area *get_stmt_da() const { return m_stmt_da; }
3234
3235 /// Returns the second Diagnostics Area for the current statement.
3237 return get_stmt_da()->stacked_da();
3238 }
3239
3240 /**
3241 Returns thread-local Diagnostics Area for parsing.
3242 We need to have a clean DA in case errors or warnings are thrown
3243 during parsing, but we can't just reset the main DA in case we
3244 have a diagnostic statement on our hand that needs the old DA
3245 to answer questions about the previous execution.
3246 Keeping a static per-thread DA for parsing is less costly than
3247 allocating a temporary one for each statement we parse.
3248 */
3250
3251 /**
3252 Returns thread-local Diagnostics Area to be used by query rewrite plugins.
3253 Query rewrite plugins use their own diagnostics area. The reason is that
3254 they are invoked right before and right after parsing, and we don't want
3255 conditions raised by plugins in either statement nor parser DA until we
3256 know which type of statement we have parsed.
3257
3258 @note The diagnostics area is instantiated the first time it is asked for.
3259 */
3262 }
3263
3264 /**
3265 Push the given Diagnostics Area on top of the stack, making
3266 it the new first Diagnostics Area. Conditions in the new second
3267 Diagnostics Area will be copied to the new first Diagnostics Area.
3268
3269 @param da Diagnostics Area to be come the top of
3270 the Diagnostics Area stack.
3271 @param copy_conditions
3272 Copy the conditions from the new second Diagnostics Area
3273 to the new first Diagnostics Area, as per SQL standard.
3274 */
3276 bool copy_conditions = true) {
3277 get_stmt_da()->push_diagnostics_area(this, da, copy_conditions);
3278 m_stmt_da = da;
3279 }
3280
3281 /// Pop the top DA off the Diagnostics Area stack.
3284 }
3285
3286 /**
3287 Inserts the new protocol at the top of the protocol stack, and make it
3288 the current protocol for this thd.
3289
3290 @param protocol Protocol to be inserted.
3291 */
3292 void push_protocol(Protocol *protocol);
3293
3294 template <typename ProtocolClass>
3295 void push_protocol(const std::unique_ptr<ProtocolClass> &protocol) {
3296 push_protocol(protocol.get());
3297 }
3298
3299 /**
3300 Pops the top protocol of the Protocol stack and sets the previous one
3301 as the current protocol.
3302 */
3303 void pop_protocol();
3304
3305 public:
3307 void update_charset();
3308
3309 /**
3310 Record a transient change to a pointer to an Item within another Item.
3311 */
3312 void change_item_tree(Item **place, Item *new_value) {
3313 /* TODO: check for OOM condition here */
3314 if (!stmt_arena->is_regular()) {
3315 DBUG_PRINT("info", ("change_item_tree place %p old_value %p new_value %p",
3316 place, *place, new_value));
3317 nocheck_register_item_tree_change(place, new_value);
3318 }
3319 *place = new_value;
3320 }
3321
3322 /**
3323 Remember that place was updated with new_value so it can be restored
3324 by rollback_item_tree_changes().
3325
3326 @param[in] place the location that will change, and whose old value
3327 we need to remember for restoration
3328 @param[in] new_value new value about to be inserted into *place
3329 */
3330 void nocheck_register_item_tree_change(Item **place, Item *new_value);
3331
3332 /**
3333 Restore locations set by calls to nocheck_register_item_tree_change().
3334 */
3336
3337 /*
3338 Cleanup statement parse state (parse tree, lex) and execution
3339 state after execution of a non-prepared SQL statement.
3340 */
3341 void end_statement();
3342 void send_kill_message() const;
3343
3345 uint add_state_flags);
3349
3350 public:
3351 /**
3352 Start a read-only attachable transaction.
3353 There must be no active attachable transactions (in other words, there can
3354 be only one active attachable transaction at a time).
3355 */
3357
3358 /**
3359 Start a read-write attachable transaction.
3360 All the read-only class' requirements apply.
3361 Additional requirements are documented along the class
3362 declaration.
3363 */
3365
3366 /**
3367 End an active attachable transaction. Applies to both the read-only
3368 and the read-write versions.
3369 Note, that the read-write attachable transaction won't be terminated
3370 inside this method.
3371 To invoke the function there must be active attachable transaction.
3372 */
3374
3375 /**
3376 @return true if there is an active attachable transaction.
3377 */
3379 return m_attachable_trx != nullptr && m_attachable_trx->is_read_only();
3380 }
3381
3382 /**
3383 @return true if there is an active attachable transaction.
3384 */
3386 return m_attachable_trx != nullptr;
3387 }
3388
3389 /**
3390 @return true if there is an active rw attachable transaction.
3391 */
3393 return m_attachable_trx != nullptr && !m_attachable_trx->is_read_only();
3394 }
3395
3396 public:
3397 /*
3398 @todo Make these methods private or remove them completely. Only
3399 decide_logging_format should call them. /Sven
3400 */
3402 DBUG_TRACE;
3403 /*
3404 This should only be called from decide_logging_format.
3405
3406 @todo Once we have ensured this, uncomment the following
3407 statement, remove the big comment below that, and remove the
3408 in_sub_stmt==0 condition from the following 'if'.
3409 */
3410 /* assert(in_sub_stmt == 0); */
3411 /*
3412 If in a stored/function trigger, the caller should already have done the
3413 change. We test in_sub_stmt to prevent introducing bugs where people
3414 wouldn't ensure that, and would switch to row-based mode in the middle
3415 of executing a stored function/trigger (which is too late, see also
3416 reset_current_stmt_binlog_format_row()); this condition will make their
3417 tests fail and so force them to propagate the
3418 lex->binlog_row_based_if_mixed upwards to the caller.
3419 */
3420 if ((variables.binlog_format == BINLOG_FORMAT_MIXED) && (in_sub_stmt == 0))
3422
3423 return;
3424 }
3426 DBUG_TRACE;
3428 return;
3429 }
3431 DBUG_TRACE;
3433 return;
3434 }
3436 DBUG_TRACE;
3437 DBUG_PRINT("debug", ("in_sub_stmt: %d, system_thread: %s", in_sub_stmt != 0,
3439 if (in_sub_stmt == 0) {
3440 if (variables.binlog_format == BINLOG_FORMAT_ROW)
3442 else
3444 }
3445 return;
3446 }
3447
3448 /**
3449 Copies variables.original_commit_timestamp to
3450 ((Slave_worker *)rli_slave)->original_commit_timestamp,
3451 if this is a slave thread.
3452 */
3454
3455 /// Return the value of @@gtid_next_list: either a Gtid_set or NULL.
3457 return variables.gtid_next_list.is_non_null
3458 ? variables.gtid_next_list.gtid_set
3459 : nullptr;
3460 }
3461
3462 /// Return the value of @@gtid_next_list: either a Gtid_set or NULL.
3464 return const_cast<THD *>(this)->get_gtid_next_list();
3465 }
3466
3467 /**
3468 Return true if the statement/transaction cache is currently empty,
3469 false otherwise.
3470
3471 @param is_transactional if true, check the transaction cache.
3472 If false, check the statement cache.
3473 */
3474 bool is_binlog_cache_empty(bool is_transactional) const;
3475
3476 /**
3477 The GTID of the currently owned transaction.
3478
3479 ==== Modes of ownership ====
3480
3481 The following modes of ownership are possible:
3482
3483 - owned_gtid.sidno==0: the thread does not own any transaction.
3484
3485 - owned_gtid.sidno==THD::OWNED_SIDNO_ANONYMOUS(==-2): the thread
3486 owns an anonymous transaction
3487
3488 - owned_gtid.sidno>0 and owned_gtid.gno>0: the thread owns a GTID
3489 transaction.
3490
3491 - (owned_gtid.sidno==THD::OWNED_SIDNO_GTID_SET(==-1): this is
3492 currently not used. It was reserved for the case where multiple
3493 GTIDs are owned (using gtid_next_list). This was one idea to
3494 make GTIDs work with NDB: due to the epoch concept, multiple
3495 transactions can be combined into one in NDB, and therefore a
3496 single transaction on a slave can have multiple GTIDs.)
3497
3498 ==== Life cycle of ownership ====
3499
3500 Generally, transaction ownership starts when the transaction is
3501 assigned its GTID and ends when the transaction commits or rolls
3502 back. On a master (GTID_NEXT=AUTOMATIC), the GTID is assigned
3503 just before binlog flush; on a slave (GTID_NEXT=UUID:NUMBER or
3504 GTID_NEXT=ANONYMOUS) it is assigned before starting the
3505 transaction.
3506
3507 A new client always starts with owned_gtid.sidno=0.
3508
3509 Ownership can be acquired in the following ways:
3510
3511 A1. If GTID_NEXT = 'AUTOMATIC' and GTID_MODE = OFF/OFF_PERMISSIVE:
3512 The thread acquires anonymous ownership in
3513 gtid_state->generate_automatic_gtid called from
3514 MYSQL_BIN_LOG::write_transaction.
3515
3516 A2. If GTID_NEXT = 'AUTOMATIC' and GTID_MODE = ON/ON_PERMISSIVE:
3517 The thread generates the GTID and acquires ownership in
3518 gtid_state->generate_automatic_gtid called from
3519 MYSQL_BIN_LOG::write_transaction.
3520
3521 A3. If GTID_NEXT = 'UUID:NUMBER': The thread acquires ownership in
3522 the following ways:
3523
3524 - In a client, the SET GTID_NEXT statement acquires ownership.
3525
3526 - The slave's analogy to a clients SET GTID_NEXT statement is
3527 Gtid_log_event::do_apply_event. So the slave acquires
3528 ownership in this function.
3529
3530 Note: if the GTID UUID:NUMBER is already included in
3531 GTID_EXECUTED, then the transaction must be skipped (the GTID
3532 auto-skip feature). Thus, ownership is *not* acquired in this
3533 case and owned_gtid.sidno==0.
3534
3535 A4. If GTID_NEXT = 'ANONYMOUS':
3536
3537 - In a client, the SET GTID_NEXT statement acquires ownership.
3538
3539 - In a slave thread, Gtid_log_event::do_apply_event acquires
3540 ownership.
3541
3542 - Contrary to the case of GTID_NEXT='UUID:NUMBER', it is
3543 allowed to execute two transactions in sequence without
3544 changing GTID_NEXT (cf. R1 and R2 below). Both transactions
3545 should be executed as anonymous transactions. But ownership
3546 is released when the first transaction commits. Therefore,
3547 when GTID_NEXT='ANONYMOUS', we also acquire anonymous
3548 ownership when starting to execute a statement, in
3549 gtid_reacquire_ownership_if_anonymous called from
3550 gtid_pre_statement_checks (usually called from
3551 mysql_execute_command).
3552
3553 A5. Slave applier threads start in a special mode, having
3554 GTID_NEXT='NOT_YET_DETERMINED'. This mode cannot be set in a
3555 regular client. When GTID_NEXT=NOT_YET_DETERMINED, the slave
3556 thread is postponing the decision of the value of GTID_NEXT
3557 until it has more information. There are three cases:
3558
3559 - If the first transaction of the relay log has a
3560 Gtid_log_event, then it will set GTID_NEXT=GTID:NUMBER and
3561 acquire GTID ownership in Gtid_log_event::do_apply_event.
3562
3563 - If the first transaction of the relay log has a
3564 Anonymous_gtid_log_event, then it will set
3565 GTID_NEXT=ANONYMOUS and acquire anonymous ownership in
3566 Gtid_log_event::do_apply_event.
3567
3568 - If the relay log was received from a pre-5.7.6 master with
3569 GTID_MODE=OFF (or a pre-5.6 master), then there are neither
3570 Gtid_log_events nor Anonymous_log_events in the relay log.
3571 In this case, the slave sets GTID_NEXT=ANONYMOUS and
3572 acquires anonymous ownership when executing a
3573 Query_log_event (Query_log_event::do_apply_event calls
3574 dispatch_sql_command which calls gtid_pre_statement_checks which
3575 calls gtid_reacquire_ownership_if_anonymous).
3576
3577 Ownership is released in the following ways:
3578
3579 R1. A thread that holds GTID ownership releases ownership at
3580 transaction commit or rollback. If GTID_NEXT=AUTOMATIC, all
3581 is fine. If GTID_NEXT=UUID:NUMBER, the UUID:NUMBER cannot be
3582 used for another transaction, since only one transaction can
3583 have any given GTID. To avoid the user mistake of forgetting
3584 to set back GTID_NEXT, on commit we set
3585 thd->variables.gtid_next.type=UNDEFINED_GTID. Then, any
3586 statement that user tries to execute other than SET GTID_NEXT
3587 will generate an error.
3588
3589 R2. A thread that holds anonymous ownership releases ownership at
3590 transaction commit or rollback. In this case there is no harm
3591 in leaving GTID_NEXT='ANONYMOUS', so
3592 thd->variables.gtid_next.type will remain ANONYMOUS_GTID and
3593 not UNDEFINED_GTID.
3594
3595 There are statements that generate multiple transactions in the
3596 binary log. This includes the following:
3597
3598 M1. DROP TABLE that is used with multiple tables, and the tables
3599 belong to more than one of the following groups: non-temporary
3600 table, temporary transactional table, temporary
3601 non-transactional table. DROP TABLE is split into one
3602 transaction for each of these groups of tables.
3603
3604 M2. DROP DATABASE that fails e.g. because rmdir fails. Then a
3605 single DROP TABLE is generated, which lists all tables that
3606 were dropped before the failure happened. But if the list of
3607 tables is big, and grows over a limit, the statement will be
3608 split into multiple statements.
3609
3610 M3. CREATE TABLE ... SELECT that is logged in row format. Then
3611 the server generates a single CREATE statement, followed by a
3612 BEGIN ... row events ... COMMIT transaction.
3613
3614 M4. A statement that updates both transactional and
3615 non-transactional tables in the same statement, and is logged
3616 in row format. Then it generates one transaction for the
3617 non-transactional row updates, followed by one transaction for
3618 the transactional row updates.
3619
3620 M5. CALL is executed as multiple transactions and logged as
3621 multiple transactions.
3622
3623 The general rules for multi-transaction statements are:
3624
3625 - If GTID_NEXT=AUTOMATIC and GTID_MODE=ON or ON_PERMISSIVE, one
3626 GTID should be generated for each transaction within the
3627 statement. Therefore, ownership must be released after each
3628 commit so that a new GTID can be generated by the next
3629 transaction. Typically mysql_bin_log.commit() is called to
3630 achieve this. (Note that some of these statements are currently
3631 disallowed when GTID_MODE=ON.)
3632
3633 - If GTID_NEXT=AUTOMATIC and GTID_MODE=OFF or OFF_PERMISSIVE, one
3634 Anonymous_gtid_log_event should be generated for each
3635 transaction within the statement. Similar to the case above, we
3636 call mysql_bin_log.commit() and release ownership between
3637 transactions within the statement.
3638
3639 This works for all the special cases M1-M5 except M4. When a
3640 statement writes both non-transactional and transactional
3641 updates to the binary log, both the transaction cache and the
3642 statement cache are flushed within the same call to
3643 flush_thread_caches(THD) from within the binary log group commit
3644 code. At that point we cannot use mysql_bin_log.commit().
3645 Instead we release ownership using direct calls to
3646 gtid_state->release_anonymous_ownership() and
3647 thd->clear_owned_gtids() from binlog_cache_mngr::flush.
3648
3649 - If GTID_NEXT=ANONYMOUS, anonymous ownership must be *preserved*
3650 between transactions within the statement, to prevent that a
3651 concurrent SET GTID_MODE=ON makes it impossible to log the
3652 statement. To avoid that ownership is released if
3653 mysql_bin_log.commit() is called, we set
3654 thd->is_commit_in_middle_of_statement before calling
3655 mysql_bin_log.commit. Note that we must set this flag only if
3656 GTID_NEXT=ANONYMOUS, not if the transaction is anonymous when
3657 GTID_NEXT=AUTOMATIC and GTID_MODE=OFF.
3658
3659 This works for all the special cases M1-M5 except M4. When a
3660 statement writes non-transactional updates in the middle of a
3661 transaction, but keeps some transactional updates in the
3662 transaction cache, then it is not easy to know at the time of
3663 calling mysql_bin_log.commit() whether anonymous ownership needs
3664 to be preserved or not. Instead, we directly check if the
3665 transaction cache is nonempty before releasing anonymous
3666 ownership inside Gtid_state::update_gtids_impl.
3667
3668 - If GTID_NEXT='UUID:NUMBER', it is impossible to log a
3669 multi-transaction statement, since each GTID can only be used by
3670 one transaction. Therefore, an error must be generated in this
3671 case. Errors are generated in different ways for the different
3672 statement types:
3673
3674 - DROP TABLE: we can detect the situation before it happens,
3675 since the table type is known once the tables are opened. So
3676 we generate an error before even executing the statement.
3677
3678 - DROP DATABASE: we can't detect the situation until it is too
3679 late; the tables have already been dropped and we cannot log
3680 anything meaningful. So we don't log at all.
3681
3682 - CREATE TABLE ... SELECT: this is not allowed when
3683 enforce_gtid_consistency is ON; the statement will be
3684 forbidden in is_ddl_gtid_compatible.
3685
3686 - Statements that update both transactional and
3687 non-transactional tables are disallowed when GTID_MODE=ON, so
3688 this normally does not happen. However, it can happen if the
3689 slave uses a different engine type than the master, so that a
3690 statement that updates InnoDB+InnoDB on master updates
3691 InnoDB+MyISAM on slave. In this case the statement will be
3692 forbidden in is_dml_gtid_compatible and will not be allowed to
3693 execute.
3694
3695 - CALL: the second statement will generate an error because
3696 GTID_NEXT is 'undefined'. Note that this situation can only
3697 happen if user does it on purpose: A CALL on master is logged
3698 as multiple statements, so a slave never executes CALL with
3699 GTID_NEXT='UUID:NUMBER'.
3700
3701 Finally, ownership release is suppressed in one more corner case:
3702
3703 C1. Administration statements including OPTIMIZE TABLE, REPAIR
3704 TABLE, or ANALYZE TABLE are written to the binary log even if
3705 they fail. This means that the thread first calls
3706 trans_rollack, and then writes the statement to the binlog.
3707 Rollback normally releases ownership. But ownership must be
3708 kept until writing the binlog. The solution is that these
3709 statements set thd->skip_gtid_rollback=true before calling
3710 trans_rollback, and Gtid_state::update_on_rollback does not
3711 release ownership if the flag is set.
3712
3713 @todo It would probably be better to encapsulate this more, maybe
3714 use Gtid_specification instead of Gtid.
3715 */
3717 static const int OWNED_SIDNO_GTID_SET = -1;
3718 static const int OWNED_SIDNO_ANONYMOUS = -2;
3719
3720 /**
3721 For convenience, this contains the SID component of the GTID
3722 stored in owned_gtid.
3723 */
3725
3726 /** SE GTID persistence flag types. */
3727 enum Se_GTID_flag : size_t {
3728 /** Pin owned GTID */
3730 /** Cleanup GTID during unpin. */
3732 /** SE would persist GTID for current transaction. */
3734 /** If RESET log in progress. */
3736 /** Explicit request for SE to persist GTID for current transaction. */
3738 /** Max element holding the biset size. */
3741
3742 using Se_GTID_flagset = std::bitset<SE_GTID_MAX>;
3743
3744 /** Flags for SE GTID persistence. */
3746
3747 /** Defer freeing owned GTID and SID till unpinned. */
3749
3750 /** Unpin and free GTID and SID. */
3751 void unpin_gtid() {
3753 /* Do any deferred cleanup */
3757 }
3758 }
3759
3760 /** @return true, if single phase XA commit operation. */
3761 bool is_one_phase_commit();
3762
3763 /** Set when binlog reset operation is started. */
3765
3766 /** Cleared after flushing SE logs during binlog reset. */
3768
3769 /** @return true, if binlog reset operation. */
3771
3772 /** Set by SE when it guarantees GTID persistence. */
3774
3775 /** Request SE to persist GTID explicitly. */
3779 }
3780
3781 /** Reset by SE at transaction end after persisting GTID. */
3785 }
3786
3787 /** @return true, if SE persists GTID for current transaction. */
3788 bool se_persists_gtid() const {
3789 DBUG_EXECUTE_IF("disable_se_persists_gtid", return (false););
3790 auto trx = get_transaction();
3791 auto xid_state = trx->xid_state();
3792 /* XA transactions are always persisted by Innodb. */
3793 return (!xid_state->has_state(XID_STATE::XA_NOTR) ||
3795 }
3796
3797 /** @return true, if SE is explicitly set to persists GTID. */
3799 DBUG_EXECUTE_IF("disable_se_persists_gtid", return (false););
3801 }
3802
3803 /** @return true, if external XA transaction is in progress. */
3804 bool is_extrenal_xa() const {
3805 auto trx = get_transaction();
3806 auto xid_state = trx->xid_state();
3807 return !xid_state->has_state(XID_STATE::XA_NOTR);
3808 }
3809
3810#ifdef HAVE_GTID_NEXT_LIST
3811 /**
3812 If this thread owns a set of GTIDs (i.e., GTID_NEXT_LIST != NULL),
3813 then this member variable contains the subset of those GTIDs that
3814 are owned by this thread.
3815 */
3816 Gtid_set owned_gtid_set;
3817#endif
3818
3819 /*
3820 Replication related context.
3821
3822 @todo: move more parts of replication related fields in THD to inside this
3823 class.
3824 */
3826
3828 /* Defer GTID cleanup if pinned. Used for XA transactions where
3829 SE(Innodb) needs to read GTID. */
3832 return;
3833 }
3835#ifdef HAVE_GTID_NEXT_LIST
3836 owned_gtid_set.clear();
3837#else
3838 assert(0);
3839#endif
3840 }
3841 owned_gtid.clear();
3842 owned_sid.clear();
3843 owned_gtid.dbug_print(nullptr, "set owned_gtid in clear_owned_gtids");
3844 }
3845
3846 /** @return true, if owned GTID is empty or waiting for deferred cleanup. */
3849 return (true);
3850 }
3851 return (owned_gtid.is_empty());
3852 }
3853
3854 /*
3855 There are some statements (like OPTIMIZE TABLE, ANALYZE TABLE and
3856 REPAIR TABLE) that might call trans_rollback_stmt() and also will be
3857 successfully executed and will have to go to the binary log.
3858 For these statements, the skip_gtid_rollback flag must be set to avoid
3859 problems when the statement is executed with a GTID_NEXT set to
3860 ASSIGNED_GTID (like the SQL thread do when applying events from other
3861 server). When this flag is set, a call to gtid_rollback() will do nothing.
3862 */
3864 /*
3865 There are some statements (like DROP DATABASE that fails on rmdir
3866 and gets rewritten to multiple DROP TABLE statements) that may
3867 call trans_commit_stmt() before it has written all statements to
3868 the binlog. When using GTID_NEXT = ANONYMOUS, such statements
3869 should not release ownership of the anonymous transaction until
3870 all statements have been written to the binlog. To prevent that
3871 update_gtid_impl releases ownership, such statements must set this
3872 flag.
3873 */
3875
3876 /*
3877 True while the transaction is executing, if one of
3878 is_ddl_gtid_consistent or is_dml_gtid_consistent returned false.
3879 */
3881
3882 const LEX_CSTRING &db() const { return m_db; }
3883
3884 /**
3885 Set the current database; use deep copy of C-string.
3886
3887 @param new_db the new database name.
3888
3889 Initialize the current database from a NULL-terminated string with
3890 length. If we run out of memory, we free the current database and
3891 return true. This way the user will notice the error as there will be
3892 no current database selected (in addition to the error message set by
3893 malloc).
3894
3895 @note This operation just sets {db, db_length}. Switching the current
3896 database usually involves other actions, like switching other database
3897 attributes including security context. In the future, this operation
3898 will be made private and more convenient interface will be provided.
3899
3900 @return Operation status
3901 @retval false Success
3902 @retval true Out-of-memory error
3903 */
3904 bool set_db(const LEX_CSTRING &new_db);
3905
3906 /**
3907 Set the current database; use shallow copy of C-string.
3908
3909 @param new_db the new database name.
3910
3911 @note This operation just sets {db, db_length}. Switching the current
3912 database usually involves other actions, like switching other database
3913 attributes including security context. In the future, this operation
3914 will be made private and more convenient interface will be provided.
3915 */
3916 void reset_db(const LEX_CSTRING &new_db) {
3917 m_db.str = new_db.str;
3918 m_db.length = new_db.length;
3919#ifdef HAVE_PSI_THREAD_INTERFACE
3920 PSI_THREAD_CALL(set_thread_db)(new_db.str, static_cast<int>(new_db.length));
3921#endif
3922 }
3923 /*
3924 Copy the current database to the argument. Use the current arena to
3925 allocate memory for a deep copy: current database may be freed after
3926 a statement is parsed but before it's executed.
3927 */
3928 bool copy_db_to(char const **p_db, size_t *p_db_length) const {
3929 if (m_db.str == nullptr) {
3930 my_error(ER_NO_DB_ERROR, MYF(0));
3931 return true;
3932 }
3933 *p_db = strmake(m_db.str, m_db.length);
3934 *p_db_length = m_db.length;
3935 return false;
3936 }
3937
3938 bool copy_db_to(char **p_db, size_t *p_db_length) const {
3939 return copy_db_to(const_cast<char const **>(p_db), p_db_length);
3940 }
3941
3943
3944 /**
3945 Get resource group context.
3946
3947 @returns pointer to resource group context.
3948 */
3949
3951 return &m_resource_group_ctx;
3952 }
3953
3954 public:
3955 /**
3956 Save the performance schema thread instrumentation
3957 associated with this user session.
3958 @param psi Performance schema thread instrumentation
3959 */
3960 void set_psi(PSI_thread *psi) { m_psi = psi; }
3961
3962 /**
3963 Read the performance schema thread instrumentation
3964 associated with this user session.
3965 This method is safe to use from a different thread.
3966 */
3967 PSI_thread *get_psi() const { return m_psi; }
3968
3969 private:
3970 /**
3971 Performance schema thread instrumentation for this session.
3972 This member is maintained using atomic operations,
3973 do not access it directly.
3974 @sa set_psi
3975 @sa get_psi
3976 */
3977 std::atomic<PSI_thread *> m_psi;
3978
3979 public:
3981 return m_internal_handler;
3982 }
3983
3984 /**
3985 Add an internal error handler to the thread execution context.
3986 @param handler the exception handler to add
3987 */
3989
3990 private:
3991 /**
3992 Handle a sql condition.
3993 @param sql_errno the condition error number
3994 @param sqlstate the condition sqlstate
3995 @param level the condition level
3996 @param msg the condition message text
3997 @return true if the condition is handled
3998 */
3999 bool handle_condition(uint sql_errno, const char *sqlstate,
4001 const char *msg);
4002
4003 public:
4004 /**
4005 Remove the error handler last pushed.
4006 */
4008
4009 Opt_trace_context opt_trace; ///< optimizer trace of current statement
4010 /**
4011 Raise an exception condition.
4012 @param code the MYSQL_ERRNO error code of the error
4013 */
4014 void raise_error(uint code);
4015
4016 /**
4017 Raise an exception condition, with a formatted message.
4018 @param code the MYSQL_ERRNO error code of the error
4019 */
4020 void raise_error_printf(uint code, ...);
4021
4022 /**
4023 Raise a completion condition (warning).
4024 @param code the MYSQL_ERRNO error code of the warning
4025 */
4026 void raise_warning(uint code);
4027
4028 /**
4029 Raise a completion condition (warning), with a formatted message.
4030 @param code the MYSQL_ERRNO error code of the warning
4031 */
4032 void raise_warning_printf(uint code, ...);
4033
4034 /**
4035 Raise a completion condition (note), with a fixed message.
4036 @param code the MYSQL_ERRNO error code of the note
4037 */
4038 void raise_note(uint code);
4039
4040 /**
4041 Raise an completion condition (note), with a formatted message.
4042 @param code the MYSQL_ERRNO error code of the note
4043 */
4044 void raise_note_printf(uint code, ...);
4045
4046 private:
4047 /*
4048 Only the implementation of the SIGNAL and RESIGNAL statements
4049 is permitted to raise SQL conditions in a generic way,
4050 or to raise them by bypassing handlers (RESIGNAL).
4051 To raise a SQL condition, the code should use the public
4052 raise_error() or raise_warning() methods provided by class THD.
4053 */
4055 friend class Sql_cmd_signal;
4056 friend class Sql_cmd_resignal;
4057 friend void push_warning(THD *thd,
4059 uint code, const char *message_text);
4060 friend void my_message_sql(uint, const char *, myf);
4061
4062 /**
4063 Raise a generic SQL condition. Also calls mysql_audit_notify() unless
4064 the condition is handled by a SQL condition handler.
4065
4066 @param sql_errno the condition error number
4067 @param sqlstate the condition SQLSTATE
4068 @param level the condition level
4069 @param msg the condition message text
4070 @param fatal_error should the fatal_error flag be set?
4071 @return The condition raised, or NULL
4072 */
4073 Sql_condition *raise_condition(uint sql_errno, const char *sqlstate,
4075 const char *msg, bool fatal_error = false);
4076
4077 public:
4079
4080 inline enum enum_server_command get_command() const { return m_command; }
4081
4082 /**
4083 For safe and protected access to the query string, the following
4084 rules should be followed:
4085 1: Only the owner (current_thd) can set the query string.
4086 This will be protected by LOCK_thd_query.
4087 2: The owner (current_thd) can read the query string without
4088 locking LOCK_thd_query.
4089 3: Other threads must lock LOCK_thd_query before reading
4090 the query string.
4091
4092 This means that write-write conflicts are avoided by LOCK_thd_query.
4093 Read(by owner or other thread)-write(other thread) are disallowed.
4094 Read(other thread)-write(by owner) conflicts are avoided by LOCK_thd_query.
4095 Read(by owner)-write(by owner) won't happen as THD=thread.
4096
4097 We want to keep current_thd out of header files, so the debug assert,
4098 is moved to the .cc file. In optimized mode, we want this getter to
4099 be fast, so we inline it.
4100 */
4101 void debug_assert_query_locked() const;
4102 const LEX_CSTRING &query() const {
4103#ifndef NDEBUG
4105#endif
4106 return m_query_string;
4107 }
4108
4109 /**
4110 The current query in normalized form. The format is intended to be
4111 identical to the digest text of performance_schema, but not limited in
4112 size. In this case the parse tree is traversed as opposed to a (limited)
4113 token buffer. The string is allocated by this Statement and will be
4114 available until the next call to this function or this object is deleted.
4115
4116 @note We have no protection against out-of-memory errors as this function
4117 relies on the Item::print() interface which does not propagate errors.
4118
4119 @return The current query in normalized form.
4120 */
4121 const String normalized_query();
4122
4123 /**
4124 Set query to be displayed in performance schema (threads table etc.). Also
4125 mark the query safe to display for information_schema.process_list.
4126 */
4127 void set_query_for_display(const char *query_arg [[maybe_unused]],
4128 size_t query_length_arg [[maybe_unused]]) {
4129 // Set in pfs events statements table
4131 static_cast<uint>(query_length_arg));
4132#ifdef HAVE_PSI_THREAD_INTERFACE
4133 // Set in pfs threads table
4134 PSI_THREAD_CALL(set_thread_info)
4135 (query_arg, static_cast<uint>(query_length_arg));
4136#endif
4137 set_safe_display(true);
4138 }
4139
4140 /**
4141 Reset query string to be displayed in PFS. Also reset the safety flag
4142 for information_schema.process_list for next query.
4143 */
4145 set_query_for_display(nullptr, 0);
4146 m_safe_to_display.store(false);
4147 }
4148
4149 /** @return true, if safe to display the query string. */
4150 bool safe_to_display() const { return m_safe_to_display.load(); }
4151
4152 /** Set if the query string to be safe to display.
4153 @param[in] safe if it is safe to display query string */
4154 void set_safe_display(bool safe) { m_safe_to_display.store(safe); }
4155
4156 /**
4157 Assign a new value to thd->m_query_string.
4158 Protected with the LOCK_thd_query mutex.
4159 */
4160 void set_query(const char *query_arg, size_t query_length_arg) {
4161 LEX_CSTRING tmp = {query_arg, query_length_arg};
4162 set_query(tmp);
4163 }
4164 void set_query(LEX_CSTRING query_arg);
4166
4167 /**
4168 Set the rewritten query (with passwords obfuscated etc.) on the THD.
4169 Wraps this in the LOCK_thd_query mutex to protect against race conditions
4170 with SHOW PROCESSLIST inspecting that string.
4171
4172 This uses swap() and therefore "steals" the argument from the caller;
4173 the caller MUST take care not to try to use its own string after calling
4174 this function! This is an optimization for mysql_rewrite_query() so we
4175 don't copy its temporary string (which may get very long, up to
4176 @@max_allowed_packet).
4177
4178 Using this outside of mysql_rewrite_query() is almost certainly wrong;
4179 please check with the runtime team!
4180
4181 @param query_arg The rewritten query to use for slow/bin/general logging.
4182 The value will be released in the caller and MUST NOT
4183 be used there after calling this function.
4184 */
4185 void swap_rewritten_query(String &query_arg);
4186
4187 /**
4188 Get the rewritten query (with passwords obfuscated etc.) from the THD.
4189 If done from a different thread (from the one that the rewritten_query
4190 is set on), the caller must hold LOCK_thd_query while calling this!
4191 */
4192 const String &rewritten_query() const {
4193#ifndef NDEBUG
4195#endif
4196 return m_rewritten_query;
4197 }
4198
4199 /**
4200 Reset thd->m_rewritten_query. Protected with the LOCK_thd_query mutex.
4201 */
4203 if (rewritten_query().length()) {
4204 String empty;
4206 }
4207 }
4208
4209 /**
4210 Assign a new value to thd->query_id.
4211 Protected with the LOCK_thd_data mutex.
4212 */
4213 void set_query_id(query_id_t new_query_id) {
4215 query_id = new_query_id;
4218 }
4219
4220 /**
4221 Assign a new value to open_tables.
4222 Protected with the LOCK_thd_data mutex.
4223 */
4224 void set_open_tables(TABLE *open_tables_arg) {
4226 open_tables = open_tables_arg;
4228 }
4229
4230 /**
4231 Assign a new value to is_killable
4232 Protected with the LOCK_thd_data mutex.
4233 */
4234 void set_is_killable(bool is_killable_arg) {
4236 is_killable = is_killable_arg;
4238 }
4239
4241 assert(locked_tables_mode == LTM_NONE);
4242
4243 if (mode_arg == LTM_LOCK_TABLES) {
4244 /*
4245 When entering LOCK TABLES mode we should set explicit duration
4246 for all metadata locks acquired so far in order to avoid releasing
4247 them till UNLOCK TABLES statement.
4248 We don't do this when entering prelocked mode since sub-statements
4249 don't release metadata locks and restoring status-quo after leaving
4250 prelocking mode gets complicated.
4251 */
4253 }
4254
4255 locked_tables_mode = mode_arg;
4256 }
4258 int decide_logging_format(Table_ref *tables);
4259 /**
4260 is_dml_gtid_compatible() and is_ddl_gtid_compatible() check if the
4261 statement that is about to be processed will safely get a
4262 GTID. Currently, the following cases may lead to errors
4263 (e.g. duplicated GTIDs) and as such are forbidden:
4264
4265 1. DML statements that mix non-transactional updates with
4266 transactional updates.
4267
4268 2. Transactions that use non-transactional tables after
4269 having used transactional tables.
4270
4271 3. CREATE...SELECT statement;
4272
4273 4. CREATE TEMPORARY TABLE or DROP TEMPORARY TABLE within a
4274 transaction
4275
4276 The first two conditions have to be checked in
4277 decide_logging_format, because that's where we know if the table
4278 is transactional or not. These are implemented in
4279 is_dml_gtid_compatible().
4280
4281 The third and fourth conditions have to be checked in
4282 mysql_execute_command because (1) that prevents implicit commit
4283 from being executed if the statement fails; (2) DROP TEMPORARY
4284 TABLE does not invoke decide_logging_format. These are
4285 implemented in is_ddl_gtid_compatible().
4286
4287 In the cases where GTID violations generate errors,
4288 is_ddl_gtid_compatible() needs to be called before the implicit
4289 pre-commit, so that there is no implicit commit if the statement
4290 fails.
4291
4292 In the cases where GTID violations do not generate errors,
4293 is_ddl_gtid_compatible() needs to be called after the implicit
4294 pre-commit, because in these cases the function will increase the
4295 global counter automatic_gtid_violating_transaction_count or
4296 anonymous_gtid_violating_transaction_count. If there is an
4297 ongoing transaction, the implicit commit will commit the
4298 transaction, which will call update_gtids_impl, which should
4299 decrease the counters depending on whether the *old* was violating
4300 GTID-consistency or not. Thus, we should increase the counters
4301 only after the old transaction is committed.
4302
4303 @param some_transactional_table true if the statement updates some
4304 transactional table; false otherwise.
4305
4306 @param some_non_transactional_table true if the statement updates
4307 some non-transactional table; false otherwise.
4308
4309 @param non_transactional_tables_are_tmp true if all updated
4310 non-transactional tables are temporary.
4311
4312 @retval true if the statement is compatible;
4313 @retval false if the statement is not compatible.
4314 */
4315 bool is_dml_gtid_compatible(bool some_transactional_table,
4316 bool some_non_transactional_table,
4317 bool non_transactional_tables_are_tmp);
4320 bool need_binlog_invoker() const { return m_binlog_invoker; }
4321 void get_definer(LEX_USER *definer);
4323 m_invoker_user.str = user->str;
4324 m_invoker_user.length = user->length;
4325 m_invoker_host.str = host->str;
4326 m_invoker_host.length = host->length;
4327 }
4330 bool has_invoker() const { return m_invoker_user.str != nullptr; }
4331
4333
4334 private:
4335 /** The current internal error handler for this thread, or NULL. */
4337
4338 /**
4339 This memory root is used for two purposes:
4340 - for conventional queries, to allocate structures stored in main_lex
4341 during parsing, and allocate runtime data (execution plan, etc.)
4342 during execution.
4343 - for prepared queries, only to allocate runtime data. The parsed
4344 tree itself is reused between executions and thus is stored elsewhere.
4345 */
4348 Diagnostics_area m_parser_da; /**< cf. get_parser_da() */
4351
4353
4354 /**
4355 It will be set TRUE if CURRENT_USER() is called in account management
4356 statements or default definer is set in CREATE/ALTER SP, SF, Event,
4357 TRIGGER or VIEW statements.
4358
4359 Current user will be binlogged into Query_log_event if current_user_used
4360 is true; It will be stored into m_invoker_host and m_invoker_user by SQL
4361 thread.
4362 */
4364
4365 /**
4366 It points to the invoker in the Query_log_event.
4367 SQL thread use it as the default definer in CREATE/ALTER SP, SF, Event,
4368 TRIGGER or VIEW statements or current user in account management
4369 statements if it is not NULL.
4370 */
4373
4374 friend class Protocol_classic;
4375
4376 private:
4377 /**
4378 Optimizer cost model for server operations.
4379 */
4381
4382 public:
4383 /**
4384 Initialize the optimizer cost model.
4385
4386 This function should be called each time a new query is started.
4387 */
4389
4390 /**
4391 Retrieve the optimizer cost model for this connection.
4392 */
4393 const Cost_model_server *cost_model() const { return &m_cost_model; }
4394
4397
4398 void syntax_error() { syntax_error(ER_SYNTAX_ERROR); }
4399 void syntax_error(const char *format, ...)
4400 MY_ATTRIBUTE((format(printf, 2, 3)));
4401 void syntax_error(int mysql_errno, ...);
4402
4403 void syntax_error_at(const YYLTYPE &location) {
4404 syntax_error_at(location, ER_SYNTAX_ERROR);
4405 }
4406 void syntax_error_at(const YYLTYPE &location, const char *format, ...)
4407 MY_ATTRIBUTE((format(printf, 3, 4)));
4408 void syntax_error_at(const YYLTYPE &location, int mysql_errno, ...);
4409
4410 void vsyntax_error_at(const YYLTYPE &location, const char *format,
4411 va_list args) MY_ATTRIBUTE((format(printf, 3, 0)));
4412 void vsyntax_error_at(const char *pos_in_lexer_raw_buffer, const char *format,
4413 va_list args) MY_ATTRIBUTE((format(printf, 3, 0)));
4414
4415 /**
4416 Send name and type of result to client.
4417
4418 Sum fields has table name empty and field_name.
4419
4420 @param list List of items to send to client
4421 @param flags Bit mask with the following functions:
4422 - 1 send number of rows
4423 - 2 send default values
4424 - 4 don't write eof packet
4425
4426 @retval
4427 false ok
4428 @retval
4429 true Error (Note that in this case the error is not sent to the client)
4430 */
4431
4433
4434 /**
4435 Send one result set row.
4436
4437 @param row_items a collection of column values for that row
4438
4439 @return Error status.
4440 @retval true Error.
4441 @retval false Success.
4442 */
4443
4444 bool send_result_set_row(const mem_root_deque<Item *> &row_items);
4445
4446 /*
4447 Send the status of the current statement execution over network.
4448
4449 In MySQL, there are two types of SQL statements: those that return
4450 a result set and those that return status information only.
4451
4452 If a statement returns a result set, it consists of 3 parts:
4453 - result set meta-data
4454 - variable number of result set rows (can be 0)
4455 - followed and terminated by EOF or ERROR packet
4456
4457 Once the client has seen the meta-data information, it always
4458 expects an EOF or ERROR to terminate the result set. If ERROR is
4459 received, the result set rows are normally discarded (this is up
4460 to the client implementation, libmysql at least does discard them).
4461 EOF, on the contrary, means "successfully evaluated the entire
4462 result set". Since we don't know how many rows belong to a result
4463 set until it's evaluated, EOF/ERROR is the indicator of the end
4464 of the row stream. Note, that we can not buffer result set rows
4465 on the server -- there may be an arbitrary number of rows. But
4466 we do buffer the last packet (EOF/ERROR) in the Diagnostics_area and
4467 delay sending it till the very end of execution (here), to be able to
4468 change EOF to an ERROR if commit failed or some other error occurred
4469 during the last cleanup steps taken after execution.
4470
4471 A statement that does not return a result set doesn't send result
4472 set meta-data either. Instead it returns one of:
4473 - OK packet
4474 - ERROR packet.
4475 Similarly to the EOF/ERROR of the previous statement type, OK/ERROR
4476 packet is "buffered" in the Diagnostics Area and sent to the client
4477 in the end of statement.
4478
4479 @note This method defines a template, but delegates actual
4480 sending of data to virtual Protocol::send_{ok,eof,error}. This
4481 allows for implementation of protocols that "intercept" ok/eof/error
4482 messages, and store them in memory, etc, instead of sending to
4483 the client.
4484
4485 @pre The Diagnostics Area is assigned or disabled. It can not be empty
4486 -- we assume that every SQL statement or COM_* command
4487 generates OK, ERROR, or EOF status.
4488
4489 @post The status information is encoded to protocol format and sent to the
4490 client.
4491
4492 @return We conventionally return void, since the only type of error
4493 that can happen here is a NET (transport) error, and that one
4494 will become visible when we attempt to read from the NET the
4495 next command.
4496 Diagnostics_area::is_sent is set for debugging purposes only.
4497 */
4498
4499 void send_statement_status();
4500
4501 /**
4502 This is only used by master dump threads.
4503 When the master receives a new connection from a slave with a
4504 UUID (for slave versions >= 5.6)/server_id(for slave versions < 5.6)
4505 that is already connected, it will set this flag true
4506 before killing the old slave connection.
4507 */
4509
4510 /**
4511 Claim all the memory used by the THD object.
4512 This method is to keep memory instrumentation statistics
4513 updated, when an object is transferred across threads.
4514 */
4515 void claim_memory_ownership(bool claim);
4516
4519
4520 /**
4521 Returns the plugin, the thd belongs to.
4522 @return pointer to the plugin id
4523 */
4524 const st_plugin_int *get_plugin() const { return m_plugin; }
4525 /**
4526 Sets the plugin id to the value provided as parameter
4527 @param plugin the id of the plugin the thd belongs to
4528 */
4529 void set_plugin(const st_plugin_int *plugin) { m_plugin = plugin; }
4530#ifndef NDEBUG
4533#endif
4534
4537
4538 private:
4539 /**
4540 Variable to mark if the object is part of a Srv_session object, which
4541 aggregates THD.
4542 */
4544
4545 /// Stores the plugin id it is attached to (if any).
4546 const st_plugin_int *m_plugin{nullptr};
4547
4548 /**
4549 Creating or dropping plugin native table through a plugin service.
4550 This variable enables the DDL command execution from
4551 dd::create_native_table() to be executed without committing the
4552 transaction.
4553 */
4555
4556#ifndef NDEBUG
4557 /**
4558 Sequential number of internal tmp table created in the statement. Useful for
4559 tracking tmp tables when number of them is involved in a query.
4560 */
4562
4563 public:
4564 /*
4565 The member serves to guard against duplicate use of the same xid
4566 at binary logging.
4567 */
4569#endif
4570 private:
4571 /*
4572 Flag set by my_write before waiting for disk space.
4573
4574 This is used by replication to decide if the I/O thread should be
4575 killed or not when stopping the replication threads.
4576
4577 In ordinary STOP SLAVE case, the I/O thread will wait for disk space
4578 or to be killed regardless of this flag value.
4579
4580 In server shutdown case, if this flag is true, the I/O thread will be
4581 signaled with KILL_CONNECTION to abort the waiting, letting the server
4582 to shutdown promptly.
4583 */
4585
4586 public:
4587 /**
4588 Set the waiting_for_disk_space flag.
4589
4590 @param waiting The value to set in the flag.
4591 */
4592 void set_waiting_for_disk_space(bool waiting) {
4593 waiting_for_disk_space = waiting;
4594 }
4595 /**
4596 Returns the current waiting_for_disk_space flag value.
4597 */
4599
4600 bool sql_parser();
4601
4602 /// Enables or disables use of secondary storage engines in this session.
4605 }
4606
4607 /**
4608 Can secondary storage engines be used for query execution in
4609 this session?
4610 */
4613 }
4614
4615 /**
4616 Checks if queries in this session can use a secondary storage engine for
4617 execution.
4618
4619 @return true if secondary storage engines can be used in this
4620 session, or false otherwise
4621 */
4623
4624 private:
4625 /**
4626 This flag tells if a secondary storage engine can be used to
4627 execute a query in this session.
4628 */
4631
4633 /**
4634 Flag that indicates if the user of current session has SYSTEM_USER privilege
4635 */
4636 std::atomic<bool> m_is_system_user;
4637 /**
4638 Flag that indicates if the user of current session has CONNECTION_ADMIN
4639 privilege
4640 */
4641 std::atomic<bool> m_is_connection_admin;
4642
4643 public:
4644 bool is_system_user();
4645 void set_system_user(bool system_user_flag);
4646
4647 bool is_connection_admin();
4648 void set_connection_admin(bool connection_admin_flag);
4649
4650 public:
4652
4653 /**
4654 Flag to indicate this thread is executing
4655 @ref sys_var::update for a @ref OPT_GLOBAL variable.
4656
4657 This flag imply the thread already holds @ref LOCK_global_system_variables.
4658 Knowing this is required to resolve reentrancy issues
4659 in the system variable code, when callers
4660 read system variable Y while inside an update function
4661 for system variable X.
4662 Executing table io while inside a system variable update function
4663 will indirectly cause this.
4664 @todo Clean up callers and remove m_inside_system_variable_global_update.
4665 */
4667
4668 public:
4669 /** The parameter value bindings for the current query. Allocated on the THD
4670 * memroot. Can be empty */
4672 /** the number of elements in parameters */
4674
4675 public:
4676 /**
4677 Copy session properties that affect table access
4678 from the parent session to the current session.
4679
4680 The following properties:
4681 - the OPTION_BIN_LOG flag,
4682 - the skip_readonly_check flag,
4683 - the transaction isolation (tx_isolation)
4684 are copied from the parent to the current THD.
4685
4686 This is useful to execute an isolated, internal THD session
4687 to access tables, while leaving tables in the parent session
4688 unchanged.
4689
4690 @param thd parent session
4691 */
4695
4698
4699#ifndef NDEBUG
4700 const char *current_key_name;
4704 return (is_error() &&
4705 (get_stmt_da()->mysql_errno() == ER_DA_GLOBAL_CONN_LIMIT ||
4706 get_stmt_da()->mysql_errno() == ER_DA_CONN_LIMIT));
4707 }
4708#endif
4709
4710 public:
4711 bool add_external(unsigned int slot, void *data);
4712 void *fetch_external(unsigned int slot);
4713
4714 private:
4715 std::unordered_map<unsigned int, void *> external_store_;
4716}; // End of class THD
4717
4718/**
4719 Return lock_tables_mode for secondary engine.
4720 @param cthd thread context
4721 @retval true if lock_tables_mode is on
4722 @retval false, otherwise
4723 */
4724inline bool secondary_engine_lock_tables_mode(const THD &cthd) {
4725 return (cthd.locked_tables_mode == LTM_LOCK_TABLES ||
4727}
4728
4729/** A short cut for thd->get_stmt_da()->set_ok_status(). */
4730void my_ok(THD *thd, ulonglong affected_rows = 0, ulonglong id = 0,
4731 const char *message = nullptr);
4732
4733/** A short cut for thd->get_stmt_da()->set_eof_status(). */
4734void my_eof(THD *thd);
4735
4736bool add_item_to_list(THD *thd, Item *item);
4737
4738/*************************************************************************/
4739
4740/**
4741 Check if engine substitution is allowed in the current thread context.
4742
4743 @param thd thread context
4744 @retval true if engine substitution is allowed
4745 @retval false otherwise
4746*/
4747
4748inline bool is_engine_substitution_allowed(const THD *thd) {
4750}
4751
4752/**
4753 Returns if the user of the session has the SYSTEM_USER privilege or not.
4754
4755 @retval true User has SYSTEM_USER privilege
4756 @retval false Otherwise
4757*/
4758inline bool THD::is_system_user() {
4759 return m_is_system_user.load(std::memory_order_seq_cst);
4760}
4761
4762/**
4763 Sets the system_user flag atomically for the current session.
4764
4765 @param [in] system_user_flag boolean flag that indicates value to set.
4766*/
4767inline void THD::set_system_user(bool system_user_flag) {
4768 m_is_system_user.store(system_user_flag, std::memory_order_seq_cst);
4769}
4770
4771/**
4772 Returns if the user of the session has the CONNECTION_ADMIN privilege or not.
4773
4774 @retval true User has CONNECTION_ADMIN privilege
4775 @retval false Otherwise
4776*/
4778 return m_is_connection_admin.load(std::memory_order_seq_cst);
4779}
4780
4781/**
4782 Sets the connection_admin flag atomically for the current session.
4783
4784 @param [in] connection_admin_flag boolean flag that indicates value to set.
4785*/
4786inline void THD::set_connection_admin(bool connection_admin_flag) {
4787 m_is_connection_admin.store(connection_admin_flag, std::memory_order_seq_cst);
4788}
4789
4790/**
4791 Returns true if xa transactions are detached as part of executing XA PREPARE.
4792*/
4793inline bool is_xa_tran_detached_on_prepare(const THD *thd) {
4794 return thd->variables.xa_detach_on_prepare;
4795}
4796
4797#endif /* SQL_CLASS_INCLUDED */
app_data_ptr new_data(u_int n, char *val, cons_type consensus)
uint32_t Access_bitmask
Definition: auth_acls.h:34
int64 query_id_t
Definition: binlog.h:72
API for getting cost estimates for server operations that are not directly related to a table object.
Definition: opt_costmodel.h:52
void init()
Initialize the cost model object for a query.
Definition: opt_costmodel.cc:45
Stores status of the currently executed statement.
Definition: sql_error.h:269
bool is_error() const
Definition: sql_error.h:366
void reset_diagnostics_area()
Clear this Diagnostics Area.
Definition: sql_error.cc:356
Diagnostics_area * pop_diagnostics_area()
Pop "this" off the Diagnostics Area stack.
Definition: sql_error.cc:638
const Diagnostics_area * stacked_da() const
Returns the Diagnostics Area below the current diagnostics area on the stack.
Definition: sql_error.h:592
void push_diagnostics_area(THD *thd, Diagnostics_area *da, bool copy_conditions)
Push the given Diagnostics Area on top of the stack.
Definition: sql_error.cc:627
List of Discrete_interval objects.
Definition: discrete_interval.h:87
bool append(Discrete_interval *new_interval)
Definition: discrete_interval.h:117
void clear()
Definition: discrete_interval.h:144
An instance of the global read lock in a connection.
Definition: sql_class.h:828
bool can_acquire_protection() const
Check if this connection can acquire protection against GRL and emit error if otherwise.
Definition: sql_class.h:854
MDL_ticket * m_mdl_blocks_commits_lock
Also in order to acquire the global read lock, the connection must acquire a shared metadata lock in ...
Definition: sql_class.h:879
MDL_ticket * m_mdl_global_shared_lock
In order to acquire the global read lock, the connection must acquire shared metadata lock in GLOBAL ...
Definition: sql_class.h:873
enum_grl_state m_state
Definition: sql_class.h:867
bool is_acquired() const
Definition: sql_class.h:862
Global_read_lock()
Definition: sql_class.h:836
static bool global_read_lock_active()
Used by innodb memcached server to check if any connections have global read lock.
Definition: sql_class.h:848
enum_grl_state
Definition: sql_class.h:830
@ GRL_ACQUIRED_AND_BLOCKS_COMMIT
Definition: sql_class.h:833
@ GRL_ACQUIRED
Definition: sql_class.h:832
@ GRL_NONE
Definition: sql_class.h:831
Represents a set of GTIDs.
Definition: rpl_gtid.h:1455
void clear()
Removes all gtids from this Gtid_set.
Definition: rpl_gtid_set.cc:274
Either statement transaction or normal transaction - related thread-specific storage engine data.
Definition: transaction_info.h:402
This class represents the interface for internal error handlers.
Definition: error_handler.h:47
A registry for item tree transformations performed during query optimization.
Definition: sql_class.h:530
bool m_cancel
Definition: sql_class.h:541
Item * old_value
Definition: sql_class.h:539
Item_change_record(Item **place, Item *new_value)
Definition: sql_class.h:536
Item ** place
Definition: sql_class.h:538
Item * new_value
Definition: sql_class.h:540
Item_change_record()=default
Base class that is used to represent any kind of expression in a relational query.
Definition: item.h:853
Definition: sql_list.h:434
Tables that were locked with LOCK TABLES statement.
Definition: locked_tables_list.h:89
An interface to separate the MDL module from the THD, and the rest of the server code.
Definition: mdl.h:85
Context of the owner of metadata locks.
Definition: mdl.h:1411
void set_explicit_duration_for_all_locks()
Set explicit duration for all locks in the context.
Definition: mdl.cc:4630
Savepoint for MDL context.
Definition: mdl.h:1316
A granted metadata lock.
Definition: mdl.h:984
Table modification plan for JOIN-less statements (update/delete)
Definition: opt_explain.h:82
Storage for backup of Open_tables_state.
Definition: sql_class.h:688
MDL_savepoint mdl_system_tables_svp
When we backup the open tables state to open a system table or tables, we want to save state of metad...
Definition: sql_class.h:697
Class that holds information about tables which were opened and locked by the thread.
Definition: sql_class.h:552
MYSQL_LOCK * lock
Definition: sql_class.h:620
TABLE * open_tables
List of regular tables in use by this thread.
Definition: sql_class.h:599
MYSQL_LOCK * extra_lock
Definition: sql_class.h:627
Open_tables_state()
This constructor initializes Open_tables_state instance which can only be used as backup storage.
Definition: sql_class.h:674
uint state_flags
Definition: sql_class.h:667
void reset_open_tables_state()
Definition: sql_class.cc:614
Reprepare_observer * pop_reprepare_observer()
Definition: sql_class.h:586
void push_reprepare_observer(Reprepare_observer *o)
Definition: sql_class.h:582
enum_flags
Definition: sql_class.h:659
@ BACKUPS_AVAIL
Definition: sql_class.h:660
@ SYSTEM_TABLES
Definition: sql_class.h:661
enum enum_locked_tables_mode locked_tables_mode
Definition: sql_class.h:657
Reprepare_observer * get_reprepare_observer() const
Definition: sql_class.h:577
TABLE * temporary_tables
List of temporary tables used by this thread.
Definition: sql_class.h:605
void reset_reprepare_observers()
Definition: sql_class.h:592
void set_open_tables_state(Open_tables_state *state)
Definition: sql_class.cc:599
Prealloced_array< Reprepare_observer *, 4 > m_reprepare_observers
A stack of Reprepare_observer-instances.
Definition: sql_class.h:574
A per-session context which is always available at any point of execution, because in practice it's a...
Definition: opt_trace_context.h:90
Profiling state for a single THD; contains multiple QUERY_PROFILE objects.
Definition: sql_profile.h:226
Internal state of the parser.
Definition: sql_lexer_parser_state.h:44
Plugin array helper class.
Definition: sql_plugin_ref.h:110
A typesafe replacement for DYNAMIC_ARRAY.
Definition: prealloced_array.h:71
Container for all prepared statements created/used in a connection.
Definition: sql_class.h:478
Prepared_statement_map()
Definition: sql_class.cc:2048
void claim_memory_ownership(bool claim)
Definition: sql_class.cc:2110
Prepared_statement * find_by_name(const LEX_CSTRING &name)
Find prepared statement by name.
Definition: sql_class.cc:2085
int insert(Prepared_statement *statement)
Insert a new statement to the thread-local prepared statement map.
Definition: sql_class.cc:2054
Prepared_statement * m_last_found_statement
Definition: sql_class.h:520
~Prepared_statement_map()
Definition: sql_class.cc:2134
void reset()
Definition: sql_class.cc:2116
void erase(Prepared_statement *statement)
Erase all prepared statements (calls Prepared_statement destructor).
Definition: sql_class.cc:2099
collation_unordered_map< std::string, Prepared_statement * > names_hash
Definition: sql_class.h:519
malloc_unordered_map< ulong, std::unique_ptr< Prepared_statement > > st_hash
Definition: sql_class.h:518
Prepared_statement * find(ulong id)
Find prepared statement by ID.
Definition: sql_class.cc:2090
Prepared_statement: a statement that can contain placeholders.
Definition: sql_prepare.h:346
Definition: protocol_classic.h:240
Definition: protocol_classic.h:52
Class used for the old (MySQL 4.0 protocol).
Definition: protocol_classic.h:218
Definition: protocol.h:33
Definition: sql_class.h:343
enum_state get_state() const
Definition: sql_class.h:406
bool is_stmt_prepare_or_first_stmt_execute() const
Definition: sql_class.h:411
T * memdup_typed(const T *mem)
Definition: sql_class.h:429
enum_state
Definition: sql_class.h:362
@ STMT_INITIALIZED
Definition: sql_class.h:363
@ STMT_ERROR
Definition: sql_class.h:368
@ STMT_REGULAR_EXECUTION
Definition: sql_class.h:366
@ STMT_PREPARED
Definition: sql_class.h:365
@ STMT_INITIALIZED_FOR_SP
Definition: sql_class.h:364
@ STMT_EXECUTED
Definition: sql_class.h:367
bool is_repreparing
To check whether a reprepare operation is active.
Definition: sql_class.h:354
bool is_stmt_prepare() const
Definition: sql_class.h:407
LEX_CSTRING strmake(LEX_CSTRING str)
Definition: sql_class.h:436
void reset_item_list()
Definition: sql_class.h:401
char * mem_strdup(const char *str)
Definition: sql_class.h:432
void free_items()
Definition: sql_class.cc:2012
Item * m_item_list
Definition: sql_class.h:349
void * alloc(size_t size)
Definition: sql_class.h:417
Query_arena(MEM_ROOT *mem_root_arg, enum enum_state state_arg)
Definition: sql_class.h:388
bool is_regular() const
Definition: sql_class.h:415
void set_query_arena(const Query_arena &set)
Copies memory-managing members from set.
Definition: sql_class.cc:2023
char * strmake(const char *str, size_t size) const
Definition: sql_class.h:433
enum_state state
Definition: sql_class.h:385
void set_item_list(Item *item)
Definition: sql_class.h:402
void add_item(Item *item)
Definition: sql_class.cc:2007
void * mem_calloc(size_t size)
Definition: sql_class.h:418
void swap_query_arena(const Query_arena &source, Query_arena *backup)
Copy the current arena to backup and set the current arena to match source
Definition: sql_class.cc:2029
void set_state(enum_state state_arg)
Definition: sql_class.h:405
T * alloc_typed()
Definition: sql_class.h:424
Query_arena()
Definition: sql_class.h:395
Item * item_list() const
Definition: sql_class.h:400
bool is_stmt_prepare_or_first_sp_execute() const
Definition: sql_class.h:408
void * memdup(const void *str, size_t size)
Definition: sql_class.h:442
MEM_ROOT * mem_root
Definition: sql_class.h:352
virtual ~Query_arena()=default
Definition: query_result.h:54
Definition: sql_lex.h:2507
Definition: rpl_rli.h:203
An interface that is used to take an action when the locking module notices that a table version has ...
Definition: sql_prepare.h:81
Common base class for all row-containing log events.
Definition: log_event.h:2653
Definition: rpl_context.h:415
A set of THD members describing the current authenticated user.
Definition: sql_security_ctx.h:55
Definition: sys_vars_resource_mgr.h:70
Definition: session_tracker.h:129
Sql_cmd_common_signal represents the common properties of the SIGNAL and RESIGNAL statements.
Definition: sql_signal.h:88
Sql_cmd_resignal represents a RESIGNAL statement.
Definition: sql_signal.h:168
Sql_cmd_signal represents a SIGNAL statement.
Definition: sql_signal.h:148
Representation of a SQL condition.
Definition: sql_error.h:58
enum_severity_level
Enumeration value describing the severity of the condition.
Definition: sql_error.h:63
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:168
Used to save context when executing a function or trigger.
Definition: sql_class.h:738
ulonglong option_bits
Definition: sql_class.h:740
bool enable_slow_log
Definition: sql_class.h:749
ulong client_capabilities
Definition: sql_class.h:747
ulonglong first_successful_insert_id_in_cur_stmt
Definition: sql_class.h:742
ha_rows examined_row_count
Definition: sql_class.h:746
SAVEPOINT * savepoints
Definition: sql_class.h:750
ulonglong current_found_rows
Definition: sql_class.h:744
ha_rows sent_row_count
Definition: sql_class.h:746
ulonglong previous_found_rows
Definition: sql_class.h:745
enum enum_check_fields check_for_truncated_fields
Definition: sql_class.h:751
Discrete_intervals_list auto_inc_intervals_forced
Definition: sql_class.h:743
ha_rows num_truncated_fields
Definition: sql_class.h:746
uint in_sub_stmt
Definition: sql_class.h:748
ulonglong first_successful_insert_id_in_prev_stmt
Definition: sql_class.h:741
A derived from THD::Attachable_trx class allows updates in the attachable transaction.
Definition: sql_class.h:2050
bool is_read_only() const override
Definition: sql_class.h:2052
Attachable_trx_rw(const Attachable_trx_rw &)
Attachable_trx_rw & operator=(const Attachable_trx_rw &)
Attachable_trx_rw(THD *thd)
Definition: sql_class.cc:530
Class representing read-only attachable transaction, encapsulates knowledge how to backup state of cu...
Definition: sql_class.h:2007
THD * m_thd
THD instance.
Definition: sql_class.h:2018
Transaction_state m_trx_state
Transaction state data.
Definition: sql_class.h:2029
virtual ~Attachable_trx()
Definition: sql_class.cc:486
Attachable_trx * m_prev_attachable_trx
Attachable_trx which was active for the THD before when this transaction was started (NULL in most ca...
Definition: sql_class.h:2026
Attachable_trx(THD *thd, Attachable_trx *prev_trx)
Definition: sql_class.cc:391
virtual bool is_read_only() const
Definition: sql_class.h:2014
enum_reset_lex m_reset_lex
Definition: sql_class.h:2020
Attachable_trx * get_prev_attachable_trx() const
Definition: sql_class.h:2011
Attachable_trx(const Attachable_trx &)
Attachable_trx & operator=(const Attachable_trx &)
Query plan for EXPLAINable commands, should be locked with LOCK_query_plan before using.
Definition: sql_class.h:1354
void set_query_plan(enum_sql_command sql_cmd, LEX *lex_arg, bool ps)
Set query plan.
Definition: sql_class.cc:2672
void assert_plan_is_locked_if_other() const
Asserts that current_thd has locked this plan, if it does not own it.
Definition: sql_class.cc:2667
bool is_single_table_plan() const
Definition: sql_class.cc:3009
THD *const thd
Definition: sql_class.h:1356
Query_plan & operator=(const Query_plan &)
not defined
Query_plan(const Query_plan &)
not defined
bool is_ps_query() const
Definition: sql_class.h:1409
LEX * lex
LEX of topmost statement.
Definition: sql_class.h:1360
bool is_ps
True if query is run in prepared statement.
Definition: sql_class.h:1364
const Modification_plan * modification_plan
Query plan for UPDATE/DELETE/INSERT/REPLACE.
Definition: sql_class.h:1362
Modification_plan const * get_modification_plan() const
Definition: sql_class.h:1405
enum_sql_command get_command() const
Definition: sql_class.h:1397
LEX * get_lex() const
Definition: sql_class.h:1401
Query_plan(THD *thd_arg)
Definition: sql_class.h:1378
enum_sql_command sql_command
Original sql_command;.
Definition: sql_class.h:1358
void set_modification_plan(Modification_plan *plan_arg)
Definition: sql_class.cc:2688
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:34
bool is_being_disposed() const
Check if THD is being disposed (i.e.
Definition: sql_class.cc:1318
enum_vio_type get_vio_type() const
Definition: sql_class.cc:1925
std::atomic< mysql_cond_t * > current_cond
Pointer to the condition variable the thread owning this THD is currently waiting for.
Definition: sql_class.h:1513
bool has_gtid_consistency_violation
Definition: sql_class.h:3880
friend void my_message_sql(uint, const char *, myf)
All global error messages are sent here where the first one is stored for the client.
Definition: mysqld.cc:3779
Rpl_thd_context rpl_thd_ctx
Definition: sql_class.h:3825
struct THD_timer_info * timer
Holds active timer object.
Definition: sql_class.h:1824
void notify_hton_post_release_exclusive(const MDL_key *mdl_key) override
Notify interested storage engines that we have just released exclusive lock for the key.
Definition: sql_class.cc:3036
uint fill_variables_recursion_level
Definition: sql_class.h:1611
thd_scheduler scheduler
Definition: sql_class.h:3942
ulonglong first_successful_insert_id_in_prev_stmt_for_binlog
Definition: sql_class.h:2151
mysql_mutex_t LOCK_thd_query
Protects THD::m_query_string.
Definition: sql_class.h:1199
PSI_statement_locker * m_statement_psi
Current statement instrumentation.
Definition: sql_class.h:2425
std::unique_ptr< dd::cache::Dictionary_client > m_dd_client
Definition: sql_class.h:988
void disconnect(bool server_shutdown=false)
Disconnect the associated communication endpoint.
Definition: sql_class.cc:1615
bool m_is_admin_conn
Definition: sql_class.h:1551
PSI_transaction_locker_state m_transaction_state
Current transaction instrumentation state.
Definition: sql_class.h:2435
PSI_stage_progress * m_stage_progress_psi
Current stage progress instrumentation.
Definition: sql_class.h:2416
std::atomic< bool > m_is_system_user
Flag that indicates if the user of current session has SYSTEM_USER privilege.
Definition: sql_class.h:4636
void cleanup_connection(void)
Definition: sql_class.cc:1154
Gtid owned_gtid
The GTID of the currently owned transaction.
Definition: sql_class.h:3716
sql_digest_state * m_digest
Current statement digest.
Definition: sql_class.h:2418
Diagnostics_area m_query_rewrite_plugin_da
Definition: sql_class.h:4349
void clear_binlog_local_stmt_filter()
Definition: sql_class.h:1809
struct System_status_var * initial_status_var
Definition: sql_class.h:1113
ulonglong first_successful_insert_id_in_cur_stmt
Definition: sql_class.h:2157
void store_globals()
Definition: sql_class.cc:1684
Secondary_engine_optimization m_secondary_engine_optimization
This flag tells if a secondary storage engine can be used to execute a query in this session.
Definition: sql_class.h:4629
void push_lock_usec(ulonglong &top)
Definition: sql_class.h:1579
rpl_event_coordinates binlog_next_event_pos
Definition: sql_class.h:1656
void reset_n_backup_open_tables_state(Open_tables_backup *backup, uint add_state_flags)
Definition: sql_class.cc:2178
void claim_memory_ownership(bool claim)
Claim all the memory used by the THD object.
Definition: sql_class.cc:2914
void inc_status_select_range()
Definition: sql_class.cc:2409
void set_row_count_func(longlong row_count_func)
Definition: sql_class.h:2343
std::unordered_map< unsigned int, void * > external_store_
Definition: sql_class.h:4715
bool is_a_srv_session() const
Definition: sql_class.h:4517
void set_catalog(const LEX_CSTRING &catalog)
Definition: sql_class.h:1420
void clear_binlog_table_maps()
Definition: sql_class.h:1912
void enable_low_level_commit_ordering()
Enables ordering in ha_commit_low.
Definition: sql_class.cc:2994
void unlock_query_plan()
Definition: sql_class.h:1259
void vsyntax_error_at(const YYLTYPE &location, const char *format, va_list args)
Definition: sql_class.cc:2782
void get_trans_pos(const char **file_var, my_off_t *pos_var) const
Definition: sql_class.h:2614
void rpl_detach_engine_ha_data()
When the thread is a binlog or slave applier it detaches the engine ha_data associated with it and me...
Definition: sql_class.cc:2948
uint fill_status_recursion_level
Used by fill_status() to avoid acquiring LOCK_status mutex twice when this function is called recursi...
Definition: sql_class.h:1610
longlong m_row_count_func
Stores the result of ROW_COUNT() function.
Definition: sql_class.h:2338
unsigned long bind_parameter_values_count
the number of elements in parameters
Definition: sql_class.h:4673
bool is_current_stmt_binlog_disabled() const
Determine if binlogging is currently disabled for this session.
Definition: sql_class.cc:2974
PS_PARAM * bind_parameter_values
The parameter value bindings for the current query.
Definition: sql_class.h:4671
static const int OWNED_SIDNO_GTID_SET
Definition: sql_class.h:3717
Discrete_intervals_list auto_inc_intervals_forced
Definition: sql_class.h:2203
void set_psi(PSI_thread *psi)
Save the performance schema thread instrumentation associated with this user session.
Definition: sql_class.h:3960
bool add_external(unsigned int slot, void *data)
Definition: sql_class.cc:3233
void request_persist_gtid_by_se()
Request SE to persist GTID explicitly.
Definition: sql_class.h:3776
void set_query(const char *query_arg, size_t query_length_arg)
Assign a new value to thd->m_query_string.
Definition: sql_class.h:4160
const String normalized_query()
The current query in normalized form.
Definition: sql_class.cc:3014
void reset_query_for_display()
Reset query string to be displayed in PFS.
Definition: sql_class.h:4144
PSI_thread * get_psi() const
Read the performance schema thread instrumentation associated with this user session.
Definition: sql_class.h:3967
void init_cost_model()
Initialize the optimizer cost model.
Definition: sql_class.h:4388
std::bitset< SE_GTID_MAX > Se_GTID_flagset
Definition: sql_class.h:3742
void syntax_error_at(const YYLTYPE &location)
Definition: sql_class.h:4403
ulong statement_id_counter
Definition: sql_class.h:2458
void enter_cond(mysql_cond_t *cond, mysql_mutex_t *mutex, const PSI_stage_info *stage, PSI_stage_info *old_stage, const char *src_function, const char *src_file, int src_line) override
Enter a condition wait.
Definition: sql_class.h:2985
bool is_log_reset() const
Definition: sql_class.h:3770
bool slave_thread
Definition: sql_class.h:2690
bool m_is_fatal_error
Set to true if execution of the current compound statement can not continue.
Definition: sql_class.h:2702
rpl_sid owned_sid
For convenience, this contains the SID component of the GTID stored in owned_gtid.
Definition: sql_class.h:3724
void shutdown_active_vio()
Definition: sql_class.cc:1930
std::unique_ptr< Protocol_binary > protocol_binary
Definition: sql_class.h:1303
bool is_waiting_for_disk_space() const
Returns the current waiting_for_disk_space flag value.
Definition: sql_class.h:4598
uint dbug_sentry
Definition: sql_class.h:1492
ulonglong first_successful_insert_id_in_prev_stmt
Definition: sql_class.h:2144
Diagnostics_area main_da
Definition: sql_class.h:4347
dd::cache::Dictionary_client * dd_client() const
Definition: sql_class.h:982
enum_binlog_query_type
Definition: sql_class.h:2969
@ ROW_QUERY_TYPE
Definition: sql_class.h:2971
@ QUERY_TYPE_COUNT
Definition: sql_class.h:2976
@ STMT_QUERY_TYPE
Definition: sql_class.h:2974
SSL_handle m_SSL
SSL data attached to this connection.
Definition: sql_class.h:1347
dd::DD_kill_immunizer * kill_immunizer
When operation on DD tables is in progress then THD is set to kill immune mode.
Definition: sql_class.h:2683
LEX_CSTRING m_invoker_host
Definition: sql_class.h:4372
Prealloced_array< unsigned long, 11 > audit_class_mask
Array of bits indicating which audit classes have already been added to the list of audit plugins whi...
Definition: sql_class.h:2812
bool is_applier_thread() const
Definition: sql_class.h:1924
void set_invoker(const LEX_STRING *user, const LEX_STRING *host)
Definition: sql_class.h:4322
void set_new_thread_id()
Assign a value to m_thread_id by calling Global_THD_manager::get_new_thread_id().
Definition: sql_class.cc:1138
XID debug_binlog_xid_last
Definition: sql_class.h:4568
PSI_statement_locker_state m_statement_state
Current statement instrumentation state.
Definition: sql_class.h:2428
bool notify_hton_pre_acquire_exclusive(const MDL_key *mdl_key, bool *victimized) override
Notify/get permission from interested storage engines before acquiring exclusive lock for the key.
Definition: sql_class.cc:3030
const st_plugin_int * m_plugin
Stores the plugin id it is attached to (if any).
Definition: sql_class.h:4546
void pop_diagnostics_area()
Pop the top DA off the Diagnostics Area stack.
Definition: sql_class.h:3282
bool m_binlog_invoker
It will be set TRUE if CURRENT_USER() is called in account management statements or default definer i...
Definition: sql_class.h:4363
MDL_context mdl_context
Definition: sql_class.h:946
void unpin_gtid()
Unpin and free GTID and SID.
Definition: sql_class.h:3751
mysql_cond_t COND_thr_lock
Condition variable used for waiting by the THR_LOCK.c subsystem.
Definition: sql_class.h:1517
thr_lock_type insert_lock_default
Type of lock to be used for INSERT statement if lock is not specified explicitly.
Definition: sql_class.h:1597
bool running_explain_analyze
Whether we are currently in the execution phase of an EXPLAIN ANALYZE query.
Definition: sql_class.h:2674
void clear_current_query_costs()
Clear the query costs attributes for the current query.
Definition: sql_class.h:1136
bool has_invoker() const
Definition: sql_class.h:4330
std::unique_ptr< Protocol_text > protocol_text
Definition: sql_class.h:1302
void increment_updates_counter()
Definition: sql_class.cc:2629
const char * proc_info_session(THD *invoking_thd) const
Return the m_proc_info, possibly using the string of an older server release, according to @session....
Definition: sql_class.h:1466
collation_unordered_map< std::string, unique_ptr_my_free< Table_ref > > handler_tables_hash
Definition: sql_class.h:1482
enum_tx_isolation tx_isolation
Definition: sql_class.h:2543
bool is_error() const
true if there is an error in the error stack.
Definition: sql_class.h:3227
unsigned char * m_token_array
Current statement digest token array.
Definition: sql_class.h:2420
void set_ssl(Vio *vio)
Definition: sql_class.h:2922
void save_current_query_costs()
Save the current query costs attributes in the thread session status.
Definition: sql_class.h:1151
bool is_cleanup_done()
Definition: sql_class.cc:1206
my_off_t m_trans_end_pos
Definition: sql_class.h:1892
void restore_sub_statement_state(Sub_statement_state *backup)
Definition: sql_class.cc:2291
THD * get_thd() override
Within MDL subsystem this one is only used for DEBUG_SYNC.
Definition: sql_class.h:3031
void leave_locked_tables_mode()
Leave explicit LOCK TABLES or prelocked mode and restore value of transaction sentinel in MDL subsyst...
Definition: sql_class.cc:2503
my_thread_id thread_id() const
Definition: sql_class.h:2480
resourcegroups::Resource_group_ctx * resource_group_ctx()
Get resource group context.
Definition: sql_class.h:3950
void set_trans_pos(const char *file, my_off_t pos)
Functions to set and get transaction position.
Definition: sql_class.h:2589
my_thread_t real_id
Definition: sql_class.h:2460
void push_protocol(const std::unique_ptr< ProtocolClass > &protocol)
Definition: sql_class.h:3295
void begin_attachable_rw_transaction()
Start a read-write attachable transaction.
Definition: sql_class.cc:2213
void lock_query_plan()
Locks the query plan of this THD.
Definition: sql_class.h:1258
void nocheck_register_item_tree_change(Item **place, Item *new_value)
Remember that place was updated with new_value so it can be restored by rollback_item_tree_changes().
Definition: sql_class.cc:1970
ha_rows get_examined_row_count() const
Definition: sql_class.h:2389
void get_trans_fixed_pos(const char **file_var, my_off_t *pos_var) const
Definition: sql_class.h:2624
bool copy_db_to(char **p_db, size_t *p_db_length) const
Definition: sql_class.h:3938
void set_security_context(Security_context *sctx)
Definition: sql_class.h:1286
void send_kill_message() const
Definition: sql_class.cc:2142
void inc_status_select_scan()
Definition: sql_class.cc:2425
void reset_gtid_persisted_by_se()
Reset by SE at transaction end after persisting GTID.
Definition: sql_class.h:3782
bool tx_commit_pending
Definition: sql_class.h:1054
USER_CONN * m_user_connect
Definition: sql_class.h:2369
void swap_rewritten_query(String &query_arg)
Set the rewritten query (with passwords obfuscated etc.) on the THD.
Definition: sql_class.cc:3110
Cost_model_server m_cost_model
Optimizer cost model for server operations.
Definition: sql_class.h:4380
char scramble[SCRAMBLE_LENGTH+1]
Definition: sql_class.h:2686
my_timeval query_start_timeval_trunc(uint decimals)
Definition: sql_class.cc:974
void inc_status_sort_scan()
Definition: sql_class.cc:2458
PSI_stage_key m_current_stage_key
Definition: sql_class.h:1423
union THD::@167 sys_var_tmp
Relay_log_info * rli_slave
Definition: sql_class.h:1051
uint open_options
Definition: sql_class.h:2482
double double_value
Definition: sql_class.h:2762
List< Security_context > m_view_ctx_list
Definition: sql_class.h:1287
bool is_current_stmt_binlog_enabled_and_caches_empty() const
Checks whether binlog caches are disabled (binlog does not cache data) or empty in case binloggging i...
Definition: sql_class.cc:2984
Query_arena * stmt_arena
Definition: sql_class.h:2122
enum_binlog_format current_stmt_binlog_format
Indicates the format in which the current statement will be logged.
Definition: sql_class.h:1850
void reset_query()
Definition: sql_class.h:4165
void clear_clone_vio()
Clear clone network Vio for remote clone.
Definition: sql_class.h:2944
void inc_status_created_tmp_tables()
Definition: sql_class.cc:2385
uint get_rand_seed() const override
Provide thread specific random seed for MDL_context's PRNG.
Definition: sql_class.h:3069
ha_rows m_sent_row_count
Number of rows we actually sent to the client, including "synthetic" rows in ROLLUP etc.
Definition: sql_class.h:2354
std::atomic< PSI_thread * > m_psi
Performance schema thread instrumentation for this session.
Definition: sql_class.h:3977
void raise_error_printf(uint code,...)
Raise an exception condition, with a formatted message.
Definition: sql_class.cc:924
bool m_is_low_level_commit_ordering_enabled
Flag indicating whether additional ordering in the ha_commit_low function is enabled.
Definition: sql_class.h:1542
void set_status_no_index_used()
Definition: sql_class.cc:2466
static const int OWNED_SIDNO_ANONYMOUS
Definition: sql_class.h:3718
Vio * clone_vio
Definition: sql_class.h:2083
bool is_server_upgrade_thread() const
Definition: sql_class.h:2515
void end_statement()
Definition: sql_class.cc:2035
LEX_CSTRING m_query_string
The query associated with this statement.
Definition: sql_class.h:993
const CHARSET_INFO * collation()
Definition: sql_class.h:3077
bool charset_is_collation_connection
Definition: sql_class.h:2740
LEX_CSTRING m_invoker_user
It points to the invoker in the Query_log_event.
Definition: sql_class.h:4371
bool is_extrenal_xa() const
Definition: sql_class.h:3804
void reset_binlog_local_stmt_filter()
Definition: sql_class.h:1805
mysql_mutex_t LOCK_query_plan
Protects query plan (SELECT/UPDATE/DELETE's) from being freed/changed while another thread explains i...
Definition: sql_class.h:1246
void time_out_user_resource_limits()
Definition: sql_class.cc:2652
void clear_active_vio()
Definition: sql_class.h:2928
const Protocol * get_protocol() const
Definition: sql_class.h:1305
ulonglong m_lock_usec
Time spent waiting for TABLE locks and DATA locks.
Definition: sql_class.h:1574
bool need_binlog_invoker() const
Definition: sql_class.h:4320
bool is_dd_system_thread() const
Definition: sql_class.h:2489
ulong max_client_packet_length
Definition: sql_class.h:1479
int thd_tx_priority
Definition: sql_class.h:2559
LEX_CSTRING m_db
Name of the current (default) database.
Definition: sql_class.h:1014
std::atomic< bool > m_safe_to_display
Definition: sql_class.h:995
binlog_filter_state get_binlog_local_stmt_filter() const
Definition: sql_class.h:1819
uchar * binlog_row_event_extra_data
Definition: sql_class.h:1665
THR_LOCK_INFO lock_info
Definition: sql_class.h:1185
bool derived_tables_processing
Definition: sql_class.h:2744
void record_first_successful_insert_id_in_cur_stmt(ulonglong id_arg)
Definition: sql_class.h:2240
long long_value
Definition: sql_class.h:2759
LEX_CSTRING m_catalog
Currently selected catalog.
Definition: sql_class.h:1001
Opt_trace_context opt_trace
optimizer trace of current statement
Definition: sql_class.h:4009
bool send_result_set_row(const mem_root_deque< Item * > &row_items)
Send one result set row.
Definition: sql_class.cc:2861
bool is_system_thread() const
Definition: sql_class.h:2486
void set_admin_connection(bool admin)
Definition: sql_class.h:1554
class THD::Query_plan query_plan
void reset_sub_statement_state(Sub_statement_state *backup, uint new_state)
Definition: sql_class.cc:2248
bool is_a_srv_session_thd
Variable to mark if the object is part of a Srv_session object, which aggregates THD.
Definition: sql_class.h:4543
Thd_mem_cnt m_mem_cnt
Controlled memory stats for this session.
Definition: sql_class.h:937
LEX * lex
Definition: sql_class.h:981
bool status_var_aggregated
Definition: sql_class.h:1115
ulonglong current_found_rows
Dynamic, collected and set also in subqueries.
Definition: sql_class.h:2281
void increment_questions_counter()
Definition: sql_class.cc:2635
void increment_user_connections_counter()
Definition: sql_class.cc:2610
void set_clone_vio(Vio *vio)
Set active clone network Vio for remote clone.
Definition: sql_class.h:2937
Time_zone * time_zone()
Definition: sql_class.h:3081
void set_system_user(bool system_user_flag)
Sets the system_user flag atomically for the current session.
Definition: sql_class.h:4767
const Diagnostics_area * get_stmt_da() const
Returns first Diagnostics Area for the current statement.
Definition: sql_class.h:3233
query_id_t query_id
Definition: sql_class.h:2455
void set_safe_display(bool safe)
Set if the query string to be safe to display.
Definition: sql_class.h:4154
ulonglong get_lock_usec()
Definition: sql_class.h:1577
Session_sysvar_resource_manager session_sysvar_res_mgr
Definition: sql_class.h:4396
void send_statement_status()
Definition: sql_class.cc:2878
bool is_connected(bool use_cached_connection_alive=false) final
Return false if connection to client is broken.
Definition: sql_class.cc:3150
const char * thread_stack
Definition: sql_class.h:1267
LEX_CSTRING get_invoker_user() const
Definition: sql_class.h:4328
bool fill_information_schema_tables() const
Definition: sql_class.h:3178
void set_waiting_for_disk_space(bool waiting)
Set the waiting_for_disk_space flag.
Definition: sql_class.h:4592
std::atomic< mysql_mutex_t * > current_mutex
The mutex used with current_cond.
Definition: sql_class.h:1503
void decrement_user_connections_counter()
Definition: sql_class.cc:2616
~THD() override
Definition: sql_class.cc:1415
my_thread_id m_thread_id
This counter is 32 bit because of the client protocol.
Definition: sql_class.h:2472
void set_command(enum enum_server_command command)
Definition: sql_class.cc:2480
bool is_admin_connection() const
Definition: sql_class.h:1555
Protocol * m_protocol
Definition: sql_class.h:1336
void set_current_stmt_binlog_format_row_if_mixed()
Definition: sql_class.h:3401
String m_normalized_query
Definition: sql_class.h:994
void init_query_mem_roots()
Initialize memory roots necessary for query processing and (!) pre-allocate memory for it.
Definition: sql_class.cc:1132
void fatal_error()
Mark the current error as fatal.
Definition: sql_class.h:3212
void set_connection_admin(bool connection_admin_flag)
Sets the connection_admin flag atomically for the current session.
Definition: sql_class.h:4786
const LEX_CSTRING & catalog() const
Definition: sql_class.h:1418
void clear_next_event_pos()
Definition: sql_class.cc:2569
void set_server_id(uint32 sid)
Definition: sql_class.h:1701
bool set_db(const LEX_CSTRING &new_db)
Set the current database; use deep copy of C-string.
Definition: sql_class.cc:863
void exit_cond(const PSI_stage_info *stage, const char *src_function, const char *src_file, int src_line) override
End a wait on a condition.
Definition: sql_class.h:3002
bool is_engine_ha_data_detached() const
Definition: sql_class.cc:2968
bool is_attachable_ro_transaction_active() const
Definition: sql_class.h:3378
Sql_condition * raise_condition(uint sql_errno, const char *sqlstate, Sql_condition::enum_severity_level level, const char *msg, bool fatal_error=false)
Raise a generic SQL condition.
Definition: sql_class.cc:987
PSI_transaction_locker * m_transaction_psi
Current transaction instrumentation.
Definition: sql_class.h:2432
void set_query_id(query_id_t new_query_id)
Assign a new value to thd->query_id.
Definition: sql_class.h:4213
Session_tracker session_tracker
Definition: sql_class.h:4395
const LEX_CSTRING & query() const
Definition: sql_class.h:4102
bool enable_slow_log
Definition: sql_class.h:2742
Internal_error_handler * pop_internal_handler()
Remove the error handler last pushed.
Definition: sql_class.cc:912
enum enum_mark_columns mark_used_columns
MARK_COLUMNS_NONE: Means mark_used_columns is not set and no indicator to handler of fields used is s...
Definition: sql_class.h:960
int is_killed() const final
Has the owner thread been killed?
Definition: sql_class.h:3019
struct timeval user_time
Definition: sql_class.h:1563
struct THD_timer_info * timer_cache
After resetting(cancelling) timer, current timer object is cached with timer_cache timer to reuse.
Definition: sql_class.h:1829
bool is_fatal_sub_stmt_error
true if we are in a sub-statement and the current error can not be safely recovered until we left the...
Definition: sql_class.h:2722
bool optimizer_switch_flag(ulonglong flag) const
Tells whether the given optimizer_switch flag is on.
Definition: sql_class.h:1795
Diagnostics_area * m_query_rewrite_plugin_da_ptr
Definition: sql_class.h:4350
longlong get_row_count_func() const
Definition: sql_class.h:2341
ulong rand_saved_seed2
Definition: sql_class.h:2459
enum THD::Commit_error commit_error
ulonglong previous_found_rows
Stores the result of the FOUND_ROWS() function.
Definition: sql_class.h:2275
int binlog_flush_pending_rows_event(bool stmt_end)
Definition: sql_class.h:1711
void inc_status_sort_rows(ha_rows count)
Definition: sql_class.cc:2449
enum durability_properties durability_property
Definition: sql_class.h:2652
bool waiting_for_disk_space
Definition: sql_class.h:4584
SSL_handle get_ssl() const
Definition: sql_class.h:1309
bool m_audited
Definition: sql_class.h:2828
void clear_current_stmt_binlog_format_row()
Definition: sql_class.h:3430
void set_user_connect(USER_CONN *uc)
Definition: sql_class.cc:2604
enum enum_server_command get_command() const
Definition: sql_class.h:4080
bool is_regular() const =delete
double m_current_query_cost
Current query cost.
Definition: sql_class.h:1126
bool might_have_commit_order_waiters() const final
Indicates that owner thread might have some commit order (non-MDL) waits for it which are still taken...
Definition: sql_class.h:3020
Discrete_intervals_list auto_inc_intervals_in_cur_stmt_for_binlog
Definition: sql_class.h:2201
bool tx_read_only
Definition: sql_class.h:2548
Prealloced_array< Ha_data, PREALLOC_NUM_HA > ha_data
Definition: sql_class.h:1615
const CHARSET_INFO * db_charset
Definition: sql_class.h:2410
int is_current_stmt_binlog_format_row() const
Determine the binlog format of the current statement.
Definition: sql_class.h:1725
const Gtid_set * get_gtid_next_list_const() const
Return the value of @gtid_next_list: either a Gtid_set or NULL.
Definition: sql_class.h:3463
void set_next_event_pos(const char *_filename, ulonglong _pos)
Definition: sql_class.cc:2553
bool is_mem_cnt_error()
Definition: sql_class.h:4703
void set_plugin(const st_plugin_int *plugin)
Sets the plugin id to the value provided as parameter.
Definition: sql_class.h:4529
const Protocol_classic * get_protocol_classic() const
Asserts that the protocol is of type text or binary and then returns the m_protocol casted to Protoco...
Definition: sql_class.h:1328
String packet
Definition: sql_class.h:1897
void set_tmp_table_seq_id(uint arg)
Definition: sql_class.h:4532
bool stmt_depends_on_first_successful_insert_id_in_prev_stmt
Definition: sql_class.h:2186
void push_internal_handler(Internal_error_handler *handler)
Add an internal error handler to the thread execution context.
Definition: sql_class.cc:891
void copy_status_var(System_status_var *dst_var)
Copy status variables into a structure pointed by the specified pointer and keep track of the pointer...
Definition: sql_class.h:1169
bool is_operating_gtid_table_implicitly
Definition: sql_class.h:2289
void syntax_error()
Definition: sql_class.h:4398
bool handle_condition(uint sql_errno, const char *sqlstate, Sql_condition::enum_severity_level *level, const char *msg)
Handle a sql condition.
Definition: sql_class.cc:899
void set_current_stmt_binlog_format_row()
Definition: sql_class.h:3425
Prepared_statement_map stmt_map
All prepared statements of this connection.
Definition: sql_class.h:1262
uint server_status
Definition: sql_class.h:2482
friend void push_warning(THD *thd, Sql_condition::enum_severity_level severity, uint code, const char *message_text)
Push the warning to error list if there is still room in the list.
Definition: sql_error.cc:654
bool bool_value
Definition: sql_class.h:2758
bool is_killable
Definition: sql_class.h:1494
void set_query_for_display(const char *query_arg, size_t query_length_arg)
Set query to be displayed in performance schema (threads table etc.).
Definition: sql_class.h:4127
bool is_system_user()
Returns if the user of the session has the SYSTEM_USER privilege or not.
Definition: sql_class.h:4758
bool is_current_stmt_binlog_log_replica_updates_disabled() const
Determine if binlogging is currently disabled for this session.
Definition: sql_class.cc:2979
void debug_assert_query_locked() const
For safe and protected access to the query string, the following rules should be followed: 1: Only th...
Definition: sql_class.cc:2487
void force_one_auto_inc_interval(ulonglong next_id)
Definition: sql_class.h:2266
sp_rcontext * sp_runtime_ctx
Current SP-runtime context.
Definition: sql_class.h:2749
void inc_examined_row_count(ha_rows count)
Definition: sql_class.cc:2372
bool is_strict_mode() const
Definition: sql_class.h:3073
bool skip_gtid_rollback
Definition: sql_class.h:3863
Parser_state * m_parser_state
Internal parser state.
Definition: sql_lexer_thd.h:64
void update_charset()
Definition: sql_class.cc:1875
void inc_status_select_full_join()
Definition: sql_class.cc:2393
List< char > * get_binlog_accessed_db_names() const
Definition: sql_class.h:1917
void pop_protocol()
Pops the top protocol of the Protocol stack and sets the previous one as the current protocol.
Definition: sql_class.cc:3193
void enable_mem_cnt()
Definition: sql_class.h:4696
bool m_inside_system_variable_global_update
Flag to indicate this thread is executing sys_var::update for a OPT_GLOBAL variable.
Definition: sql_class.h:4666
bool is_current_stmt_binlog_row_enabled_with_write_set_extraction() const
Determine if binloging is enabled in row format and write set extraction is enabled for this session.
Definition: sql_class.cc:2988
void set_binlog_local_stmt_filter()
Definition: sql_class.h:1814
bool is_cmd_skip_readonly() const
Definition: sql_class.h:1903
thr_lock_type update_lock_default
Type of lock to be used for all DML statements, except INSERT, in cases when lock is not specified ex...
Definition: sql_class.h:1591
enum enum_thread_type system_thread
Definition: sql_class.h:2483
void clear_copy_status_var()
Clear copy of the status variables.
Definition: sql_class.h:1160
void raise_note_printf(uint code,...)
Raise an completion condition (note), with a formatted message.
Definition: sql_class.cc:961
bool is_mem_cnt_error_issued
Definition: sql_class.h:4702
const char * current_key_name
Definition: sql_class.h:4700
ha_rows num_truncated_fields
Definition: sql_class.h:2347
partition_info * work_part_info
Definition: sql_class.h:2800
void * fetch_external(unsigned int slot)
Definition: sql_class.cc:3241
bool is_attachable_transaction_active() const
Definition: sql_class.h:3385
enum_thd_life_cycle_stages
Represents life cycle stages of THD instance.
Definition: sql_class.h:2872
@ ACTIVE_AND_CLEAN
Definition: sql_class.h:2874
@ SCHEDULED_FOR_DISPOSAL
Definition: sql_class.h:2875
@ RESOURCES_RELEASED
Definition: sql_class.h:2877
@ DISPOSED
Definition: sql_class.h:2878
@ ACTIVE
Definition: sql_class.h:2873
@ CLEANED_UP
Definition: sql_class.h:2876
System_variables variables
Definition: sql_lexer_thd.h:62
void set_log_reset()
Set when binlog reset operation is started.
Definition: sql_class.h:3764
struct rand_struct rand
Definition: sql_class.h:1107
bool is_slave_error
True if a slave error.
Definition: sql_class.h:2732
List< char > * binlog_accessed_db_names
Definition: sql_class.h:1874
void set_original_commit_timestamp_for_slave_thread()
Copies variables.original_commit_timestamp to ((Slave_worker *)rli_slave)->original_commit_timestamp,...
Definition: sql_class.cc:2577
bool is_stmt_prepare_or_first_stmt_execute() const =delete
binlog_filter_state
Definition: sql_class.h:1799
@ BINLOG_FILTER_CLEAR
Definition: sql_class.h:1801
@ BINLOG_FILTER_UNKNOWN
Definition: sql_class.h:1800
@ BINLOG_FILTER_SET
Definition: sql_class.h:1802
bool is_init_file_system_thread() const
Definition: sql_class.h:2502
ha_rows m_examined_row_count
Number of rows read and/or evaluated for a statement.
Definition: sql_class.h:2366
bool query_start_usec_used
Definition: sql_class.h:2723
time_t query_start_in_secs() const
Definition: sql_class.h:3085
THD * next_to_commit
Used by MYSQL_BIN_LOG to maintain the commit queue for binary log group commit.
Definition: sql_class.h:2571
void set_transaction(Transaction_ctx *transaction_ctx)
Changes the Transaction_ctx instance within THD-object.
Definition: sql_class.cc:856
enum_thd_life_cycle_stages m_thd_life_cycle_stage
Definition: sql_class.h:2880
mysql_mutex_t LOCK_group_replication_connection_mutex
Definition: sql_class.h:4693
void raise_warning_printf(uint code,...)
Raise a completion condition (warning), with a formatted message.
Definition: sql_class.cc:941
bool is_classic_protocol() const
Definition: sql_class.cc:3145
Prealloced_array< Binlog_user_var_event *, 2 > user_var_events
Definition: sql_class.h:2564
PSI_stage_key get_current_stage_key() const
Definition: sql_class.h:1470
bool send_result_metadata(const mem_root_deque< Item * > &list, uint flags)
Send name and type of result to client.
Definition: sql_class.cc:2822
bool is_stmt_prepare_or_first_sp_execute() const =delete
mysql_mutex_t LOCK_thd_protocol
Protects THD::m_protocol when it gets removed in x plugin.
Definition: sql_class.h:1214
bool parsing_system_view
Definition: sql_class.h:2746
Diagnostics_area * m_stmt_da
Definition: sql_class.h:4352
bool is_binlog_applier() const
The function checks whether the thread is processing queries from binlog, as automatically generated ...
Definition: sql_class.h:1062
bool skip_readonly_check
Definition: sql_class.h:1836
const String & rewritten_query() const
Get the rewritten query (with passwords obfuscated etc.) from the THD.
Definition: sql_class.h:4192
void cleanup(void)
Definition: sql_class.cc:1216
void set_is_killable(bool is_killable_arg)
Assign a new value to is_killable Protected with the LOCK_thd_data mutex.
Definition: sql_class.h:4234
void inc_status_created_tmp_disk_tables()
Definition: sql_class.cc:2377
const Transaction_ctx * get_transaction() const
Definition: sql_class.h:2065
bool is_connection_admin()
Returns if the user of the session has the CONNECTION_ADMIN privilege or not.
Definition: sql_class.h:4777
struct timeval start_time
Definition: sql_class.h:1562
binlog_filter_state m_binlog_filter_state
Indicate if the current statement should be discarded instead of written to the binlog.
Definition: sql_class.h:1844
const CHARSET_INFO * charset() const
Definition: sql_class.h:3306
void init(void)
Definition: sql_class.cc:1050
void copy_table_access_properties(THD *thd)
Copy session properties that affect table access from the parent session to the current session.
Definition: sql_class.cc:849
bool is_secondary_storage_engine_eligible() const
Checks if queries in this session can use a secondary storage engine for execution.
Definition: sql_class.cc:3084
void set_status_no_good_index_used()
Definition: sql_class.cc:2473
std::unique_ptr< LEX > main_lex
The lex to hold the parsed tree of conventional (non-prepared) queries.
Definition: sql_class.h:978
const char * where
Definition: sql_class.h:1477
LEX_CSTRING get_invoker_host() const
Definition: sql_class.h:4329
ha_rows get_sent_row_count() const
Definition: sql_class.h:2387
bool charset_is_character_set_filesystem
Definition: sql_class.h:2741
void reset_copy_status_var()
Copy status variables into a structure pointed by the specified pointer passed into copy_status_var m...
Definition: sql_class.h:1178
bool safe_to_display() const
Definition: sql_class.h:4150
void reset_first_successful_insert_id()
Definition: sql_class.h:2253
void set_time()
Definition: sql_class.cc:3200
bool is_fsp_truncate_mode() const
Definition: sql_class.h:3092
Access_bitmask want_privilege
Used by Item::check_column_privileges() to tell which privileges to check for.
Definition: sql_class.h:969
uint32 file_id
Definition: sql_class.h:1559
Internal_error_handler * m_internal_handler
The current internal error handler for this thread, or NULL.
Definition: sql_class.h:4336
void push_diagnostics_area(Diagnostics_area *da, bool copy_conditions=true)
Push the given Diagnostics Area on top of the stack, making it the new first Diagnostics Area.
Definition: sql_class.h:3275
void disable_low_level_commit_ordering()
Enables ordering in ha_commit_low.
Definition: sql_class.cc:2999
Plugin_array audit_class_plugins
Array of active audit plugins which have been used by this THD.
Definition: sql_class.h:2807
const NET * get_net() const
Definition: sql_class.h:1899
bool transaction_rollback_request
Set by a storage engine to request the entire transaction (that possibly spans multiple engines) to r...
Definition: sql_class.h:2710
void set_active_vio(Vio *vio)
Definition: sql_class.h:2916
uint16 peer_port
Definition: sql_class.h:1561
Secondary_engine_optimization secondary_engine_optimization() const
Can secondary storage engines be used for query execution in this session?
Definition: sql_class.h:4611
bool binlog_need_explicit_defaults_ts
The member is served for marking a query that CREATEs or ALTERs a table declared with a TIMESTAMP col...
Definition: sql_class.h:2580
uint in_sub_stmt
Definition: sql_class.h:1600
void inc_lock_usec(ulonglong usec)
Definition: sql_class.cc:3213
void disable_mem_cnt()
Definition: sql_class.h:4697
void rollback_item_tree_changes()
Restore locations set by calls to nocheck_register_item_tree_change().
Definition: sql_class.cc:1990
bool se_persists_gtid() const
Definition: sql_class.h:3788
char * m_trans_fixed_log_file
Definition: sql_class.h:1891
bool is_low_level_commit_ordering_enabled() const
Obtains flag indicating whether additional ordering in the ha_commit_low function is enabled.
Definition: sql_class.cc:3004
bool unioned_events_trans
Definition: sql_class.h:2782
char * strmake(const char *str, size_t size) const
Definition: sql_lexer_thd.h:50
bool copy_db_to(char const **p_db, size_t *p_db_length) const
Definition: sql_class.h:3928
void increment_con_per_hour_counter()
Definition: sql_class.cc:2623
std::atomic< bool > m_cached_is_connection_alive
Keep a cached value saying whether the connection is alive.
Definition: sql_class.h:1254
uint get_tmp_table_seq_id()
Definition: sql_class.h:4531
const Diagnostics_area * get_stacked_da() const
Returns the second Diagnostics Area for the current statement.
Definition: sql_class.h:3236
void mark_transaction_to_rollback(bool all)
Mark transaction to rollback and mark error as fatal to a sub-statement.
Definition: sql_class.cc:2543
Attachable_trx * m_attachable_trx
Definition: sql_class.h:2060
void raise_warning(uint code)
Raise a completion condition (warning).
Definition: sql_class.cc:936
enum_check_fields check_for_truncated_fields
Definition: sql_class.h:2561
uint get_binlog_table_maps() const
Definition: sql_class.h:1911
PSI_idle_locker * m_idle_psi
Idle instrumentation.
Definition: sql_class.h:2439
Diagnostics_area * get_parser_da()
Returns thread-local Diagnostics Area for parsing.
Definition: sql_class.h:3249
void set_time(const struct timeval *t)
Definition: sql_class.h:3088
collation_unordered_map< std::string, unique_ptr_with_deleter< user_var_entry > > user_vars
Hash for user variables.
Definition: sql_class.h:1106
bool sql_parser()
Call parser to transform statement into a parse tree.
Definition: sql_class.cc:3045
bool rand_used
Definition: sql_class.h:2724
NET net
Definition: sql_class.h:1896
ulonglong m_current_query_partial_plans
Current query partial plans.
Definition: sql_class.h:1131
sp_cache * sp_func_cache
Definition: sql_class.h:2751
int tx_priority
Definition: sql_class.h:2554
std::unique_ptr< Transaction_ctx > m_transaction
Definition: sql_class.h:1930
table_map table_map_for_update
Definition: sql_class.h:2128
void cleanup_after_parse_error()
Restore session state in case of parse error.
Definition: sql_class.cc:3132
mysql_mutex_t LOCK_thd_sysvar
Protects THD::variables while being updated.
Definition: sql_class.h:1205
ulong ulong_value
Definition: sql_class.h:2760
void update_previous_found_rows()
Definition: sql_class.h:3110
void raise_note(uint code)
Raise a completion condition (note), with a fixed message.
Definition: sql_class.cc:953
void awake(THD::killed_state state_to_set)
Awake a thread.
Definition: sql_class.cc:1487
void change_item_tree(Item **place, Item *new_value)
Record a transient change to a pointer to an Item within another Item.
Definition: sql_class.h:3312
void mark_plugin_fake_ddl(bool flag)
Definition: sql_class.h:4536
mysql_mutex_t LOCK_thd_data
Protects THD data accessed from other threads.
Definition: sql_class.h:1193
bool convert_string(LEX_STRING *to, const CHARSET_INFO *to_cs, const char *from, size_t from_length, const CHARSET_INFO *from_cs, bool report_error=false)
void cleanup_after_query()
Definition: sql_class.cc:1745
void restore_globals()
Definition: sql_class.cc:1715
void inc_status_sort_range()
Definition: sql_class.cc:2441
query_id_t first_query_id
Definition: sql_class.h:2788
Ha_data * get_ha_data(int slot)
Retrieve Ha_data for a given slot.
Definition: sql_class.h:1621
Vio * active_vio
Definition: sql_class.h:2080
uint tmp_table_seq_id
Sequential number of internal tmp table created in the statement.
Definition: sql_class.h:4561
MEM_ROOT * user_var_events_alloc
Definition: sql_class.h:2565
THD(bool enable_plugins=true)
Definition: sql_class.cc:624
uint32 unmasked_server_id
Definition: sql_class.h:1557
const char * m_proc_info
Definition: sql_class.h:1437
void push_protocol(Protocol *protocol)
Inserts the new protocol at the top of the protocol stack, and make it the current protocol for this ...
Definition: sql_class.cc:3185
void end_attachable_transaction()
End an active attachable transaction.
Definition: sql_class.cc:2205
const char * proc_info() const
Definition: sql_class.h:1455
bool is_attachable_rw_transaction_active() const
Definition: sql_class.h:3392
void clear_log_reset()
Cleared after flushing SE logs during binlog reset.
Definition: sql_class.h:3767
const st_plugin_int * get_plugin() const
Returns the plugin, the thd belongs to.
Definition: sql_class.h:4524
enum enum_server_command m_command
Type of current query: COM_STMT_PREPARE, COM_QUERY, etc.
Definition: sql_class.h:1548
void reset_db(const LEX_CSTRING &new_db)
Set the current database; use shallow copy of C-string.
Definition: sql_class.h:3916
Se_GTID_flagset m_se_gtid_flags
Flags for SE GTID persistence.
Definition: sql_class.h:3745
Gtid_set * get_gtid_next_list()
Return the value of @gtid_next_list: either a Gtid_set or NULL.
Definition: sql_class.h:3456
mysql_mutex_t LOCK_current_cond
Mutex protecting access to current_mutex and current_cond.
Definition: sql_class.h:1498
void set_secondary_engine_optimization(Secondary_engine_optimization state)
Enables or disables use of secondary storage engines in this session.
Definition: sql_class.h:4603
Transaction_ctx * get_transaction()
Definition: sql_class.h:2063
bool is_initialize_system_thread() const
Definition: sql_class.h:2497
ulong rand_saved_seed1
Definition: sql_class.h:2459
sp_cache * sp_proc_cache
Definition: sql_class.h:2750
Item_change_list change_list
This is used to track transient changes to items during optimization of a prepared statement/stored p...
Definition: sql_class.h:2108
bool in_active_multi_stmt_transaction() const
true if the session is in a multi-statement transaction mode (
Definition: sql_class.h:3175
bool check_clone_vio()
Check if clone network Vio is active.
Definition: sql_class.h:2951
std::unique_ptr< PROFILING > profiling
Definition: sql_class.h:2412
void reset_current_stmt_binlog_format_row()
Definition: sql_class.h:3435
bool m_disable_password_validation
Definition: sql_class.h:1300
bool in_multi_stmt_transaction_mode() const
Returns true if session is in a multi-statement transaction mode.
Definition: sql_class.h:3137
void begin_attachable_ro_transaction()
Start a read-only attachable transaction.
Definition: sql_class.cc:2201
bool do_union
Definition: sql_class.h:2771
const LEX_CSTRING & db() const
Definition: sql_class.h:3882
const Internal_error_handler * get_internal_handler() const
Definition: sql_class.h:3980
ulonglong read_first_successful_insert_id_in_prev_stmt(void)
Definition: sql_class.h:2244
uint32 binlog_unsafe_warning_flags
Bit field for the state of binlog warnings.
Definition: sql_class.h:1864
void raise_error(uint code)
Raise an exception condition.
Definition: sql_class.cc:919
std::atomic< killed_state > killed
Definition: sql_class.h:2667
ulonglong start_utime
Query start time, expressed in microseconds.
Definition: sql_class.h:1567
Security_context * m_security_ctx
Definition: sql_class.h:1283
struct THD::@168 binlog_evt_union
bool is_stmt_prepare() const =delete
void restore_ha_data(const Prealloced_array< Ha_data, PREALLOC_NUM_HA > &backup)
Restore ha_data from the provided backup copy.
Definition: sql_class.h:1640
bool unioned_events
Definition: sql_class.h:2776
bool m_is_plugin_fake_ddl
Creating or dropping plugin native table through a plugin service.
Definition: sql_class.h:4554
void set_sent_row_count(ha_rows count)
Definition: sql_class.cc:2362
uint query_name_consts
number of name_const() substitutions, see sp_head.cc:subst_spvars()
Definition: sql_class.h:2754
NET_SERVER m_net_server_extension
Additional network instrumentation for the server only.
Definition: sql_class.h:1097
ulonglong conn_mem_alloc_number
Definition: sql_class.h:4701
String m_rewritten_query
In some cases, we may want to modify the query (i.e.
Definition: sql_class.h:1045
bool m_server_idle
True if the server code is IDLE for this connection.
Definition: sql_class.h:2445
Relay_log_info * rli_fake
Definition: sql_class.h:1049
mysql_mutex_t LOCK_thd_security_ctx
Protects THD::m_security_ctx from inspection (e.g.
Definition: sql_class.h:1220
void backup_ha_data(Prealloced_array< Ha_data, PREALLOC_NUM_HA > *backup)
Copy ha_data into the provided argument.
Definition: sql_class.h:1626
uint32 server_id
Definition: sql_class.h:1558
bool is_fatal_error() const
Definition: sql_class.h:3213
Transactional_ddl_context m_transactional_ddl
Definition: sql_class.h:4651
bool duplicate_slave_id
This is only used by master dump threads.
Definition: sql_class.h:4508
bool charset_is_system_charset
is set if a statement accesses a temporary table created through CREATE TEMPORARY TABLE.
Definition: sql_class.h:2740
void reset_rewritten_query()
Reset thd->m_rewritten_query.
Definition: sql_class.h:4202
void release_resources()
Release most resources, prior to THD destruction.
Definition: sql_class.cc:1339
Security_context * security_context() const
Definition: sql_class.h:1285
void restore_backup_open_tables_state(Open_tables_backup *backup)
Definition: sql_class.cc:2187
void pop_lock_usec(ulonglong top)
Definition: sql_class.h:1583
void enter_locked_tables_mode(enum_locked_tables_mode mode_arg)
Definition: sql_class.h:4240
bool time_zone_used
Definition: sql_class.h:2724
ulonglong ulonglong_value
Definition: sql_class.h:2761
void enter_stage(const PSI_stage_info *stage, PSI_stage_info *old_stage, const char *calling_func, const char *calling_file, const unsigned int calling_line) SUPPRESS_TSAN
Definition: sql_class.cc:537
uint binlog_table_maps
Definition: sql_class.h:1870
void inc_status_select_range_check()
Definition: sql_class.cc:2417
int send_explain_fields(Query_result *result)
Definition: sql_class.cc:1887
void clear_error()
Clear the current error, if any.
Definition: sql_class.h:3195
bool is_bootstrap_system_thread() const
Definition: sql_class.h:2508
void binlog_invoker()
Definition: sql_class.h:4319
bool is_one_phase_commit()
Definition: sql_class.cc:3074
void set_gtid_persisted_by_se()
Set by SE when it guarantees GTID persistence.
Definition: sql_class.h:3773
void inc_status_sort_merge_passes()
Definition: sql_class.cc:2433
void mark_as_srv_session()
Definition: sql_class.h:4518
MEM_ROOT main_mem_root
This memory root is used for two purposes:
Definition: sql_class.h:4346
struct System_status_var status_var
Definition: sql_class.h:1109
bool m_enable_plugins
Definition: sql_class.h:2820
struct System_status_var * copy_status_var_ptr
Definition: sql_class.h:1110
void clear_owned_gtids()
Definition: sql_class.h:3827
killed_state
Definition: sql_class.h:2660
@ KILL_QUERY
Definition: sql_class.h:2663
@ KILL_CONNECTION
Definition: sql_class.h:2662
@ KILLED_NO_VALUE
Definition: sql_class.h:2665
@ KILL_TIMEOUT
Definition: sql_class.h:2664
@ NOT_KILLED
Definition: sql_class.h:2661
std::vector< char > m_connection_attributes
Session's connection attributes for the connected client.
Definition: sql_class.h:1120
Locked_tables_list locked_tables_list
Definition: sql_class.h:2798
void get_definer(LEX_USER *definer)
Definition: sql_class.cc:2526
const char * m_trans_log_file
The binary log position of the transaction.
Definition: sql_class.h:1890
bool is_commit_in_middle_of_statement
Definition: sql_class.h:3874
Diagnostics_area * get_stmt_da()
Returns first Diagnostics Area for the current statement.
Definition: sql_class.h:3230
mysql_cond_t COND_group_replication_connection_cond_var
Definition: sql_class.h:4694
std::atomic< bool > m_is_connection_admin
Flag that indicates if the user of current session has CONNECTION_ADMIN privilege.
Definition: sql_class.h:4641
void inc_status_select_full_range_join()
Definition: sql_class.cc:2401
Diagnostics_area m_parser_da
cf.
Definition: sql_class.h:4348
void notify_shared_lock(MDL_context_owner *ctx_in_use, bool needs_thr_lock_abort) override
A callback to the server internals that is used to address special cases of the locking protocol.
Definition: sql_class.cc:1657
const USER_CONN * get_user_connect() const
Definition: sql_class.h:2373
void shutdown_clone_vio()
Shutdown clone vio, if active.
Definition: sql_class.cc:1948
void pin_gtid()
Defer freeing owned GTID and SID till unpinned.
Definition: sql_class.h:3748
PSI_idle_locker_state m_idle_state
Idle instrumentation state.
Definition: sql_class.h:2442
bool is_plugin_fake_ddl() const
Definition: sql_class.h:4535
bool arg_of_last_insert_id_function
Definition: sql_class.h:2131
void set_skip_readonly_check()
Definition: sql_class.h:1901
Se_GTID_flag
SE GTID persistence flag types.
Definition: sql_class.h:3727
@ SE_GTID_PERSIST_EXPLICIT
Explicit request for SE to persist GTID for current transaction.
Definition: sql_class.h:3737
@ SE_GTID_RESET_LOG
If RESET log in progress.
Definition: sql_class.h:3735
@ SE_GTID_CLEANUP
Cleanup GTID during unpin.
Definition: sql_class.h:3731
@ SE_GTID_PERSIST
SE would persist GTID for current transaction.
Definition: sql_class.h:3733
@ SE_GTID_MAX
Max element holding the biset size.
Definition: sql_class.h:3739
@ SE_GTID_PIN
Pin owned GTID.
Definition: sql_class.h:3729
bool se_persists_gtid_explicit() const
Definition: sql_class.h:3798
bool for_debug_only_is_set_persist_options
Definition: sql_class.h:1208
void rpl_reattach_engine_ha_data()
When the thread is a binlog or slave applier it reattaches the engine ha_data associated with it and ...
Definition: sql_class.cc:2958
bool release_resources_done() const
Definition: sql_class.cc:1313
bool is_operating_substatement_implicitly
Definition: sql_class.h:2306
void update_slow_query_status()
Evaluate the current time, and if it exceeds the long-query-time setting, mark the query as slow.
Definition: sql_class.cc:3228
uint tmp_table
Definition: sql_class.h:2481
Commit_error
Definition: sql_class.h:2639
@ CE_NONE
Definition: sql_class.h:2640
@ CE_COMMIT_ERROR
Definition: sql_class.h:2644
@ CE_ERROR_COUNT
Definition: sql_class.h:2645
@ CE_SYNC_ERROR
Definition: sql_class.h:2643
@ CE_FLUSH_ERROR
Definition: sql_class.h:2641
@ CE_FLUSH_GNO_EXHAUSTED_ERROR
Definition: sql_class.h:2642
Security_context m_main_security_ctx
Definition: sql_class.h:1282
malloc_unordered_map< std::string, User_level_lock * > ull_hash
Definition: sql_class.h:1489
static const char *const DEFAULT_WHERE
Definition: sql_class.h:1094
void reset_skip_readonly_check()
Definition: sql_class.h:1905
Global_read_lock global_read_lock
Definition: sql_class.h:2078
void inc_sent_row_count(ha_rows count)
Definition: sql_class.cc:2367
bool thread_specific_used
is set if some thread specific value(s) used in a statement.
Definition: sql_class.h:2735
void set_open_tables(TABLE *open_tables_arg)
Assign a new value to open_tables.
Definition: sql_class.h:4224
bool owned_gtid_is_empty()
Definition: sql_class.h:3847
resourcegroups::Resource_group_ctx m_resource_group_ctx
Resource group context indicating the current resource group and the name of the resource group to sw...
Definition: sql_class.h:1021
enum_reset_lex
Definition: sql_class.h:1997
@ DO_NOT_RESET_LEX
Definition: sql_class.h:1997
@ RESET_LEX
Definition: sql_class.h:1997
uchar password
Definition: sql_class.h:2692
const Cost_model_server * cost_model() const
Retrieve the optimizer cost model for this connection.
Definition: sql_class.h:4393
void set_proc_info(const char *proc_info)
Definition: sql_class.h:1469
ulonglong sql_mode_t
Definition: sql_lexer_thd.h:36
void start_disposal()
Set THD in ACTIVE life stage to disposal stage.
Definition: sql_class.cc:1326
Diagnostics_area * get_query_rewrite_plugin_da()
Returns thread-local Diagnostics Area to be used by query rewrite plugins.
Definition: sql_class.h:3260
bool in_lock_tables
Definition: sql_class.h:2725
sql_digest_state m_digest_state
Top level statement digest.
Definition: sql_class.h:2422
ulonglong found_rows() const
Definition: sql_class.h:3102
Definition: table.h:2791
Definition: sql_class.h:247
void restore_mode()
Restore original memory counter mode.
Definition: sql_class.h:279
void no_error_mode()
Set NO ERROR memory counter mode.
Definition: sql_class.h:283
ulonglong glob_mem_counter
Definition: sql_class.h:254
void set_orig_mode(uint mode_arg)
Function sets original memory counter mode.
Definition: sql_class.h:297
void set_curr_mode(uint mode_arg)
Function sets current memory counter mode.
Definition: sql_class.h:291
void flush()
Function flushes memory counters before deleting the memory counter object.
Definition: sql_class.cc:284
void free_cnt(size_t size)
Decrease memory counter at 'free' operation.
Definition: sql_class.cc:231
bool is_error() const
Check if memory counter error is issued.
Definition: sql_class.h:303
ulonglong mem_counter
Definition: sql_class.h:252
void set_thd_error_status() const
Set THD error status using memory counter diagnostics area.
Definition: sql_class.cc:349
THD * m_thd
Definition: sql_class.h:250
int reset()
Function resets current memory counter mode and adjusts global memory counter according to thread mem...
Definition: sql_class.cc:246
Diagnostics_area m_da
Definition: sql_class.h:251
bool is_error_mode() const
Check if memory counter is in error mode.
Definition: sql_class.h:313
~Thd_mem_cnt()
Definition: sql_class.h:264
ulonglong max_conn_mem
Definition: sql_class.h:253
bool m_enabled
Definition: sql_class.h:249
void alloc_cnt(size_t size)
Increase memory counter at 'alloc' operation.
Definition: sql_class.cc:165
void set_thd(THD *thd)
Definition: sql_class.h:268
uint orig_mode
Definition: sql_class.h:257
int generate_error(int err_no, ulonglong mem_limit, ulonglong mem_size)
Generate OOM error and set therad to KILL_CONNECTION state.
Definition: sql_class.cc:305
void disable()
Definition: sql_class.cc:152
uint curr_mode
Definition: sql_class.h:256
bool is_error_log_mode() const
Check if memory counter is in error log mode.
Definition: sql_class.h:319
bool is_connection_stage
Definition: sql_class.h:259
void enable()
Definition: sql_class.h:269
Thd_mem_cnt()
Definition: sql_class.h:263
This class represents abstract time zone and provides basic interface for MYSQL_TIME <-> my_time_t co...
Definition: tztime.h:49
Definition: transaction_info.h:53
This class keeps the context of transactional DDL statements.
Definition: sql_class.h:888
void post_ddl()
End the transactional context created by calling post ddl hook for engine on which table is being cre...
Definition: sql_class.cc:3303
dd::String_type m_tablename
Definition: sql_class.h:917
void init(dd::String_type db, dd::String_type tablename, const handlerton *hton)
Initialize the transactional ddl context when executing CREATE TABLE ... SELECT command with engine w...
Definition: sql_class.cc:3253
~Transactional_ddl_context()
Definition: sql_class.h:894
THD * m_thd
Definition: sql_class.h:910
Transactional_ddl_context(THD *thd)
Definition: sql_class.h:890
dd::String_type m_db
Definition: sql_class.h:916
bool inited()
Definition: sql_class.h:902
const handlerton * m_hton
Definition: sql_class.h:913
void rollback()
Remove the table share used while creating the table, if the transaction is being rolledback.
Definition: sql_class.cc:3271
@ XA_NOTR
Definition: xa.h:298
std::unordered_map, but with my_malloc and collation-aware comparison.
Definition: map_helpers.h:210
RAII class for immunizing the THD from kill operations.
Definition: dd_kill_immunizer.h:46
Definition: dictionary_client.h:149
The handler class is the interface for dynamically loadable storage engines.
Definition: handler.h:4412
std::unordered_map, but with my_malloc, so that you can track the memory used using PSI memory keys.
Definition: map_helpers.h:148
A (partial) implementation of std::deque allocating its blocks on a MEM_ROOT.
Definition: mem_root_deque.h:110
Definition: partition_info.h:209
Definition: sp_cache.cc:42
Definition: sp_rcontext.h:77
To be used for pool-of-threads (implemented differently on various OSs)
Definition: sql_class.h:204
void * data
Definition: sql_class.h:206
~thd_scheduler()=default
thd_scheduler()
Definition: sql_class.h:208
Definition: item_func.h:2953
#define mysql_mutex_lock(M)
Definition: mysql_mutex.h:50
#define mysql_mutex_unlock(M)
Definition: mysql_mutex.h:57
#define PSI_THREAD_CALL(M)
Definition: psi_thread.h:36
#define U
Definition: ctype-tis620.cc:75
thread_local THD * current_thd
Definition: current_thd.cc:26
durability_properties
Definition: dur_prop.h:31
static bool report_error(THD *thd, int error_code, Sql_condition::enum_severity_level level, Args... args)
Definition: error_handler.cc:291
Fido Client Authentication nullptr
Definition: fido_client_plugin.cc:222
Rows_log_event * binlog_get_pending_rows_event(bool is_transactional) const
This function retrieves a pending row event from a cache which is specified through the parameter is_...
Definition: binlog.cc:9567
bool is_ddl_gtid_compatible()
Definition: binlog.cc:10636
bool is_binlog_cache_empty(bool is_transactional) const
Return true if the statement/transaction cache is currently empty, false otherwise.
Definition: binlog.cc:9294
int binlog_write_row(TABLE *table, bool is_transactional, const uchar *new_data, const unsigned char *extra_row_info)
Definition: binlog.cc:11092
int decide_logging_format(Table_ref *tables)
Decide on logging format to use for the statement and issue errors or warnings as needed.
Definition: binlog.cc:9944
bool binlog_configure_trx_cache_size(ulong new_size)
Configure size of binlog transaction cache.
Definition: binlog.cc:9358
int binlog_update_row(TABLE *table, bool is_transactional, const uchar *old_data, const uchar *new_data, const uchar *extra_row_info)
Definition: binlog.cc:11117
Rows_log_event * binlog_prepare_pending_rows_event(TABLE *table, uint32 serv_id, size_t needed, bool is_transactional, const unsigned char *extra_row_info, uint32 source_part_id=INT_MAX)
Definition: binlog.cc:10796
int binlog_delete_row(TABLE *table, bool is_transactional, const uchar *old_data, const unsigned char *extra_row_info)
Definition: binlog.cc:11188
bool is_dml_gtid_compatible(bool some_transactional_table, bool some_non_transactional_table, bool non_transactional_tables_are_tmp)
is_dml_gtid_compatible() and is_ddl_gtid_compatible() check if the statement that is about to be proc...
Definition: binlog.cc:10718
int binlog_query(enum_binlog_query_type qtype, const char *query, size_t query_len, bool is_trans, bool direct, bool suppress_use, int errcode)
Log the current query.
Definition: binlog.cc:11502
void add_to_binlog_accessed_dbs(const char *db)
Definition: binlog.cc:9595
void issue_unsafe_warnings()
Auxiliary method used by binlog_query() to raise warnings.
Definition: binlog.cc:11444
int binlog_write_table_map(TABLE *table, bool is_transactional, bool binlog_rows_query)
This function writes a table map to the binary log.
Definition: binlog.cc:9522
int binlog_setup_trx_data()
Definition: binlog.cc:9319
void unlock_global_read_lock(THD *thd)
Unlock global read lock.
Definition: lock.cc:1091
bool lock_global_read_lock(THD *thd)
Take global read lock, wait if there is protection against lock.
Definition: lock.cc:1047
bool make_global_read_lock_block_commit(THD *thd)
Make global read lock also block commits.
Definition: lock.cc:1121
static std::atomic< int32 > m_atomic_active_requests
Definition: sql_class.h:866
void set_explicit_lock_duration(THD *thd)
Set explicit duration for metadata locks which are used to implement GRL.
Definition: lock.cc:1149
void my_error(int nr, myf MyFlags,...)
Fill in and print a previously registered error message.
Definition: my_error.cc:216
char * strmake_root(MEM_ROOT *root, const char *str, size_t len)
Definition: my_alloc.cc:286
char * strdup_root(MEM_ROOT *root, const char *str)
Definition: my_alloc.cc:278
void * memdup_root(MEM_ROOT *root, const void *str, size_t len)
Definition: my_alloc.cc:295
MYSQL_PLUGIN_IMPORT CHARSET_INFO * default_charset_info
Definition: charset.cc:411
size_t dirname_length(const char *name)
Get the string length of the directory part of name, including the last FN_LIBCHAR.
Definition: mf_dirname.cc:62
void reset_for_next_command()
Definition: sql_parse.cc:5136
struct PSI_idle_locker PSI_idle_locker
Definition: psi_idle_bits.h:41
unsigned int PSI_stage_key
Instrumented stage key.
Definition: psi_stage_bits.h:43
struct PSI_statement_locker PSI_statement_locker
Definition: psi_statement_bits.h:98
struct PSI_thread PSI_thread
Definition: psi_thread_bits.h:82
struct PSI_transaction_locker PSI_transaction_locker
Definition: psi_transaction_bits.h:41
static constexpr unsigned PSI_INSTRUMENT_ME
Definition: psi_bits.h:43
#define mysql_mutex_assert_not_owner(M)
Wrapper, to use safe_mutex_assert_not_owner with instrumented mutexes.
Definition: mysql_mutex.h:126
#define mysql_mutex_assert_owner(M)
Wrapper, to use safe_mutex_assert_owner with instrumented mutexes.
Definition: mysql_mutex.h:112
#define MYSQL_SET_STATEMENT_TEXT(LOCKER, P1, P2)
Definition: mysql_statement.h:107
#define MYSQL_SET_STATEMENT_QUERY_ID(LOCKER, P1)
Definition: mysql_statement.h:116
static int flags[50]
Definition: hp_test1.cc:40
static int flag
Definition: hp_test1.cc:40
Instrumentation helpers for mysys threads.
struct MYSQL_LEX_CSTRING LEX_CSTRING
Definition: lex_string.h:42
enum_locked_tables_mode
Type of locked tables mode.
Definition: locked_tables_list.h:47
@ LTM_LOCK_TABLES
Definition: locked_tables_list.h:49
@ LTM_PRELOCKED_UNDER_LOCK_TABLES
Definition: locked_tables_list.h:51
@ LTM_NONE
Definition: locked_tables_list.h:48
A better implementation of the UNIX ctype(3) library.
MYSQL_PLUGIN_IMPORT CHARSET_INFO * system_charset_info
Definition: mysqld.cc:1545
MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_latin1
Definition: ctype-latin1.cc:368
This file follows Google coding style, except for the name MEM_ROOT (which is kept for historical rea...
This file includes constants used by all storage engines.
my_off_t ha_rows
Definition: my_base.h:1140
enum_server_command
A list of all MySQL protocol commands.
Definition: my_command.h:48
Header for compiler-dependent features.
#define SUPPRESS_TSAN
Definition: my_compiler.h:149
#define DBUG_EXECUTE_IF(keyword, a1)
Definition: my_dbug.h:171
#define DBUG_PRINT(keyword, arglist)
Definition: my_dbug.h:181
#define DBUG_TRACE
Definition: my_dbug.h:146
Some integer typedefs for easier portability.
int myf
Definition: my_inttypes.h:94
unsigned long long int ulonglong
Definition: my_inttypes.h:56
ulonglong my_off_t
Definition: my_inttypes.h:72
unsigned char uchar
Definition: my_inttypes.h:52
long long int longlong
Definition: my_inttypes.h:55
#define MYF(v)
Definition: my_inttypes.h:97
uint16_t uint16
Definition: my_inttypes.h:65
uint32_t uint32
Definition: my_inttypes.h:67
Common #defines and includes for file and socket I/O.
#define FN_REFLEN
Definition: my_io.h:83
Defines various enable/disable and HAVE_ macros related to the performance schema instrumentation sys...
enum_sql_command
Definition: my_sqlcommand.h:46
@ SQLCOM_END
Definition: my_sqlcommand.h:207
Common header for many mysys elements.
uint64_t table_map
Definition: my_table_map.h:30
Types to make different thread packages compatible.
pthread_t my_thread_t
Definition: my_thread_bits.h:48
uint32 my_thread_id
Definition: my_thread_local.h:34
static int count
Definition: myisam_ftdump.cc:43
static bool backup
Definition: myisampack.cc:195
unsigned int STDCALL mysql_errno(MYSQL *mysql)
Definition: client.cc:9088
Common definition between mysql server & client.
@ SERVER_STATUS_IN_TRANS
Is raised when a multi-statement transaction has been started, either explicitly, by means of BEGIN o...
Definition: mysql_com.h:815
#define SCRAMBLE_LENGTH
Length of random string sent by server on handshake; this is also length of obfuscated password,...
Definition: mysql_com.h:128
Definitions private to the server, used in the networking layer to notify specific events.
Instrumentation helpers for conditions.
ABI for instrumented mutexes.
Log error(cerr, "ERROR")
Instrumentation helpers for statements.
char * user
Definition: mysqladmin.cc:60
const char * host
Definition: mysqladmin.cc:59
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1052
Definition: buf0block_hint.cc:30
The version of the current data dictionary table definitions.
Definition: dictionary_client.h:43
Char_string_template< String_type_allocator > String_type
Definition: string_type.h:51
Definition: os0file.h:86
bool length(const dd::Spatial_reference_system *srs, const Geometry *g1, double *length, bool *null) noexcept
Computes the length of linestrings and multilinestrings.
Definition: length.cc:76
bool empty(const Histogram &histogram)
Return true if 'histogram' was built on an empty table.
Definition: histogram.h:672
Provides atomic access in shared-exclusive modes.
Definition: shared_spin_lock.h:79
bool is_active(space_id_t space_id, bool get_latch=true)
Definition: trx0purge.cc:1159
std::set< Key, Compare, ut::allocator< Key > > set
Specialization of set which uses ut_allocator.
Definition: ut0new.h:2883
std::list< T, ut::allocator< T > > list
Specialization of list which uses ut_allocator.
Definition: ut0new.h:2879
This contains the declaration of class Opt_trace_context, which is needed to declare THD.
Performance schema instrumentation (declarations).
Instrumentation helpers for mutexes.
Performance schema instrumentation interface.
Performance schema instrumentation interface.
PSI_memory_key key_memory_THD_handler_tables_hash
Definition: psi_memory_key.cc:88
PSI_memory_key key_memory_user_var_entry
Definition: psi_memory_key.cc:144
PSI_memory_key key_memory_User_level_lock
Definition: psi_memory_key.cc:92
Performance schema instrumentation interface.
Performance schema instrumentation interface.
Performance schema instrumentation interface.
Performance schema instrumentation interface.
#define OPTION_NOT_AUTOCOMMIT
Definition: query_options.h:74
#define OPTION_BEGIN
Definition: query_options.h:75
repeated Source source
Definition: replication_asynchronous_connection_failover.proto:42
enum_check_fields
Definition: field.h:172
enum_tx_isolation
Definition: handler.h:3029
ha_notification_type
Definition: handler.h:933
char empty_c_string[1]
Definition: sql_class.cc:127
PSI_thread * thd_get_psi(THD *thd)
Get reference to Performance Schema object for THD object.
Definition: sql_thd_api.cc:109
void my_message_sql(uint error, const char *str, myf MyFlags)
All global error messages are sent here where the first one is stored for the client.
Definition: mysqld.cc:3779
void my_eof(THD *thd)
A short cut for thd->get_stmt_da()->set_eof_status().
Definition: sql_class.cc:3319
void thd_enter_stage(void *opaque_thd, const PSI_stage_info *new_stage, PSI_stage_info *old_stage, const char *src_function, const char *src_file, int src_line)
Definition: sql_thd_internal_api.cc:210
bool is_xa_tran_detached_on_prepare(const THD *thd)
Returns true if xa transactions are detached as part of executing XA PREPARE.
Definition: sql_class.h:4793
constexpr size_t PREALLOC_NUM_HA
Definition: sql_class.h:192
void thd_exit_cond(void *opaque_thd, const PSI_stage_info *stage, const char *src_function, const char *src_file, int src_line)
Set thread leaving a condition.
Definition: sql_thd_internal_api.cc:201
bool add_item_to_list(THD *thd, Item *item)
Definition: sql_class.cc:3020
enum_mem_cnt_mode
Definition: sql_class.h:224
@ MEM_CNT_DEFAULT
Memory counter object doesn't update global memory counter and doesn't throw OOM error.
Definition: sql_class.h:229
@ MEM_CNT_GENERATE_ERROR
if MEM_CNT_GENERATE_ERROR is set, memory counter object generates OOM error if any.
Definition: sql_class.h:239
@ MEM_CNT_UPDATE_GLOBAL_COUNTER
if MEM_CNT_UPDATE_GLOBAL_COUNTER is set, memory counter object updates global memory counter.
Definition: sql_class.h:234
@ MEM_CNT_GENERATE_LOG_ERROR
if MEM_CNT_GENERATE_LOG_ERROR is set, memory counter object generates OOM error to error log if any.
Definition: sql_class.h:244
thread_local TDM expected_from_debug_flag
Definition: sql_class.h:198
Secondary_engine_optimization
Enum that represents which phase of secondary engine optimization the current statement is in.
Definition: sql_class.h:704
@ SECONDARY
The current statement should use tables from a secondary storage engine if possible.
@ PRIMARY_ONLY
The current statement should only use tables from primary storage engines.
@ PRIMARY_TENTATIVELY
The current statement should only use tables from the primary storage engine.
bool is_engine_substitution_allowed(const THD *thd)
Check if engine substitution is allowed in the current thread context.
Definition: sql_class.h:4748
void my_ok(THD *thd, ulonglong affected_rows=0, ulonglong id=0, const char *message=nullptr)
A short cut for thd->get_stmt_da()->set_ok_status().
Definition: sql_class.cc:3313
void thd_enter_cond(void *opaque_thd, mysql_cond_t *cond, mysql_mutex_t *mutex, const PSI_stage_info *stage, PSI_stage_info *old_stage, const char *src_function, const char *src_file, int src_line)
Set thread entering a condition.
Definition: sql_thd_internal_api.cc:188
char const * show_system_thread(enum_thread_type thread)
Definition: sql_class.h:754
#define RETURN_NAME_AS_STRING(NAME)
void thd_set_waiting_for_disk_space(void *opaque_thd, const bool waiting)
Definition: sql_thd_internal_api.cc:221
TDM
Definition: sql_class.h:197
@ ZERO
@ NOT_AVAILABLE
unsigned int thd_get_current_thd_terminology_use_previous()
Return @session.terminology_use_previous for the current THD.
Definition: sql_thd_api.cc:713
void thd_set_psi(THD *thd, PSI_thread *psi)
Set reference to Performance Schema object for THD object.
Definition: sql_thd_api.cc:130
bool secondary_engine_lock_tables_mode(const THD &cthd)
Return lock_tables_mode for secondary engine.
Definition: sql_class.h:4724
struct rpl_event_coordinates LOG_POS_COORD
the struct aggregates two parameters that identify an event uniquely in scope of communication of a p...
I_List< Item_change_record > Item_change_list
Definition: sql_class.h:544
File containing constants that can be used throughout the server.
enum_mark_columns
Definition: sql_const.h:229
static MEM_ROOT mem
Definition: sql_servers.cc:99
Our own string classes, used pervasively throughout the executor.
case opt name
Definition: sslopt-case.h:33
Definition: binlog.h:89
Definition: m_ctype.h:385
TODO: Move this structure to libbinlogevents/include/control_events.h when we start using C++11.
Definition: rpl_gtid.h:1066
bool is_empty() const
Return true if sidno is zero (and assert that gno is zero too in this case).
Definition: rpl_gtid.h:1089
void dbug_print(const Sid_map *sid_map, const char *text="", bool need_lock=false) const
Print this Gtid to the trace file if debug is enabled; no-op otherwise.
Definition: rpl_gtid.h:1149
void clear()
Set both components to 0.
Definition: rpl_gtid.h:1073
rpl_sidno sidno
SIDNO of this Gtid.
Definition: rpl_gtid.h:1068
Storage engine specific thread local data.
Definition: sql_class.h:785
void * ha_ptr_backup
A memorizer to engine specific "native" transaction object to provide storage engine detach-re-attach...
Definition: sql_class.h:801
void * ha_ptr
Storage engine specific thread local data.
Definition: sql_class.h:790
Ha_data()
Definition: sql_class.h:820
plugin_ref lock
NULL: engine is not bound to this thread non-NULL: engine is bound to this thread,...
Definition: sql_class.h:818
Ha_trx_info ha_info[2]
0: Life time: one statement within a transaction.
Definition: sql_class.h:812
Definition: table.h:2658
The LEX object currently serves three different purposes:
Definition: sql_lex.h:3710
Definition: binlog.h:115
Metadata lock object key.
Definition: mdl.h:365
The MEM_ROOT is a simple arena, where allocations are carved out of larger blocks.
Definition: my_alloc.h:83
void * Alloc(size_t length)
Allocate memory.
Definition: my_alloc.h:145
Definition: mysql_lex_string.h:40
const char * str
Definition: mysql_lex_string.h:41
size_t length
Definition: mysql_lex_string.h:42
Definition: mysql_lex_string.h:35
Definition: lock.h:39
Definition: mysql_com_server.h:59
Definition: mysql_com.h:913
State data storage for start_idle_wait_v1_t.
Definition: psi_idle_bits.h:52
Stage instrument information.
Definition: psi_stage_bits.h:74
Interface for an instrumented stage progress.
Definition: psi_stage_bits.h:63
State data storage for get_thread_statement_locker_v5_t.
Definition: psi_statement_bits.h:166
State data storage for get_thread_transaction_locker_v1_t, get_thread_transaction_locker_v1_t.
Definition: psi_transaction_bits.h:53
Definition: com_data.h:54
Definition: transaction_info.h:44
Per thread status variables.
Definition: system_variables.h:511
ulonglong last_query_partial_plans
Definition: system_variables.h:584
double last_query_cost
Definition: system_variables.h:583
Definition: table.h:1399
Definition: sql_lexer_thd.h:55
sql_mode_t sql_mode
Definition: sql_lexer_thd.h:56
const CHARSET_INFO * character_set_client
Definition: sql_lexer_thd.h:57
An utility struct for Attachable_trx.
Definition: sql_class.h:1933
bool m_in_lock_tables
THD::in_lock_tables value.
Definition: sql_class.h:1972
void backup(THD *thd)
Definition: sql_class.cc:356
ulonglong m_thd_option_bits
THD options.
Definition: sql_class.h:1963
~Transaction_state()
Definition: sql_class.cc:3028
void restore(THD *thd)
Definition: sql_class.cc:373
PSI_transaction_locker * m_transaction_psi
Current transaction instrumentation.
Definition: sql_class.h:1966
Prealloced_array< Ha_data, PREALLOC_NUM_HA > m_ha_data
Ha_data array.
Definition: sql_class.h:1954
uint m_server_status
Server status flags.
Definition: sql_class.h:1969
bool m_time_zone_used
Current time zone (i.e.
Definition: sql_class.h:1983
bool m_transaction_rollback_request
Transaction rollback request flag.
Definition: sql_class.h:1993
Transaction_ctx * m_trx
Transaction_ctx instance.
Definition: sql_class.h:1957
Open_tables_backup m_open_tables_state
Open-tables state.
Definition: sql_class.h:1945
bool m_tx_read_only
Transaction read-only state.
Definition: sql_class.h:1960
sql_mode_t m_sql_mode
SQL_MODE.
Definition: sql_class.h:1948
Transaction_state()
Definition: sql_class.cc:3024
enum_sql_command m_sql_command
SQL-command.
Definition: sql_class.h:1940
Query_tables_list * m_query_tables_list
Definition: sql_class.h:1942
enum_tx_isolation m_tx_isolation
Transaction isolation level.
Definition: sql_class.h:1951
Definition: sql_timer.cc:54
Definition: thr_lock.h:119
For locks with EXPLICIT duration, MDL returns a new ticket every time a lock is granted.
Definition: item_func.cc:5196
Definition: violite.h:318
void * ssl_arg
Definition: violite.h:414
Bison "location" class.
Definition: parse_location.h:43
This is a POD.
Definition: uuid.h:61
void clear()
Set to all zeros.
Definition: uuid.h:63
handlerton is a singleton structure - one instance per storage engine - to provide access to storage ...
Definition: handler.h:2622
Replacement of system's struct timeval to ensure we can carry 64 bit values even on a platform which ...
Definition: my_time_t.h:45
An instrumented cond structure.
Definition: mysql_cond_bits.h:50
An instrumented mutex structure.
Definition: mysql_mutex_bits.h:50
Definition: mysql_com.h:1108
Definition: resource_group_basic_types.h:54
Definition: result.h:30
the struct aggregates two parameters that identify an event uniquely in scope of communication of a p...
Definition: sql_class.h:333
my_off_t pos
Definition: sql_class.h:335
char * file_name
Definition: sql_class.h:334
State data storage for digest_start, digest_add_token.
Definition: sql_digest_stream.h:36
Definition: sql_plugin_ref.h:45
Definition: mysqlslap.cc:217
Definition: sql_connect.h:70
struct xid_t is binary compatible with the XID structure as in the X/Open CAE Specification,...
Definition: xa.h:83
#define MODE_STRICT_TRANS_TABLES
Definition: system_variables.h:140
#define MODE_TIME_TRUNCATE_FRACTIONAL
Definition: system_variables.h:161
#define MODE_NO_ENGINE_SUBSTITUTION
Definition: system_variables.h:155
enum_binlog_format
Definition: system_variables.h:45
@ BINLOG_FORMAT_MIXED
statement if safe, otherwise row - autodetected
Definition: system_variables.h:46
@ BINLOG_FORMAT_ROW
row-based
Definition: system_variables.h:48
@ BINLOG_FORMAT_STMT
statement-based
Definition: system_variables.h:47
#define MODE_STRICT_ALL_TABLES
Definition: system_variables.h:141
thr_lock_type
Definition: thr_lock.h:51
enum_thread_type
Definition: thread_type.h:34
@ NON_SYSTEM_THREAD
Definition: thread_type.h:35
@ SYSTEM_THREAD_BACKGROUND
Definition: thread_type.h:44
@ SYSTEM_THREAD_INIT_FILE
Definition: thread_type.h:48
@ SYSTEM_THREAD_SLAVE_IO
Definition: thread_type.h:36
@ SYSTEM_THREAD_EVENT_SCHEDULER
Definition: thread_type.h:39
@ SYSTEM_THREAD_COMPRESS_GTID_TABLE
Definition: thread_type.h:43
@ SYSTEM_THREAD_SLAVE_WORKER
Definition: thread_type.h:42
@ SYSTEM_THREAD_DD_RESTART
Definition: thread_type.h:46
@ SYSTEM_THREAD_SERVER_UPGRADE
Definition: thread_type.h:49
@ SYSTEM_THREAD_SERVER_INITIALIZE
Definition: thread_type.h:47
@ SYSTEM_THREAD_SLAVE_SQL
Definition: thread_type.h:37
@ SYSTEM_THREAD_DD_INITIALIZE
Definition: thread_type.h:45
@ SYSTEM_THREAD_INFO_REPOSITORY
Definition: thread_type.h:41
@ SYSTEM_THREAD_EVENT_WORKER
Definition: thread_type.h:40
@ SYSTEM_THREAD_NDBCLUSTER_BINLOG
Definition: thread_type.h:38
Include file for Sun RPC to compile out of the box.
#define NULL
Definition: types.h:55
unsigned int uint
Definition: uca9-dump.cc:75
Definition: dtoa.cc:594
command
Definition: version_token.cc:280
Vio Lite.
enum_vio_type
Definition: violite.h:79
#define SSL_handle
Definition: violite.h:452
static int all(site_def const *s, node_no node)
Definition: xcom_transport.cc:872