MySQL  8.0.18
Source Code Documentation
Update_rows_log_event Class Reference

Log row updates with a before image. More...

#include <log_event.h>

Inheritance diagram for Update_rows_log_event:
Rows_log_event binary_log::Update_rows_event binary_log::Rows_event Log_event binary_log::Rows_event binary_log::Binary_log_event binary_log::Binary_log_event

Public Types

enum  { TYPE_CODE = binary_log::UPDATE_ROWS_EVENT }
 
- Public Types inherited from Rows_log_event
enum  row_lookup_mode {
  ROW_LOOKUP_UNDEFINED = 0, ROW_LOOKUP_NOT_NEEDED = 1, ROW_LOOKUP_INDEX_SCAN = 2, ROW_LOOKUP_TABLE_SCAN = 3,
  ROW_LOOKUP_HASH_SCAN = 4
}
 
enum  enum_error {
  ERR_OPEN_FAILURE = -1, ERR_OK = 0, ERR_TABLE_LIMIT_EXCEEDED = 1, ERR_OUT_OF_MEM = 2,
  ERR_BAD_TABLE_DEF = 3, ERR_RBR_TO_SBR = 4
}
 Enumeration of the errors that can be returned. More...
 
enum  { RLE_NO_FLAGS = 0U }
 
typedef uint16 flag_set
 
- Public Types inherited from binary_log::Rows_event
enum  enum_flag { STMT_END_F = (1U << 0), NO_FOREIGN_KEY_CHECKS_F = (1U << 1), RELAXED_UNIQUE_CHECKS_F = (1U << 2), COMPLETE_ROWS_F = (1U << 3) }
 These definitions allow to combine the flags into an appropriate flag set using the normal bitwise operators. More...
 
- Public Types inherited from binary_log::Binary_log_event
enum  enum_post_header_length {
  QUERY_HEADER_MINIMAL_LEN = (4 + 4 + 1 + 2), QUERY_HEADER_LEN = (QUERY_HEADER_MINIMAL_LEN + 2), STOP_HEADER_LEN = 0, START_V3_HEADER_LEN = (2 + ST_SERVER_VER_LEN + 4),
  ROTATE_HEADER_LEN = 8, INTVAR_HEADER_LEN = 0, APPEND_BLOCK_HEADER_LEN = 4, DELETE_FILE_HEADER_LEN = 4,
  RAND_HEADER_LEN = 0, USER_VAR_HEADER_LEN = 0, FORMAT_DESCRIPTION_HEADER_LEN = (START_V3_HEADER_LEN + 1 + LOG_EVENT_TYPES), XID_HEADER_LEN = 0,
  BEGIN_LOAD_QUERY_HEADER_LEN = APPEND_BLOCK_HEADER_LEN, ROWS_HEADER_LEN_V1 = 8, TABLE_MAP_HEADER_LEN = 8, EXECUTE_LOAD_QUERY_EXTRA_HEADER_LEN = (4 + 4 + 4 + 1),
  EXECUTE_LOAD_QUERY_HEADER_LEN, INCIDENT_HEADER_LEN = 2, HEARTBEAT_HEADER_LEN = 0, IGNORABLE_HEADER_LEN = 0,
  ROWS_HEADER_LEN_V2 = 10, TRANSACTION_CONTEXT_HEADER_LEN = 18, VIEW_CHANGE_HEADER_LEN = 52, XA_PREPARE_HEADER_LEN = 0
}
 The lengths for the fixed data part of each event. More...
 
- Public Types inherited from Log_event
enum  enum_skip_reason { EVENT_SKIP_NOT, EVENT_SKIP_IGNORE, EVENT_SKIP_COUNT }
 Enumeration of what kinds of skipping (and non-skipping) that can occur when the slave executes an event. More...
 

Public Member Functions

 Update_rows_log_event (THD *, TABLE *, const Table_id &table_id, MY_BITMAP const *cols_bi, MY_BITMAP const *cols_ai, bool is_transactional, const unsigned char *extra_row_ndb_info)
 
 Update_rows_log_event (THD *, TABLE *, const Table_id &table_id, bool is_transactional, const unsigned char *extra_row_ndb_info)
 
