Skip to content

Commit

Permalink
Merge branch '3.2' into 3.3
Browse files Browse the repository at this point in the history
  • Loading branch information
9EOR9 committed Dec 31, 2021
2 parents 0489f34 + 0670c38 commit bc7bbd4
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 3 deletions.
2 changes: 2 additions & 0 deletions include/mariadb_rpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,8 @@ struct st_mariadb_rpl_rows_event {
char *column_update_bitmap;
size_t row_data_size;
void *row_data;
size_t extra_data_size;
void *extra_data;
};

struct st_mariadb_rpl_heartbeat_event {
Expand Down
36 changes: 33 additions & 3 deletions libmariadb/mariadb_rpl.c
Original file line number Diff line number Diff line change
Expand Up @@ -370,9 +370,19 @@ MARIADB_RPL_EVENT * STDCALL mariadb_rpl_fetch(MARIADB_RPL *rpl, MARIADB_RPL_EVEN
break;
}
case WRITE_ROWS_EVENT_V1:
case WRITE_ROWS_EVENT:
case UPDATE_ROWS_EVENT_V1:
case UPDATE_ROWS_EVENT:
case DELETE_ROWS_EVENT_V1:
rpl_event->event.rows.type= rpl_event->event_type - WRITE_ROWS_EVENT_V1;
case DELETE_ROWS_EVENT:
if (rpl_event->event_type >= WRITE_ROWS_EVENT)
{
rpl_event->event.rows.type= rpl_event->event_type - WRITE_ROWS_EVENT;
}
else
{
rpl_event->event.rows.type= rpl_event->event_type - WRITE_ROWS_EVENT_V1;
}
if (rpl->fd_header_len == 6)
{
rpl_event->event.rows.table_id= uint4korr(ev);
Expand All @@ -383,6 +393,25 @@ MARIADB_RPL_EVENT * STDCALL mariadb_rpl_fetch(MARIADB_RPL *rpl, MARIADB_RPL_EVEN
}
rpl_event->event.rows.flags= uint2korr(ev);
ev+= 2;
/* ROWS_EVENT V2 has the extra-data field.
See also: https://dev.mysql.com/doc/internals/en/rows-event.html
*/
if (rpl_event->event_type >= WRITE_ROWS_EVENT)
{
rpl_event->event.rows.extra_data_size= uint2korr(ev) - 2;
ev+= 2;
if (rpl_event->event.rows.extra_data_size > 0)
{
if (!(rpl_event->event.rows.extra_data =
(char *)ma_alloc_root(&rpl_event->memroot,
rpl_event->event.rows.extra_data_size)))
goto mem_error;
memcpy(rpl_event->event.rows.extra_data,
ev,
rpl_event->event.rows.extra_data_size);
ev+= rpl_event->event.rows.extra_data_size;
}
}
len= rpl_event->event.rows.column_count= mysql_net_field_length(&ev);
if (!len)
break;
Expand All @@ -391,7 +420,8 @@ MARIADB_RPL_EVENT * STDCALL mariadb_rpl_fetch(MARIADB_RPL *rpl, MARIADB_RPL_EVEN
goto mem_error;
memcpy(rpl_event->event.rows.column_bitmap, ev, (len + 7) / 8);
ev+= (len + 7) / 8;
if (rpl_event->event_type == UPDATE_ROWS_EVENT_V1)
if (rpl_event->event_type == UPDATE_ROWS_EVENT_V1 ||
rpl_event->event_type == UPDATE_ROWS_EVENT)
{
if (!(rpl_event->event.rows.column_update_bitmap =
(char *)ma_alloc_root(&rpl_event->memroot, (len + 7) / 8)))
Expand All @@ -404,7 +434,7 @@ MARIADB_RPL_EVENT * STDCALL mariadb_rpl_fetch(MARIADB_RPL *rpl, MARIADB_RPL_EVEN
{
if (!(rpl_event->event.rows.row_data =
(char *)ma_alloc_root(&rpl_event->memroot, rpl_event->event.rows.row_data_size)))
goto mem_error;
goto mem_error;
memcpy(rpl_event->event.rows.row_data, ev, rpl_event->event.rows.row_data_size);
}
break;
Expand Down

0 comments on commit bc7bbd4

Please sign in to comment.