diff --git a/include/mariadb_rpl.h b/include/mariadb_rpl.h index fda15cc0a..089975ad9 100644 --- a/include/mariadb_rpl.h +++ b/include/mariadb_rpl.h @@ -408,6 +408,10 @@ struct st_mariadb_rpl_gtid_event { uint32_t domain_id; uint8_t flags; uint64_t commit_id; + uint32_t format_id; + uint8_t gtrid_len; + uint8_t bqual_len; + MARIADB_STRING xid; }; struct st_mariadb_rpl_annotate_rows_event { diff --git a/libmariadb/mariadb_rpl.c b/libmariadb/mariadb_rpl.c index 28f78fab1..f3b0bbc6c 100644 --- a/libmariadb/mariadb_rpl.c +++ b/libmariadb/mariadb_rpl.c @@ -1609,6 +1609,21 @@ MARIADB_RPL_EVENT * STDCALL mariadb_rpl_fetch(MARIADB_RPL *rpl, MARIADB_RPL_EVEN rpl_event->event.gtid.commit_id= uint8korr(ev); ev+= 8; } + else if (rpl_event->event.gtid.flags & (FL_PREPARED_XA | FL_COMPLETED_XA)) + { + uint16_t len; + RPL_CHECK_POS(ev, ev_end, 6); + rpl_event->event.gtid.format_id= uint4korr(ev); + ev+= 4; + rpl_event->event.gtid.gtrid_len= *ev; + ev++; + rpl_event->event.gtid.bqual_len= *ev; + ev++; + len= rpl_event->event.gtid.gtrid_len + rpl_event->event.gtid.bqual_len; + RPL_CHECK_POS(ev, ev_end, len); + rpl_set_string_and_len(&rpl_event->event.gtid.xid, ev, len); + ev+= len; + } else ev+= 6; break;