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.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; /** * * include write_rows_event V2 * 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 */ public class WriteRowsEventV2 extends RowsEvent implements EventParser { @Override public WriteRowsEventV2 parser(EventContext context, BasicReader reader) { tableId = reader.readFixedIntT6(); flags = reader.readFixedIntT2(); 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; } }