1#ifndef SESSION_TRACKER_INCLUDED
2#define SESSION_TRACKER_INCLUDED
55#define SESSION_TRACKER_END TRACK_TRANSACTION_STATE
57#define TX_TRACKER_GET(a) \
58 Transaction_state_tracker *a = \
59 (Transaction_state_tracker *)thd->session_tracker.get_tracker( \
60 TRANSACTION_INFO_TRACKER)
Definition: session_tracker.h:185
bool update(THD *thd) override
Enable/disable the tracker based on @session_track_state_change value.
Definition: session_tracker.cc:1441
void reset()
Reset the m_changed flag for next statement.
Definition: session_tracker.cc:1501
Session_state_change_tracker()
Constructor.
Definition: session_tracker.cc:1415
bool enable(THD *thd) override
Initiate the value of m_enabled based on @session_track_state_change value.
Definition: session_tracker.cc:1428
bool store(THD *, String &buf) override
Store the 1byte boolean flag in the specified buffer.
Definition: session_tracker.cc:1456
bool is_state_changed()
find if there is a session state change
Definition: session_tracker.cc:1511
bool check(THD *, set_var *) override
To be invoked when the tracker's system variable is checked (ON_CHECK).
Definition: session_tracker.h:192
void mark_as_changed(THD *thd, LEX_CSTRING tracked_item_name) override
Mark the tracker as changed and associated session attributes accordingly.
Definition: session_tracker.cc:1483
Definition: session_tracker.h:128
void deinit()
Definition: session_tracker.h:165
bool changed_any()
Checks if m_changed flag is set for any of the tracker objects.
Definition: session_tracker.cc:1621
State_tracker * get_tracker(enum_session_tracker tracker) const
Returns the pointer to the tracker object for the specified tracker.
Definition: session_tracker.cc:1591
Session_tracker & operator=(Session_tracker const &)=delete
void claim_memory_ownership(bool claim)
Definition: session_tracker.cc:1549
bool enabled_any()
Checks if m_enabled flag is set for any of the tracker objects.
Definition: session_tracker.cc:1605
bool server_boot_verify(const CHARSET_INFO *char_set, LEX_STRING var_list)
Method called during the server startup to verify the contents of @session_track_system_variables.
Definition: session_tracker.cc:1573
void enable(THD *thd)
Enables the tracker objects.
Definition: session_tracker.cc:1559
Session_tracker(Session_tracker const &)=delete
void init(const CHARSET_INFO *char_set)
Initialize Session_tracker objects and enable them based on the tracker_xxx variables' value that the...
Definition: session_tracker.cc:1535
Session_tracker()=default
Constructor.
void store(THD *thd, String &main_buf)
Stores the session state change information of all changes session state type entities into the speci...
Definition: session_tracker.cc:1636
~Session_tracker()=default
Destructor.
State_tracker * m_trackers[SESSION_TRACKER_END+1]
Definition: session_tracker.h:130
Definition: session_tracker.h:82
bool m_changed
Has the session state type changed ?
Definition: session_tracker.h:88
virtual bool check(THD *thd, set_var *var)=0
To be invoked when the tracker's system variable is checked (ON_CHECK).
State_tracker()
Constructor.
Definition: session_tracker.h:92
virtual bool enable(THD *thd)=0
Called in the constructor of THD.
virtual bool update(THD *thd)=0
To be invoked when the tracker's system variable is updated (ON_UPDATE).
virtual void claim_memory_ownership(bool claim)
Definition: session_tracker.h:117
bool m_enabled
Is tracking enabled for a particular session state type ?
Definition: session_tracker.h:85
bool is_enabled() const
Getters.
Definition: session_tracker.h:98
bool is_changed() const
Definition: session_tracker.h:100
virtual void mark_as_changed(THD *thd, LEX_CSTRING name)=0
Mark the entity as changed.
virtual ~State_tracker()=default
Destructor.
virtual bool store(THD *thd, String &buf)=0
Store changed data into the given buffer.
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:166
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:33
Definition: session_tracker.h:254
uint get_trx_state() const
Get (possibly still incomplete) state.
Definition: session_tracker.h:278
bool check(THD *, set_var *) override
To be invoked when the tracker's system variable is checked (ON_CHECK).
Definition: session_tracker.h:259
Transaction_state_tracker()
Constructor.
Definition: session_tracker.cc:910
enum_tx_state calc_trx_state(thr_lock_type l, bool has_trx)
Helper function: turn table info into table access flag.
Definition: session_tracker.cc:1251
uint tx_reported_state
Definition: session_tracker.h:291
void add_trx_state(THD *thd, uint add)
Add flags pertaining to the current statement or transaction.
Definition: session_tracker.cc:1303
bool enable(THD *thd) override
Called in the constructor of THD.
Definition: session_tracker.h:258
void reset()
Reset the m_changed flag for next statement.
Definition: session_tracker.cc:1234
void end_trx(THD *thd)
Register the end of an (implicit or explicit) transaction.
Definition: session_tracker.cc:1269
enum enum_tx_isol_level tx_isol_level
isolation level
Definition: session_tracker.h:297
void set_read_flags(THD *thd, enum enum_tx_read_flags flags)
Change transaction characteristics.
Definition: session_tracker.cc:1384
enum enum_tx_read_flags tx_read_flags
r/w or r/o set? session default?
Definition: session_tracker.h:294
uint tx_changed
any trackable changes caused by this statement?
Definition: session_tracker.h:288
void clear_trx_state(THD *thd, uint clear)
Change transaction state.
Definition: session_tracker.cc:1288
void set_isol_level(THD *thd, enum enum_tx_isol_level level)
Set isolation level pertaining to the next transaction.
Definition: session_tracker.cc:1401
bool update(THD *thd) override
Enable/disable the tracker based on @session_track_transaction_info's value.
Definition: session_tracker.cc:928
uint tx_curr_state
transaction state
Definition: session_tracker.h:291
bool store(THD *thd, String &buf) override
Store the transaction state (and, optionally, characteristics) as length-encoded string in the specif...
Definition: session_tracker.cc:962
void mark_as_changed(THD *thd, LEX_CSTRING tracked_item_name) override
Mark the tracker as changed.
Definition: session_tracker.cc:1226
enum_tx_changed
Definition: session_tracker.h:281
@ TX_CHG_CHISTICS
characteristics have changed from previous stmt
Definition: session_tracker.h:284
@ TX_CHG_NONE
no changes from previous stmt
Definition: session_tracker.h:282
@ TX_CHG_STATE
state has changed from previous stmt
Definition: session_tracker.h:283
void add_trx_state_from_thd(THD *thd)
Add "unsafe statement" flag if applicable.
Definition: session_tracker.cc:1373
void update_change_flags(THD *thd)
Definition: session_tracker.h:301
set_var_base descendant for assignments to the system variables.
Definition: set_var.h:976
static int flags[50]
Definition: hp_test1.cc:39
Definition: buf0block_hint.cc:29
static mysql_service_status_t clear(reference_caching_channel channel) noexcept
Definition: component.cc:145
static mysql_service_status_t add(reference_caching_channel channel, const char *implementation_name) noexcept
Definition: component.cc:126
#define SESSION_TRACKER_END
Definition: session_tracker.h:55
enum_session_tracker
Definition: session_tracker.h:38
@ SESSION_GTIDS_TRACKER
Definition: session_tracker.h:42
@ SESSION_STATE_CHANGE_TRACKER
Definition: session_tracker.h:41
@ CURRENT_SCHEMA_TRACKER
Definition: session_tracker.h:40
@ TRACK_TRANSACTION_STATE
Definition: session_tracker.h:52
@ TRANSACTION_INFO_TRACKER
Definition: session_tracker.h:43
@ SESSION_SYSVARS_TRACKER
Definition: session_tracker.h:39
enum_tx_isol_level
Transaction isolation level.
Definition: session_tracker.h:237
@ TX_ISOL_INHERIT
not explicitly set, inherit session.tx_isolation
Definition: session_tracker.h:238
@ TX_ISOL_UNCOMMITTED
Definition: session_tracker.h:239
@ TX_ISOL_COMMITTED
Definition: session_tracker.h:240
@ TX_ISOL_REPEATABLE
Definition: session_tracker.h:241
@ TX_ISOL_SERIALIZABLE
Definition: session_tracker.h:242
enum_session_track_transaction_info
Transaction tracking level.
Definition: session_tracker.h:248
@ TX_TRACK_STATE
track transaction status
Definition: session_tracker.h:250
@ TX_TRACK_CHISTICS
track status and characteristics
Definition: session_tracker.h:251
@ TX_TRACK_NONE
do not send tracker items on transaction info
Definition: session_tracker.h:249
enum_tx_read_flags
Transaction access mode.
Definition: session_tracker.h:228
@ TX_READ_INHERIT
not explicitly set, inherit session.tx_read_only
Definition: session_tracker.h:229
@ TX_READ_ONLY
START TRANSACTION READ ONLY, or tx_read_only=1.
Definition: session_tracker.h:230
@ TX_READ_WRITE
START TRANSACTION READ WRITE, or tx_read_only=0.
Definition: session_tracker.h:231
enum_tx_state
Transaction state (no transaction, transaction active, work attached, etc.)
Definition: session_tracker.h:209
@ TX_READ_UNSAFE
non-transaction reads were done
Definition: session_tracker.h:214
@ TX_STMT_DML
a DML statement (known before data is accessed)
Definition: session_tracker.h:221
@ TX_STMT_DDL
a DDL statement
Definition: session_tracker.h:222
@ TX_EMPTY
"none of the below"
Definition: session_tracker.h:210
@ TX_EXPLICIT
an explicit transaction is active
Definition: session_tracker.h:211
@ TX_WRITE_UNSAFE
non-transactional writes were done
Definition: session_tracker.h:216
@ TX_WRITE_TRX
transactional writes were done
Definition: session_tracker.h:215
@ TX_LOCKED_TABLES
LOCK TABLES is active.
Definition: session_tracker.h:220
@ TX_WITH_SNAPSHOT
WITH CONSISTENT SNAPSHOT was used.
Definition: session_tracker.h:219
@ TX_IMPLICIT
an implicit transaction is active
Definition: session_tracker.h:212
@ TX_RESULT_SET
result-set was sent
Definition: session_tracker.h:218
@ TX_STMT_UNSAFE
"unsafe" (non-deterministic like UUID()) stmts
Definition: session_tracker.h:217
@ TX_READ_TRX
transactional reads were done
Definition: session_tracker.h:213
case opt name
Definition: sslopt-case.h:32
Definition: m_ctype.h:422
Definition: mysql_lex_string.h:39
Definition: mysql_lex_string.h:34
thr_lock_type
Definition: thr_lock.h:50