void init (MY_BITMAP const *cols, const MY_BITMAP &cols_to_subtract)
 
 ~Update_rows_log_event () override
 
 Update_rows_log_event (const char *buf, const Format_description_event *description_event)
 
bool read_write_bitmaps_cmp (const TABLE *table) const override
 Compares the table's read/write_set with the columns included in this event's before-image and/or after-image. More...
 
- Public Member Functions inherited from Rows_log_event
 ~Rows_log_event () override
 
void set_flags (flag_set flags_arg)
 
void clear_flags (flag_set flags_arg)
 
flag_set get_flags (flag_set flags_arg) const
 
virtual int pack_info (Protocol *protocol) override
 Stores a string representation of this event in the Protocol. More...
 
int add_row_data (uchar *data, size_t length)
 
virtual size_t get_data_size () override
 
MY_BITMAP const * get_cols () const
 
MY_BITMAP const * get_cols_ai () const
 
size_t get_width () const
 
const Table_idget_table_id () const
 
virtual bool write_data_header (Basic_ostream *ostream) override
 
virtual bool write_data_body (Basic_ostream *ostream) override
 
virtual const char * get_db () override
 
- Public Member Functions inherited from binary_log::Rows_event
 Rows_event (Log_event_type type_arg)
 Constructs an event directly. More...
 
 Rows_event (const char *buf, const Format_description_event *fde)
 The constructor is responsible for decoding the event contained in the buffer. More...
 
virtual ~Rows_event ()
 
unsigned long long get_table_id () const
 
enum_flag get_flags () const
 
uint32_t get_null_bits_len () const
 
unsigned long get_width () const
 
- Public Member Functions inherited from binary_log::Binary_log_event
virtual ~Binary_log_event ()=0
 
 Binary_log_event (const Binary_log_event &)=default
 
 Binary_log_event (Binary_log_event &&)=default
 
Binary_log_eventoperator= (const Binary_log_event &)=default
 
Binary_log_eventoperator= (Binary_log_event &&)=default
 
enum Log_event_type get_event_type () const
 Helper method. More...
 
const Log_event_headerheader () const
 Return a const pointer to the header of the log event. More...
 
Log_event_headerheader ()
 Return a non-const pointer to the header of the log event. More...
 
const Log_event_footerfooter () const
 Return a const pointer to the footer of the log event. More...
 
Log_event_footerfooter ()
 Return a non-const pointer to the footer of the log event. More...
 
Event_readerreader ()
 Returns a reference to the event Event_reader object. More...
 
- Public Member Functions inherited from Log_event
 Log_event (Log_event_header *header, Log_event_footer *footer, enum_event_cache_type cache_type_arg, enum_event_logging_type logging_type_arg)
 This minimal constructor is for when you are not even sure that there is a valid THD. More...
 
 Log_event (THD *thd_arg, uint16 flags_arg, enum_event_cache_type cache_type_arg, enum_event_logging_type logging_type_arg, Log_event_header *header, Log_event_footer *footer)
 
int net_send (Protocol *protocol, const char *log_name, my_off_t pos)
 Only called by SHOW BINLOG EVENTS. More...
 
void * operator new (size_t size)
 
bool wrapper_my_b_safe_write (Basic_ostream *ostream, const uchar *buf, size_t data_length)
 Write the given buffer to the given output stream, updating the checksum if checksums are enabled. More...
 
virtual bool write (Basic_ostream *ostream)
 
time_t get_time ()
 Prints a "session_var=value" string. More...
 
Log_event_type get_type_code () const
 
virtual bool is_sbr_logging_format () const
 Return true if the event has to be logged using SBR for DMLs. More...
 
bool is_valid ()
 
void set_artificial_event ()
 
void set_relay_log_event ()
 
bool is_artificial_event () const
 
bool is_relay_log_event () const
 
bool is_ignorable_event () const
 
bool is_no_filter_event () const
 
bool is_using_trans_cache () const
 
bool is_using_stmt_cache () const
 
bool is_using_immediate_logging () const
 
 Log_event (Log_event_header *header, Log_event_footer *footer)
 
virtual ~Log_event ()
 
void register_temp_buf (char *buf, bool free_in_destructor=true)
 
