Skip to content

Commit b7e35fe

Browse files
committed
test my suggestion
Signed-off-by: lance6716 <[email protected]>
1 parent f129364 commit b7e35fe

File tree

2 files changed

+26
-52
lines changed

2 files changed

+26
-52
lines changed

replication/event.go

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -561,52 +561,52 @@ func (e *GtidTaggedLogEvent) Decode(data []byte) error {
561561
Fields: []serialization.Field{
562562
{
563563
Name: "gtid_flags",
564-
Type: serialization.FieldIntFixed{
564+
Type: &serialization.FieldIntFixed{
565565
Length: 1,
566566
},
567567
},
568568
{
569569
Name: "uuid",
570-
Type: serialization.FieldIntFixed{
570+
Type: &serialization.FieldIntFixed{
571571
Length: 16,
572572
},
573573
},
574574
{
575575
Name: "gno",
576-
Type: serialization.FieldIntVar{},
576+
Type: &serialization.FieldIntVar{},
577577
},
578578
{
579579
Name: "tag",
580-
Type: serialization.FieldString{},
580+
Type: &serialization.FieldString{},
581581
},
582582
{
583583
Name: "last_committed",
584-
Type: serialization.FieldIntVar{},
584+
Type: &serialization.FieldIntVar{},
585585
},
586586
{
587587
Name: "sequence_number",
588-
Type: serialization.FieldIntVar{},
588+
Type: &serialization.FieldIntVar{},
589589
},
590590
{
591591
Name: "immediate_commit_timestamp",
592-
Type: serialization.FieldUintVar{},
592+
Type: &serialization.FieldUintVar{},
593593
},
594594
{
595595
Name: "original_commit_timestamp",
596-
Type: serialization.FieldUintVar{},
596+
Type: &serialization.FieldUintVar{},
597597
Optional: true,
598598
},
599599
{
600600
Name: "transaction_length",
601-
Type: serialization.FieldUintVar{},
601+
Type: &serialization.FieldUintVar{},
602602
},
603603
{
604604
Name: "immediate_server_version",
605-
Type: serialization.FieldUintVar{},
605+
Type: &serialization.FieldUintVar{},
606606
},
607607
{
608608
Name: "original_server_version",
609-
Type: serialization.FieldUintVar{},
609+
Type: &serialization.FieldUintVar{},
610610
Optional: true,
611611
},
612612
{
@@ -626,7 +626,7 @@ func (e *GtidTaggedLogEvent) Decode(data []byte) error {
626626
if err != nil {
627627
return err
628628
}
629-
if v, ok := f.Type.(serialization.FieldIntFixed); ok {
629+
if v, ok := f.Type.(*serialization.FieldIntFixed); ok {
630630
e.CommitFlag = v.Value[0]
631631
} else {
632632
return errors.New("failed to get gtid_flags field")
@@ -636,7 +636,7 @@ func (e *GtidTaggedLogEvent) Decode(data []byte) error {
636636
if err != nil {
637637
return err
638638
}
639-
if v, ok := f.Type.(serialization.FieldIntFixed); ok {
639+
if v, ok := f.Type.(*serialization.FieldIntFixed); ok {
640640
e.SID = v.Value
641641
} else {
642642
return errors.New("failed to get uuid field")
@@ -646,7 +646,7 @@ func (e *GtidTaggedLogEvent) Decode(data []byte) error {
646646
if err != nil {
647647
return err
648648
}
649-
if v, ok := f.Type.(serialization.FieldIntVar); ok {
649+
if v, ok := f.Type.(*serialization.FieldIntVar); ok {
650650
e.GNO = v.Value
651651
} else {
652652
return errors.New("failed to get gno field")
@@ -656,7 +656,7 @@ func (e *GtidTaggedLogEvent) Decode(data []byte) error {
656656
if err != nil {
657657
return err
658658
}
659-
if v, ok := f.Type.(serialization.FieldString); ok {
659+
if v, ok := f.Type.(*serialization.FieldString); ok {
660660
e.Tag = v.Value
661661
} else {
662662
return errors.New("failed to get tag field")
@@ -666,7 +666,7 @@ func (e *GtidTaggedLogEvent) Decode(data []byte) error {
666666
if err != nil {
667667
return err
668668
}
669-
if v, ok := f.Type.(serialization.FieldIntVar); ok {
669+
if v, ok := f.Type.(*serialization.FieldIntVar); ok {
670670
e.LastCommitted = v.Value
671671
} else {
672672
return errors.New("failed to get last_committed field")
@@ -676,7 +676,7 @@ func (e *GtidTaggedLogEvent) Decode(data []byte) error {
676676
if err != nil {
677677
return err
678678
}
679-
if v, ok := f.Type.(serialization.FieldIntVar); ok {
679+
if v, ok := f.Type.(*serialization.FieldIntVar); ok {
680680
e.SequenceNumber = v.Value
681681
} else {
682682
return errors.New("failed to get sequence_number field")
@@ -686,7 +686,7 @@ func (e *GtidTaggedLogEvent) Decode(data []byte) error {
686686
if err != nil {
687687
return err
688688
}
689-
if v, ok := f.Type.(serialization.FieldUintVar); ok {
689+
if v, ok := f.Type.(*serialization.FieldUintVar); ok {
690690
e.ImmediateCommitTimestamp = v.Value
691691
} else {
692692
return errors.New("failed to get immediate_commit_timestamp field")
@@ -696,7 +696,7 @@ func (e *GtidTaggedLogEvent) Decode(data []byte) error {
696696
if err != nil {
697697
return err
698698
}
699-
if v, ok := f.Type.(serialization.FieldUintVar); ok {
699+
if v, ok := f.Type.(*serialization.FieldUintVar); ok {
700700
if f.Skipped {
701701
e.OriginalCommitTimestamp = e.ImmediateCommitTimestamp
702702
} else {
@@ -710,7 +710,7 @@ func (e *GtidTaggedLogEvent) Decode(data []byte) error {
710710
if err != nil {
711711
return err
712712
}
713-
if v, ok := f.Type.(serialization.FieldUintVar); ok {
713+
if v, ok := f.Type.(*serialization.FieldUintVar); ok {
714714
e.ImmediateServerVersion = uint32(v.Value)
715715
} else {
716716
return errors.New("failed to get immediate_server_version field")
@@ -720,7 +720,7 @@ func (e *GtidTaggedLogEvent) Decode(data []byte) error {
720720
if err != nil {
721721
return err
722722
}
723-
if v, ok := f.Type.(serialization.FieldUintVar); ok {
723+
if v, ok := f.Type.(*serialization.FieldUintVar); ok {
724724
if f.Skipped {
725725
e.OriginalServerVersion = e.ImmediateServerVersion
726726
} else {
@@ -734,7 +734,7 @@ func (e *GtidTaggedLogEvent) Decode(data []byte) error {
734734
if err != nil {
735735
return err
736736
}
737-
if v, ok := f.Type.(serialization.FieldUintVar); ok {
737+
if v, ok := f.Type.(*serialization.FieldUintVar); ok {
738738
e.TransactionLength = v.Value
739739
} else {
740740
return errors.New("failed to get transaction_length field")

serialization/serialization.go

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ type Field struct {
7373
// FieldType represents a `type_field`
7474
type FieldType interface {
7575
fmt.Stringer
76+
decode(data []byte, pos uint64) (uint64, error)
7677
}
7778

7879
// FieldIntFixed is for values with a fixed length.
@@ -224,36 +225,9 @@ func Unmarshal(data []byte, v interface{}) error {
224225
continue
225226
}
226227
m.Fields[i].ID = data[pos] >> 1
227-
pos++
228-
var n uint64
229-
var err error
230-
switch f := m.Fields[i].Type.(type) {
231-
case FieldIntFixed:
232-
n, err = f.decode(data, pos)
233-
if err != nil {
234-
return err
235-
}
236-
m.Fields[i].Type = f
237-
case FieldUintVar:
238-
n, err = f.decode(data, pos)
239-
if err != nil {
240-
return err
241-
}
242-
m.Fields[i].Type = f
243-
case FieldIntVar:
244-
n, err = f.decode(data, pos)
245-
if err != nil {
246-
return err
247-
}
248-
m.Fields[i].Type = f
249-
case FieldString:
250-
n, err = f.decode(data, pos)
251-
if err != nil {
252-
return err
253-
}
254-
m.Fields[i].Type = f
255-
default:
256-
return fmt.Errorf("unsupported field type: %T", m.Fields[i].Type)
228+
n, err := m.Fields[i].Type.decode(data, pos)
229+
if err != nil {
230+
return err
257231
}
258232
pos = n
259233
}

0 commit comments

Comments
 (0)