| 9206 | } |
| 9207 | |
| 9208 | int 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) || |
nothing calls this directly
no outgoing calls
no test coverage detected