void free_temp_buf ()
 
const char * get_type_str () const
 Returns the human readable name of this event's type. More...
 
bool is_mts_sequential_exec ()
 Is called from get_mts_execution_mode() to. More...
 
virtual uint8 get_mts_dbs (Mts_db_names *arg, Rpl_filter *rpl_filter)
 The method fills in pointers to event's database name c-strings to a supplied array. More...
 
bool contains_partition_info (bool)
 
virtual uint8 mts_number_dbs ()
 
bool is_mts_group_isolated ()
 
virtual bool starts_group () const
 Events of a certain type can start or end a group of events treated transactionally wrt binlog. More...
 
virtual bool ends_group () const
 
int apply_event (Relay_log_info *rli)
 Apply the event to the database. More...
 
int apply_gtid_event (Relay_log_info *rli)
 Apply the GTID event in curr_group_data to the database. More...
 
int update_pos (Relay_log_info *rli)
 Update the relay log position. More...
 
enum_skip_reason shall_skip (Relay_log_info *rli)
 Decide if the event shall be skipped, and the reason for skipping it. More...
 
virtual int do_apply_event_worker (Slave_worker *w)
 
- Public Member Functions inherited from binary_log::Update_rows_event
 Update_rows_event (const char *buf, const Format_description_event *fde)
 
 Update_rows_event (Log_event_type event_type)
 

Static Public Member Functions

static bool binlog_row_logging_function (THD *thd, TABLE *table, bool is_transactional, const uchar *before_record, const uchar *after_record)
 
- Static Public Member Functions inherited from binary_log::Rows_event
static std::string get_flag_string (enum_flag flag)
 
- Static Public Member Functions inherited from Log_event
static void init_show_field_list (List< Item > *field_list)
 init_show_field_list() prepares the column names and types for the output of SHOW BINLOG EVENTS; it is used only by SHOW BINLOG EVENTS. More...
 
static void operator delete (void *ptr, size_t)
 
static void * operator new (size_t, void *ptr)
 
static void operator delete (void *, void *)
 
static const char * get_type_str (Log_event_type type)
 Returns the human readable name of the given event type. More...
 

Protected Member Functions

virtual Log_event_type get_general_type_code () override
 
virtual int do_before_row_operations (const Slave_reporting_capability *const) override
 
virtual int do_after_row_operations (const Slave_reporting_capability *const, int) override
 
virtual int do_exec_row (const Relay_log_info *const) override
 
virtual int skip_after_image_for_update_event (const Relay_log_info *rli, const uchar *curr_bi_start) override
 Seek past the after-image of an update event, in case a row was processed without reading the after-image. More...
 
- Protected Member Functions inherited from Rows_log_event
 Rows_log_event (THD *, TABLE *, const Table_id &table_id, MY_BITMAP const *cols, bool is_transactional, Log_event_type event_type, const unsigned char *extra_row_ndb_info)
 
 Rows_log_event (const char *row_data, const Format_description_event *description_event)
 
virtual int do_add_row_data (uchar *data, size_t length)
 
int unpack_current_row (const Relay_log_info *const rli, MY_BITMAP const *cols, bool is_after_image, bool only_seek=false)
 Unpack the current row image from the event into m_table->record[0]. More...
 
void decide_row_lookup_algorithm_and_key ()
 
int row_operations_scan_and_key_setup ()
 
int row_operations_scan_and_key_teardown (int error)
 
bool is_auto_inc_in_extra_columns ()
 Helper function to check whether there is an auto increment column on the table where the event is to be applied. More...
 
bool is_rbr_logging_format () const override
 Return true if the event has to be logged using RBR for DMLs. More...
 
- Protected Member Functions inherited from binary_log::Binary_log_event
 Binary_log_event (Log_event_type type_code)
 This constructor is used to initialize the type_code of header object m_header. More...
 
 Binary_log_event (const char **buf, const Format_description_event *fde)
 This constructor will create a new object of Log_event_header and initialize the variable m_header, which in turn will be used to initialize Log_event's member common_header. More...
 
- Protected Member Functions inherited from Log_event
uint32 write_header_to_memory (uchar *buf)
 Writes the common header of this event to the given memory buffer. More...
 
bool write_header (Basic_ostream *ostream, size_t data_length)
 Writes the common-header of this event to the given output stream and updates the checksum. More...
 
bool write_footer (Basic_ostream *ostream)
 
bool need_checksum ()
 A decider of whether to trigger checksum computation or not. More...
 
enum_skip_reason continue_group (Relay_log_info *rli)
 Helper function to ignore an event w.r.t. More...
 

Static Private Member Functions

static binary_log::Log_event_type get_update_rows_event_type (const THD *thd_arg)
 Auxiliary function used in the (THD*, ...) constructor to determine the type code based on configuration options. More...
 

Additional Inherited Members

- Public Attributes inherited from Rows_log_event
uint m_row_count
 
- Public Attributes inherited from binary_log::Rows_event
Extra_row_info m_extra_row_info
 
- Public Attributes inherited from Log_event
char * temp_buf
 
bool m_free_temp_buf_in_destructor
 
ulong exec_time
 
uint32 server_id
 
ulong rbr_exec_mode
 A storage to cache the global system variable's value. More...
 
enum_event_cache_type event_cache_type
 Defines the type of the cache, if any, where the event will be stored before being flushed to disk. More...
 
enum_event_logging_type event_logging_type
 Defines when information, i.e. More...
 
ha_checksum crc
 Placeholder for event checksum while writing to binlog. More...
 
ulong mts_group_idx
 Index in rli->gaq array to indicate a group that this event is purging. More...
 
binary_log::Log_event_headercommon_header
 
The Log_event_header class contains the variable present in the common header More...
 
binary_log::Log_event_footercommon_footer
 
The Log_event_footer class contains the variable present in the common footer. More...
 
Relay_log_infoworker
 MTS: associating the event with either an assigned Worker or Coordinator. More...
 
ulonglong future_event_relay_log_pos
 A copy of the main rli value stored into event to pass to MTS worker rli. More...
 
THDthd
 
db_worker_hash_entrymts_assigned_partitions [MAX_DBS_IN_EVENT_MTS]
 Partition info associate with event to deliver to MTS event applier. More...
 
- Static Public Attributes inherited from binary_log::Binary_log_event
static const int LOG_EVENT_TYPES = (ENUM_END_EVENT - 1)
 
- Protected Types inherited from Log_event
enum  enum_event_cache_type {
  EVENT_INVALID_CACHE = 0, EVENT_STMT_CACHE, EVENT_TRANSACTIONAL_CACHE, EVENT_NO_CACHE,
  EVENT_CACHE_COUNT
}
 
enum  enum_event_logging_type { EVENT_INVALID_LOGGING = 0, EVENT_NORMAL_LOGGING, EVENT_IMMEDIATE_LOGGING, EVENT_CACHE_LOGGING_COUNT }
 
- Protected Attributes inherited from Rows_log_event
Rows_applier_psi_stage m_psi_progress
 
TABLEm_table
 
MY_BITMAP m_cols
 
Hash_slave_rows m_hash
 Hash table that will hold the entries for while using HASH_SCAN algorithm to search and update/delete rows. More...
 
uint m_rows_lookup_algorithm
 The algorithm to use while searching for rows using the before image. More...
 
MY_BITMAP m_cols_ai
 
uint32 m_bitbuf [128/(sizeof(uint32) *8)]
 
uint32 m_bitbuf_ai [128/(sizeof(uint32) *8)]
 
ucharm_rows_buf
 
ucharm_rows_cur
 
ucharm_rows_end
 
const ucharm_curr_row
 
const ucharm_curr_row_end
 
ucharm_key
 
uint m_key_index
 
KEYm_key_info
 
std::set< uchar *, Key_comparem_distinct_keys
 
std::set< uchar *, Key_compare >::iterator m_itr
 
ucharm_distinct_key_spare_buf
 A spare buffer which will be used when saving the distinct keys for doing an index scan with HASH_SCAN search algorithm. More...
 
- Protected Attributes inherited from binary_log::Rows_event
Log_event_type m_type
 
Table_id m_table_id
 Actual event type. More...
 
uint16_t m_flags
 
unsigned long m_width
 Flags for row-level events. More...
 
uint32_t n_bits_len
 The width of the columns bitmap. More...
 
