@@ -58,6 +58,9 @@ def __init__(self, from_packet, event_size, table_map, ctl_connection, **kwargs)
58
58
self .commit_flag = byte2int (self .packet .read (1 )) == 1
59
59
self .sid = self .packet .read (16 )
60
60
self .gno = struct .unpack ('<Q' , self .packet .read (8 ))[0 ]
61
+ self .lt_type = byte2int (self .packet .read (1 ))
62
+ self .last_committed = struct .unpack ('<Q' , self .packet .read (8 ))[0 ]
63
+ self .sequence_number = struct .unpack ('<Q' , self .packet .read (8 ))[0 ]
61
64
62
65
@property
63
66
def gtid (self ):
@@ -73,6 +76,8 @@ def gtid(self):
73
76
def _dump (self ):
74
77
print ("Commit: %s" % self .commit_flag )
75
78
print ("GTID_NEXT: %s" % self .gtid )
79
+ print ("last_committed: %d" % self .last_committed )
80
+ print ("sequence_number: %d" % self .sequence_number )
76
81
77
82
def __repr__ (self ):
78
83
return '<GtidEvent "%s">' % self .gtid
@@ -98,6 +103,37 @@ def dump(self):
98
103
print ()
99
104
100
105
106
+ class XAPrepareEvent (BinLogEvent ):
107
+ """An XA prepare event is generated for a XA prepared transaction.
108
+ Like Xid_event it contans XID of the *prepared* transaction
109
+
110
+ Attributes:
111
+ one_phase: current XA transaction commit method
112
+ xid: serialized XID representation of XA transaction
113
+ """
114
+ def __init__ (self , from_packet , event_size , table_map , ctl_connection , ** kwargs ):
115
+ super (XAPrepareEvent , self ).__init__ (from_packet , event_size , table_map ,
116
+ ctl_connection , ** kwargs )
117
+
118
+ # one_phase is True: XA COMMIT ... ONE PHASE
119
+ # one_phase is False: XA PREPARE
120
+ self .one_phase = (self .packet .read (1 ) != b'\x00 ' )
121
+ self .xid_format_id = struct .unpack ('<I' , self .packet .read (4 ))[0 ]
122
+ gtrid_length = struct .unpack ('<I' , self .packet .read (4 ))[0 ]
123
+ bqual_length = struct .unpack ('<I' , self .packet .read (4 ))[0 ]
124
+ self .xid_gtrid = self .packet .read (gtrid_length )
125
+ self .xid_bqual = self .packet .read (bqual_length )
126
+
127
+ @property
128
+ def xid (self ):
129
+ return self .xid_gtrid .decode () + self .xid_bqual .decode ()
130
+
131
+ def _dump (self ):
132
+ print ("One phase: %s" % self .one_phase )
133
+ print ("XID formatID: %d" % self .xid_format_id )
134
+ print ("XID: %s" % self .xid )
135
+
136
+
101
137
class FormatDescriptionEvent (BinLogEvent ):
102
138
pass
103
139
0 commit comments