package me.xcoding.opencdc.binlog.event.row; import me.xcoding.opencdc.binlog.EventContext; import me.xcoding.opencdc.binlog.event.RowsEvent; import me.xcoding.opencdc.binlog.parser.EventParser; import me.xcoding.opencdc.mysql.BinLogEventType; import me.xcoding.opencdc.mysql.protocol.BasicReader; import me.xcoding.opencdc.mysql.protocol.column.Column; import me.xcoding.opencdc.mysql.protocol.column.ColumnDef; import me.xcoding.opencdc.mysql.protocol.column.ColumnValueParser; /** * * write_rows_event Version 1 * The format is pretty similar for all the events; * * * @author Teny ZH(zh.Teny.1@gmail.com) * @see http://dev.mysql.com/doc/internals/en/rows-event.html#write-rows-eventv2 */ public class WriteRowsEventV1 extends RowsEvent implements EventParser { @Override public WriteRowsEventV1 parser(EventContext context, BasicReader reader) { if(context.getHeaderLen(BinLogEventType.WRITE_ROWS_EVENTv1) == 6){ tableId = reader.readFixedIntT4(); } else { tableId = reader.readFixedIntT6(); } flags = reader.readFixedIntT2(); // -- Only Version2 // extraDataLength = reader.readFixedIntT2(); // extraData = reader.readBytesVarLen(extraDataLength - 2); numberOfColumns = (int) (reader.readLenEncInt() + 7) / 8; columnsPresent = reader.readBytesVarLen(numberOfColumns); nullBitmap = reader.readBytesVarLen(numberOfColumns); columns2 = context.getAfterColumns().init(columnsPresent, nullBitmap); while(columns2.hasNext()) { ColumnDef def = columns2.next(); Object v = null; if(!columns2.isNull()) { v = ColumnValueParser.valueOf(def.getType(), def.getMeta(), reader); } columns2.add(new Column(def.getType(), v)); } return this; } }