uint16_t var_header_len
 value determined by (m_width + 7) / 8 More...
 
std::vector< uint8_t > columns_before_image
 
std::vector< uint8_t > columns_after_image
 
std::vector< uint8_t > row
 

Detailed Description

Log row updates with a before image.

The event contain several update rows for a table. Note that each event contains only rows for one table.

Also note that the row data consists of pairs of row data: one row for the old data and one row for the new data.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
TYPE_CODE 

Constructor & Destructor Documentation

◆ Update_rows_log_event() [1/3]

Update_rows_log_event::Update_rows_log_event ( THD ,
TABLE ,
const Table_id table_id,
MY_BITMAP const *  cols_bi,
MY_BITMAP const *  cols_ai,
bool  is_transactional,
const unsigned char *  extra_row_ndb_info 
)

◆ Update_rows_log_event() [2/3]

Update_rows_log_event::Update_rows_log_event ( THD thd_arg,
TABLE tbl_arg,
const Table_id table_id,
bool  is_transactional,
const unsigned char *  extra_row_ndb_info 
)

◆ ~Update_rows_log_event()

Update_rows_log_event::~Update_rows_log_event ( )
override

◆ Update_rows_log_event() [3/3]

Update_rows_log_event::Update_rows_log_event ( const char *  buf,
const Format_description_event description_event 
)

Member Function Documentation

◆ binlog_row_logging_function()

bool Update_rows_log_event::binlog_row_logging_function ( THD thd,
TABLE table,
bool  is_transactional,
const uchar before_record,
const uchar after_record 
)
static

◆ do_after_row_operations()

int Update_rows_log_event::do_after_row_operations ( const Slave_reporting_capability * const  ,
int  error 
)
overrideprotectedvirtual

Implements Rows_log_event.

◆ do_before_row_operations()

int Update_rows_log_event::do_before_row_operations ( const Slave_reporting_capability * const  )
overrideprotectedvirtual

Implements Rows_log_event.

◆ do_exec_row()

int Update_rows_log_event::do_exec_row ( const Relay_log_info * const  rli)
overrideprotectedvirtual

Implements Rows_log_event.

◆ get_general_type_code()

virtual Log_event_type Update_rows_log_event::get_general_type_code ( )
inlineoverrideprotectedvirtual

Implements Rows_log_event.

◆ get_update_rows_event_type()

binary_log::Log_event_type Update_rows_log_event::get_update_rows_event_type ( const THD thd_arg)
staticprivate

Auxiliary function used in the (THD*, ...) constructor to determine the type code based on configuration options.

Parameters
thd_argThe THD object for the session.
Returns
One of UPDATE_ROWS_EVENT_V1, PARTIAL_UPDATE_ROWS_EVENT, or UPDATE_ROWS_EVENT.

◆ init()

void Update_rows_log_event::init ( MY_BITMAP const *  cols,
const MY_BITMAP cols_to_subtract 
)

◆ read_write_bitmaps_cmp()

bool Update_rows_log_event::read_write_bitmaps_cmp ( const TABLE table) const
inlineoverridevirtual

Compares the table's read/write_set with the columns included in this event's before-image and/or after-image.

Each subclass (Write/Update/Delete) implements this function by comparing on the image(s) pertinent to the subclass.

Parameters
[in]tableThe table to compare this events bitmaps against.
Return values
trueif sets match
falseotherwise (following bitmap_cmp return logic).

Implements Rows_log_event.

◆ skip_after_image_for_update_event()

int Update_rows_log_event::skip_after_image_for_update_event ( const Relay_log_info rli,
const uchar curr_bi_start 
)
overrideprotectedvirtual

Seek past the after-image of an update event, in case a row was processed without reading the after-image.

An update event may process a row without reading the after-image, e.g. in case of ignored or idempotent errors. To ensure that the read position for the next row is correct, we need to seek past the after-image.

Parameters
rliThe applier context
curr_bi_startThe read position of the beginning of the before-image. (The function compares this with m_curr_row to know if the after-image has been read or not.)
Return values
0Success
ER_*Error code returned by unpack_current_row

Reimplemented from Rows_log_event.


The documentation for this class was generated from the following files: