Skip to content

Commit d9d4b74

Browse files
committed
Add more test for GTIDEvent and TableMapEvent
1 parent b758aa5 commit d9d4b74

File tree

3 files changed

+82
-2
lines changed

3 files changed

+82
-2
lines changed

replication/event_test.go

+51
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,54 @@ func (_ *testDecodeSuite) TestMariadbGTIDEvent(c *C) {
4848
c.Assert(ev.IsGroupCommit(), Equals, true)
4949
c.Assert(ev.CommitID, Equals, uint64(0x1716151413121110))
5050
}
51+
52+
func (_ *testDecodeSuite) TestGTIDEventMysql8NewFields(c *C) {
53+
54+
testcases := []struct {
55+
data []byte
56+
expectImmediateCommitTimestamp uint64
57+
expectOriginalCommitTimestamp uint64
58+
expectTransactoinLength uint64
59+
expectImmediateServerVersion uint32
60+
expectOriginalServerVersion uint32
61+
}{
62+
{
63+
// master: mysql-5.7, slave: mysql-8.0
64+
data: []byte("\x00Z\xa7*\u007fD\xa8\x11\xea\x94\u007f\x02B\xac\x19\x00\x02\x02\x01\x00\x00\x00\x00\x00\x00\x02v\x00\x00\x00\x00\x00\x00\x00w\x00\x00\x00\x00\x00\x00\x00\xc1G\x81\x16x\xa0\x85\x00\x00\x00\x00\x00\x00\x00\xfc\xc5\x03\x938\x01\x80\x00\x00\x00\x00"),
65+
expectImmediateCommitTimestamp: 1583812517644225,
66+
expectOriginalCommitTimestamp: 0,
67+
expectTransactoinLength: 965,
68+
expectImmediateServerVersion: 80019,
69+
expectOriginalServerVersion: 0,
70+
},
71+
{
72+
// mysql-5.7 only
73+
data: []byte("\x00Z\xa7*\u007fD\xa8\x11\xea\x94\u007f\x02B\xac\x19\x00\x02\x03\x01\x00\x00\x00\x00\x00\x00\x025\x00\x00\x00\x00\x00\x00\x006\x00\x00\x00\x00\x00\x00\x00"),
74+
expectImmediateCommitTimestamp: 0,
75+
expectOriginalCommitTimestamp: 0,
76+
expectTransactoinLength: 0,
77+
expectImmediateServerVersion: 0,
78+
expectOriginalServerVersion: 0,
79+
},
80+
{
81+
// mysql-8.0 only
82+
data: []byte("\x00\\\xcc\x103D\xa8\x11\xea\xbdY\x02B\xac\x19\x00\x03w\x00\x00\x00\x00\x00\x00\x00\x02x\x00\x00\x00\x00\x00\x00\x00y\x00\x00\x00\x00\x00\x00\x00j0\xb1>x\xa0\x05\xfc\xc3\x03\x938\x01\x00"),
83+
expectImmediateCommitTimestamp: 1583813191872618,
84+
expectOriginalCommitTimestamp: 1583813191872618,
85+
expectTransactoinLength: 963,
86+
expectImmediateServerVersion: 80019,
87+
expectOriginalServerVersion: 80019,
88+
},
89+
}
90+
91+
for _, tc := range testcases {
92+
ev := new(GTIDEvent)
93+
err := ev.Decode(tc.data)
94+
c.Assert(err, IsNil)
95+
c.Assert(ev.ImmediateCommitTimestamp, Equals, tc.expectImmediateCommitTimestamp)
96+
c.Assert(ev.OriginalCommitTimestamp, Equals, tc.expectOriginalCommitTimestamp)
97+
c.Assert(ev.ImmediateServerVersion, Equals, tc.expectImmediateServerVersion)
98+
c.Assert(ev.OriginalServerVersion, Equals, tc.expectOriginalServerVersion)
99+
}
100+
101+
}

replication/row_event.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ type TableMapEvent struct {
6565

6666
// ColumnName list all column names.
6767
ColumnName [][]byte
68-
columnNameString []string
68+
columnNameString []string // the same as ColumnName in string type, just for reuse
6969

7070
// GeometryType stores real type for geometry columns.
7171
GeometryType []uint64

replication/row_event_test.go

+30-1
Original file line numberDiff line numberDiff line change
@@ -764,6 +764,36 @@ func (_ *testDecodeSuite) TestDecodeDatetime2(c *C) {
764764
}
765765
}
766766

767+
func (_ *testDecodeSuite) TestTableMapNullable(c *C) {
768+
/*
769+
create table _null (c1 int null, c2 int not null default '2', c3 timestamp default now(), c4 text);
770+
*/
771+
nullables := []bool{true, false, false, true}
772+
testcases := [][]byte{
773+
// mysql 5.7
774+
[]byte("z\x00\x00\x00\x00\x00\x01\x00\x04test\x00\x05_null\x00\x04\x03\x03\x11\xfc\x02\x00\x02\t"),
775+
// mysql 8.0
776+
[]byte("z\x00\x00\x00\x00\x00\x01\x00\x04test\x00\x05_null\x00\x04\x03\x03\x11\xfc\x02\x00\x02\t\x01\x01\x00\x02\x01\xe0\x04\f\x02c1\x02c2\x02c3\x02c4"),
777+
// mariadb 10.4
778+
[]byte("\x1e\x00\x00\x00\x00\x00\x01\x00\x04test\x00\x05_null\x00\x04\x03\x03\x11\xfc\x02\x00\x02\t"),
779+
// mariadb 10.5
780+
[]byte("\x1d\x00\x00\x00\x00\x00\x01\x00\x04test\x00\x05_null\x00\x04\x03\x03\x11\xfc\x02\x00\x02\t\x01\x01\x00\x02\x01\xe0\x04\f\x02c1\x02c2\x02c3\x02c4"),
781+
}
782+
783+
for _, tc := range testcases {
784+
tableMapEvent := new(TableMapEvent)
785+
tableMapEvent.tableIDSize = 6
786+
err := tableMapEvent.Decode(tc)
787+
c.Assert(err, IsNil)
788+
c.Assert(int(tableMapEvent.ColumnCount), Equals, len(nullables))
789+
for i := 0; i < int(tableMapEvent.ColumnCount); i++ {
790+
available, nullable := tableMapEvent.Nullable(i)
791+
c.Assert(available, Equals, true)
792+
c.Assert(nullable, Equals, nullables[i])
793+
}
794+
}
795+
}
796+
767797
func (_ *testDecodeSuite) TestTableMapOptMetaNames(c *C) {
768798
/*
769799
CREATE TABLE `_types` (
@@ -967,7 +997,6 @@ func (_ *testDecodeSuite) TestTableMapOptMetaPrimaryKey(c *C) {
967997
}
968998

969999
for _, tc := range testcases {
970-
9711000
tableMapEvent := new(TableMapEvent)
9721001
tableMapEvent.tableIDSize = 6
9731002
err := tableMapEvent.Decode(tc.data)

0 commit comments

Comments
 (0)