MCPcopy Create free account
hub / github.com/Tencent/phxsql / binlog_update_row

Method binlog_update_row

phx_percona/percona/sql/binlog.cc:9208–9273  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

9206}
9207
9208int THD::binlog_update_row(TABLE* table, bool is_trans,
9209 const uchar *before_record,
9210 const uchar *after_record,
9211 const uchar* extra_row_info)
9212{
9213 DBUG_ASSERT(is_current_stmt_binlog_format_row() && mysql_bin_log.is_open());
9214 int error= 0;
9215
9216 /**
9217 Save a reference to the original read and write set bitmaps.
9218 We will need this to restore the bitmaps at the end.
9219 */
9220 MY_BITMAP *old_read_set= table->read_set;
9221 MY_BITMAP *old_write_set= table->write_set;
9222
9223 /**
9224 This will remove spurious fields required during execution but
9225 not needed for binlogging. This is done according to the:
9226 binlog-row-image option.
9227 */
9228 binlog_prepare_row_images(table);
9229
9230 size_t const before_maxlen = max_row_length(table, before_record);
9231 size_t const after_maxlen = max_row_length(table, after_record);
9232
9233 Row_data_memory row_data(table, before_maxlen, after_maxlen);
9234 if (!row_data.has_memory())
9235 return HA_ERR_OUT_OF_MEM;
9236
9237 uchar *before_row= row_data.slot(0);
9238 uchar *after_row= row_data.slot(1);
9239
9240 size_t const before_size= pack_row(table, table->read_set, before_row,
9241 before_record);
9242 size_t const after_size= pack_row(table, table->write_set, after_row,
9243 after_record);
9244
9245 /*
9246 Don't print debug messages when running valgrind since they can
9247 trigger false warnings.
9248 */
9249#ifndef HAVE_purify
9250 DBUG_DUMP("before_record", before_record, table->s->reclength);
9251 DBUG_DUMP("after_record", after_record, table->s->reclength);
9252 DBUG_DUMP("before_row", before_row, before_size);
9253 DBUG_DUMP("after_row", after_row, after_size);
9254#endif
9255
9256 Rows_log_event* const ev=
9257 binlog_prepare_pending_rows_event(table, server_id,
9258 before_size + after_size, is_trans,
9259 static_cast<Update_rows_log_event*>(0),
9260 extra_row_info);
9261
9262 if (unlikely(ev == 0))
9263 return HA_ERR_OUT_OF_MEM;
9264
9265 error= ev->add_row_data(before_row, before_size) ||

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected