Skip to content

Commit 115cf55

Browse files
Rework individual methods for INSERT/UPDATE/DELETE into a single public RowsEvent type.
1 parent 428d9ba commit 115cf55

File tree

2 files changed

+51
-31
lines changed

2 files changed

+51
-31
lines changed

replication/row_event.go

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -950,6 +950,29 @@ type RowsEvent struct {
950950
ignoreJSONDecodeErr bool
951951
}
952952

953+
// EnumRowsEventType is an abridged type describing the operation which triggered the given RowsEvent.
954+
type EnumRowsEventType byte
955+
956+
const (
957+
EnumRowsEventTypeUnknown = EnumRowsEventType(iota)
958+
EnumRowsEventTypeInsert
959+
EnumRowsEventTypeUpdate
960+
EnumRowsEventTypeDelete
961+
)
962+
963+
func (t EnumRowsEventType) String() string {
964+
switch t {
965+
case EnumRowsEventTypeInsert:
966+
return "Insert"
967+
case EnumRowsEventTypeUpdate:
968+
return "Update"
969+
case EnumRowsEventTypeDelete:
970+
return "Delete"
971+
default:
972+
return fmt.Sprintf("unknown (%d)", t)
973+
}
974+
}
975+
953976
// EnumRowImageType is allowed types for every row in mysql binlog.
954977
// See https://github.com/mysql/mysql-server/blob/1bfe02bdad6604d54913c62614bde57a055c8332/sql/rpl_record.h#L39
955978
// enum class enum_row_image_type { WRITE_AI, UPDATE_BI, UPDATE_AI, DELETE_BI };
@@ -1120,16 +1143,17 @@ func (e *RowsEvent) Decode(data []byte) error {
11201143
return e.DecodeData(pos, data)
11211144
}
11221145

1123-
func (e *RowsEvent) IsInsert() bool {
1124-
return e.eventType == WRITE_ROWS_EVENTv0 || e.eventType == WRITE_ROWS_EVENTv1 || e.eventType == WRITE_ROWS_EVENTv2 || e.eventType == MARIADB_WRITE_ROWS_COMPRESSED_EVENT_V1
1125-
}
1126-
1127-
func (e *RowsEvent) IsUpdate() bool {
1128-
return e.eventType == UPDATE_ROWS_EVENTv0 || e.eventType == UPDATE_ROWS_EVENTv1 || e.eventType == UPDATE_ROWS_EVENTv2 || e.eventType == MARIADB_UPDATE_ROWS_COMPRESSED_EVENT_V1
1129-
}
1130-
1131-
func (e *RowsEvent) IsDelete() bool {
1132-
return e.eventType == DELETE_ROWS_EVENTv0 || e.eventType == DELETE_ROWS_EVENTv1 || e.eventType == DELETE_ROWS_EVENTv2 || e.eventType == MARIADB_DELETE_ROWS_COMPRESSED_EVENT_V1
1146+
func (e *RowsEvent) Type() EnumRowsEventType {
1147+
switch e.eventType {
1148+
case WRITE_ROWS_EVENTv0, WRITE_ROWS_EVENTv1, WRITE_ROWS_EVENTv2, MARIADB_WRITE_ROWS_COMPRESSED_EVENT_V1:
1149+
return EnumRowsEventTypeInsert
1150+
case UPDATE_ROWS_EVENTv0, UPDATE_ROWS_EVENTv1, UPDATE_ROWS_EVENTv2, MARIADB_UPDATE_ROWS_COMPRESSED_EVENT_V1:
1151+
return EnumRowsEventTypeUpdate
1152+
case DELETE_ROWS_EVENTv0, DELETE_ROWS_EVENTv1, DELETE_ROWS_EVENTv2, MARIADB_DELETE_ROWS_COMPRESSED_EVENT_V1:
1153+
return EnumRowsEventTypeDelete
1154+
default:
1155+
return EnumRowsEventTypeUnknown
1156+
}
11331157
}
11341158

11351159
func isBitSet(bitmap []byte, i int) bool {

replication/row_event_test.go

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1176,38 +1176,34 @@ func TestRowsDataExtraData(t *testing.T) {
11761176
}
11771177
}
11781178

1179-
func TestRowsEventTypoe(t *testing.T) {
1179+
func TestRowsEventType(t *testing.T) {
11801180
testcases := []struct {
11811181
eventType EventType
1182-
isInsert bool
1183-
isUpdate bool
1184-
isDelete bool
1182+
want EnumRowsEventType
11851183
}{
1186-
{WRITE_ROWS_EVENTv0, true, false, false},
1187-
{WRITE_ROWS_EVENTv1, true, false, false},
1188-
{WRITE_ROWS_EVENTv2, true, false, false},
1189-
{MARIADB_WRITE_ROWS_COMPRESSED_EVENT_V1, true, false, false},
1190-
{UPDATE_ROWS_EVENTv0, false, true, false},
1191-
{UPDATE_ROWS_EVENTv1, false, true, false},
1192-
{UPDATE_ROWS_EVENTv2, false, true, false},
1193-
{MARIADB_UPDATE_ROWS_COMPRESSED_EVENT_V1, false, true, false},
1194-
{DELETE_ROWS_EVENTv0, false, false, true},
1195-
{DELETE_ROWS_EVENTv1, false, false, true},
1196-
{DELETE_ROWS_EVENTv2, false, false, true},
1197-
{MARIADB_DELETE_ROWS_COMPRESSED_EVENT_V1, false, false, true},
1184+
{WRITE_ROWS_EVENTv0, EnumRowsEventTypeInsert},
1185+
{WRITE_ROWS_EVENTv1, EnumRowsEventTypeInsert},
1186+
{WRITE_ROWS_EVENTv2, EnumRowsEventTypeInsert},
1187+
{MARIADB_WRITE_ROWS_COMPRESSED_EVENT_V1, EnumRowsEventTypeInsert},
1188+
{UPDATE_ROWS_EVENTv0, EnumRowsEventTypeUpdate},
1189+
{UPDATE_ROWS_EVENTv1, EnumRowsEventTypeUpdate},
1190+
{UPDATE_ROWS_EVENTv2, EnumRowsEventTypeUpdate},
1191+
{MARIADB_UPDATE_ROWS_COMPRESSED_EVENT_V1, EnumRowsEventTypeUpdate},
1192+
{DELETE_ROWS_EVENTv0, EnumRowsEventTypeDelete},
1193+
{DELETE_ROWS_EVENTv1, EnumRowsEventTypeDelete},
1194+
{DELETE_ROWS_EVENTv2, EnumRowsEventTypeDelete},
1195+
{MARIADB_DELETE_ROWS_COMPRESSED_EVENT_V1, EnumRowsEventTypeDelete},
11981196

11991197
// Whoops, these are not rows events at all
1200-
{EXEC_LOAD_EVENT, false, false, false},
1201-
{HEARTBEAT_EVENT, false, false, false},
1198+
{EXEC_LOAD_EVENT, EnumRowsEventTypeUnknown},
1199+
{HEARTBEAT_EVENT, EnumRowsEventTypeUnknown},
12021200
}
12031201

12041202
for _, tc := range testcases {
12051203
rev := new(RowsEvent)
12061204
rev.eventType = tc.eventType
12071205

1208-
require.Equal(t, tc.isInsert, rev.IsInsert())
1209-
require.Equal(t, tc.isUpdate, rev.IsUpdate())
1210-
require.Equal(t, tc.isDelete, rev.IsDelete())
1206+
require.Equal(t, tc.want, rev.Type())
12111207
}
12121208
}
12131209

0 commit comments

Comments
 (0)