From b69b502f1691ea247561b96c64af0302b4345f8e Mon Sep 17 00:00:00 2001 From: Andrey Perepechaev Date: Wed, 14 Jan 2015 17:59:25 +0300 Subject: [PATCH] Multiply rows for event rows --- replication/row_event.go | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/replication/row_event.go b/replication/row_event.go index 034823335..ecddab956 100644 --- a/replication/row_event.go +++ b/replication/row_event.go @@ -196,6 +196,8 @@ type RowsEvent struct { tables map[uint64]*TableMapEvent needBitmap2 bool + Table *TableMapEvent + TableID uint64 Flags uint16 @@ -245,22 +247,27 @@ func (e *RowsEvent) Decode(data []byte) error { pos += bitCount } - tableEvent, ok := e.tables[e.TableID] + var ok bool + e.Table, ok = e.tables[e.TableID] if !ok { return fmt.Errorf("invalid table id %d, no correspond table map event", e.TableID) } var err error - if n, err = e.decodeRows(data[pos:], tableEvent, e.ColumnBitmap1); err != nil { - return err - } - pos += n - if e.needBitmap2 { - if n, err = e.decodeRows(data[pos:], tableEvent, e.ColumnBitmap2); err != nil { + // ... repeat rows until event-end + for pos < len(data) { + if n, err = e.decodeRows(data[pos:], e.Table, e.ColumnBitmap1); err != nil { return err } pos += n + + if e.needBitmap2 { + if n, err = e.decodeRows(data[pos:], e.Table, e.ColumnBitmap2); err != nil { + return err + } + pos += n + } } return nil