diff --git a/client/src/main/java/com/alibaba/otter/canal/client/impl/SimpleCanalConnector.java b/client/src/main/java/com/alibaba/otter/canal/client/impl/SimpleCanalConnector.java index a6eabed1..0b870c17 100644 --- a/client/src/main/java/com/alibaba/otter/canal/client/impl/SimpleCanalConnector.java +++ b/client/src/main/java/com/alibaba/otter/canal/client/impl/SimpleCanalConnector.java @@ -457,8 +457,10 @@ public class SimpleCanalConnector implements CanalConnector { } running = true; - mutex.get();// 阻塞等待 + } else { + // 单机模式直接设置为running + running = true; } } catch (InterruptedException e) { Thread.currentThread().interrupt(); diff --git a/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/CharsetConversion.java b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/CharsetConversion.java index a4f07ac6..41156123 100644 --- a/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/CharsetConversion.java +++ b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/CharsetConversion.java @@ -103,8 +103,8 @@ public final class CharsetConversion { putEntry(42, "latin7", "latin7_general_cs", "ISO8859_7"); putEntry(43, "macce", "macce_bin", "MacCentralEurope"); putEntry(44, "cp1250", "cp1250_croatian_ci", "Cp1250"); - putEntry(45, "utf8mb4", "utf8mb4_general_ci", "MacCentralEurope"); - putEntry(46, "utf8mb4", "utf8mb4_bin", "MacCentralEurope"); + putEntry(45, "utf8mb4", "utf8mb4_general_ci", "UTF-8"); + putEntry(46, "utf8mb4", "utf8mb4_bin", "UTF-8"); putEntry(47, "latin1", "latin1_bin", "ISO8859_1"); putEntry(48, "latin1", "latin1_general_ci", "ISO8859_1"); putEntry(49, "latin1", "latin1_general_cs", "ISO8859_1"); diff --git a/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/LogDecoder.java b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/LogDecoder.java index 34cb70c5..e1cb5555 100644 --- a/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/LogDecoder.java +++ b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/LogDecoder.java @@ -30,15 +30,19 @@ import com.taobao.tddl.dbsync.binlog.event.RowsQueryLogEvent; import com.taobao.tddl.dbsync.binlog.event.StartLogEventV3; import com.taobao.tddl.dbsync.binlog.event.StopLogEvent; import com.taobao.tddl.dbsync.binlog.event.TableMapLogEvent; +import com.taobao.tddl.dbsync.binlog.event.TransactionContextLogEvent; import com.taobao.tddl.dbsync.binlog.event.UnknownLogEvent; import com.taobao.tddl.dbsync.binlog.event.UpdateRowsLogEvent; import com.taobao.tddl.dbsync.binlog.event.UserVarLogEvent; +import com.taobao.tddl.dbsync.binlog.event.ViewChangeEvent; import com.taobao.tddl.dbsync.binlog.event.WriteRowsLogEvent; +import com.taobao.tddl.dbsync.binlog.event.XaPrepareLogEvent; import com.taobao.tddl.dbsync.binlog.event.XidLogEvent; import com.taobao.tddl.dbsync.binlog.event.mariadb.AnnotateRowsEvent; import com.taobao.tddl.dbsync.binlog.event.mariadb.BinlogCheckPointLogEvent; import com.taobao.tddl.dbsync.binlog.event.mariadb.MariaGtidListLogEvent; import com.taobao.tddl.dbsync.binlog.event.mariadb.MariaGtidLogEvent; +import com.taobao.tddl.dbsync.binlog.event.mariadb.StartEncryptionLogEvent; /** * Implements a binary-log decoder. @@ -366,6 +370,24 @@ public final class LogDecoder { logPosition.position = header.getLogPos(); return event; } + case LogEvent.TRANSACTION_CONTEXT_EVENT: { + TransactionContextLogEvent event = new TransactionContextLogEvent(header, buffer, descriptionEvent); + /* updating position in context */ + logPosition.position = header.getLogPos(); + return event; + } + case LogEvent.VIEW_CHANGE_EVENT: { + ViewChangeEvent event = new ViewChangeEvent(header, buffer, descriptionEvent); + /* updating position in context */ + logPosition.position = header.getLogPos(); + return event; + } + case LogEvent.XA_PREPARE_LOG_EVENT: { + XaPrepareLogEvent event = new XaPrepareLogEvent(header, buffer, descriptionEvent); + /* updating position in context */ + logPosition.position = header.getLogPos(); + return event; + } case LogEvent.ANNOTATE_ROWS_EVENT: { AnnotateRowsEvent event = new AnnotateRowsEvent(header, buffer, descriptionEvent); /* updating position in context */ @@ -390,6 +412,12 @@ public final class LogDecoder { logPosition.position = header.getLogPos(); return event; } + case LogEvent.START_ENCRYPTION_EVENT: { + StartEncryptionLogEvent event = new StartEncryptionLogEvent(header, buffer, descriptionEvent); + /* updating position in context */ + logPosition.position = header.getLogPos(); + return event; + } default: /* * Create an object of Ignorable_log_event for unrecognized @@ -402,9 +430,10 @@ public final class LogDecoder { logPosition.position = header.getLogPos(); return event; } else { - if (logger.isWarnEnabled()) logger.warn("Skipping unrecognized binlog event " - + LogEvent.getTypeName(header.getType()) + " from: " - + context.getLogPosition()); + if (logger.isWarnEnabled()) { + logger.warn("Skipping unrecognized binlog event " + LogEvent.getTypeName(header.getType()) + + " from: " + context.getLogPosition()); + } } } diff --git a/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/LogEvent.java b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/LogEvent.java index 806b34f7..8a5957d0 100644 --- a/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/LogEvent.java +++ b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/LogEvent.java @@ -161,9 +161,17 @@ public abstract class LogEvent { public static final int PREVIOUS_GTIDS_LOG_EVENT = 35; + /* MySQL 5.7 events */ + public static final int TRANSACTION_CONTEXT_EVENT = 36; + + public static final int VIEW_CHANGE_EVENT = 37; + + /* Prepared XA transaction terminal event similar to Xid */ + public static final int XA_PREPARE_LOG_EVENT = 38; + // mariaDb 5.5.34 /* New MySQL/Sun events are to be added right above this comment */ - public static final int MYSQL_EVENTS_END = 36; + public static final int MYSQL_EVENTS_END = 39; public static final int MARIA_EVENTS_BEGIN = 160; /* New Maria event numbers start from here */ @@ -189,8 +197,10 @@ public abstract class LogEvent { */ public static final int GTID_LIST_EVENT = 163; + public static final int START_ENCRYPTION_EVENT = 164; + /** end marker */ - public static final int ENUM_END_EVENT = 164; + public static final int ENUM_END_EVENT = 165; /** * 1 byte length, 1 byte format Length is total length in bytes, including 2 @@ -359,7 +369,7 @@ public abstract class LogEvent { protected static final Log logger = LogFactory.getLog(LogEvent.class); protected final LogHeader header; - + /** * mysql半同步semi标识 * @@ -369,18 +379,16 @@ public abstract class LogEvent { * */ protected int semival; - - public int getSemival() { - return semival; - } + return semival; + } - public void setSemival(int semival) { - this.semival = semival; - } + public void setSemival(int semival) { + this.semival = semival; + } - protected LogEvent(LogHeader header){ + protected LogEvent(LogHeader header){ this.header = header; } diff --git a/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/FormatDescriptionLogEvent.java b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/FormatDescriptionLogEvent.java index 267ee2a4..8492e2d7 100644 --- a/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/FormatDescriptionLogEvent.java +++ b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/FormatDescriptionLogEvent.java @@ -59,10 +59,15 @@ public final class FormatDescriptionLogEvent extends StartLogEventV3 { public static final int HEARTBEAT_HEADER_LEN = 0; public static final int IGNORABLE_HEADER_LEN = 0; public static final int ROWS_HEADER_LEN_V2 = 10; + public static final int TRANSACTION_CONTEXT_HEADER_LEN = 18; + public static final int VIEW_CHANGE_HEADER_LEN = 52; + public static final int XA_PREPARE_HEADER_LEN = 0; + public static final int ANNOTATE_ROWS_HEADER_LEN = 0; public static final int BINLOG_CHECKPOINT_HEADER_LEN = 4; public static final int GTID_HEADER_LEN = 19; public static final int GTID_LIST_HEADER_LEN = 4; + public static final int START_ENCRYPTION_HEADER_LEN = 0; public static final int POST_HEADER_LENGTH = 11; @@ -202,11 +207,17 @@ public final class FormatDescriptionLogEvent extends StartLogEventV3 { postHeaderLen[GTID_LOG_EVENT - 1] = POST_HEADER_LENGTH; postHeaderLen[ANONYMOUS_GTID_LOG_EVENT - 1] = POST_HEADER_LENGTH; postHeaderLen[PREVIOUS_GTIDS_LOG_EVENT - 1] = IGNORABLE_HEADER_LEN; + + postHeaderLen[TRANSACTION_CONTEXT_EVENT - 1] = TRANSACTION_CONTEXT_HEADER_LEN; + postHeaderLen[VIEW_CHANGE_EVENT - 1] = VIEW_CHANGE_HEADER_LEN; + postHeaderLen[XA_PREPARE_LOG_EVENT - 1] = XA_PREPARE_HEADER_LEN; + // mariadb 10 postHeaderLen[ANNOTATE_ROWS_EVENT - 1] = ANNOTATE_ROWS_HEADER_LEN; postHeaderLen[BINLOG_CHECKPOINT_EVENT - 1] = BINLOG_CHECKPOINT_HEADER_LEN; postHeaderLen[GTID_EVENT - 1] = GTID_HEADER_LEN; postHeaderLen[GTID_LIST_EVENT - 1] = GTID_LIST_HEADER_LEN; + postHeaderLen[START_ENCRYPTION_EVENT - 1] = START_ENCRYPTION_HEADER_LEN; break; case 3: /* 4.0.x x>=2 */ diff --git a/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/GtidLogEvent.java b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/GtidLogEvent.java index 411b6a78..064f60bf 100644 --- a/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/GtidLogEvent.java +++ b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/GtidLogEvent.java @@ -1,11 +1,11 @@ package com.taobao.tddl.dbsync.binlog.event; -import com.taobao.tddl.dbsync.binlog.LogBuffer; -import com.taobao.tddl.dbsync.binlog.LogEvent; - import java.nio.ByteBuffer; import java.util.UUID; +import com.taobao.tddl.dbsync.binlog.LogBuffer; +import com.taobao.tddl.dbsync.binlog.LogEvent; + /** * @author jianghang 2013-4-8 上午12:36:29 * @version 1.0.3 diff --git a/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/TransactionContextLogEvent.java b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/TransactionContextLogEvent.java new file mode 100644 index 00000000..3cb3f8a0 --- /dev/null +++ b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/TransactionContextLogEvent.java @@ -0,0 +1,16 @@ +package com.taobao.tddl.dbsync.binlog.event; + +import com.taobao.tddl.dbsync.binlog.LogBuffer; +import com.taobao.tddl.dbsync.binlog.LogEvent; + +/** + * @author agapple 2018年5月7日 下午7:05:39 + * @version 1.0.26 + * @since mysql 5.7 + */ +public class TransactionContextLogEvent extends LogEvent { + + public TransactionContextLogEvent(LogHeader header, LogBuffer buffer, FormatDescriptionLogEvent descriptionEvent){ + super(header); + } +} diff --git a/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/ViewChangeEvent.java b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/ViewChangeEvent.java new file mode 100644 index 00000000..72a805a7 --- /dev/null +++ b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/ViewChangeEvent.java @@ -0,0 +1,16 @@ +package com.taobao.tddl.dbsync.binlog.event; + +import com.taobao.tddl.dbsync.binlog.LogBuffer; +import com.taobao.tddl.dbsync.binlog.LogEvent; + +/** + * @author agapple 2018年5月7日 下午7:05:39 + * @version 1.0.26 + * @since mysql 5.7 + */ +public class ViewChangeEvent extends LogEvent { + + public ViewChangeEvent(LogHeader header, LogBuffer buffer, FormatDescriptionLogEvent descriptionEvent){ + super(header); + } +} diff --git a/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/XaPrepareLogEvent.java b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/XaPrepareLogEvent.java new file mode 100644 index 00000000..63d085d4 --- /dev/null +++ b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/XaPrepareLogEvent.java @@ -0,0 +1,65 @@ +package com.taobao.tddl.dbsync.binlog.event; + +import com.taobao.tddl.dbsync.binlog.LogBuffer; +import com.taobao.tddl.dbsync.binlog.LogEvent; + +/** + * @author agapple 2018年5月7日 下午7:05:39 + * @version 1.0.26 + * @since mysql 5.7 + */ +public class XaPrepareLogEvent extends LogEvent { + + private boolean onePhase; + private int formatId; + private int gtridLength; + private int bqualLength; + private byte[] data; + + public XaPrepareLogEvent(LogHeader header, LogBuffer buffer, FormatDescriptionLogEvent descriptionEvent){ + super(header); + + final int commonHeaderLen = descriptionEvent.getCommonHeaderLen(); + final int postHeaderLen = descriptionEvent.getPostHeaderLen()[header.getType() - 1]; + + int offset = commonHeaderLen + postHeaderLen; + buffer.position(offset); + + onePhase = (buffer.getInt8() == 0x00 ? false : true); + + formatId = buffer.getInt32(); + gtridLength = buffer.getInt32(); + bqualLength = buffer.getInt32(); + + int MY_XIDDATASIZE = 128; + if (MY_XIDDATASIZE >= gtridLength + bqualLength && gtridLength >= 0 && gtridLength <= 64 && bqualLength >= 0 + && bqualLength <= 64) { + data = buffer.getData(gtridLength + bqualLength); + } else { + formatId = -1; + gtridLength = 0; + bqualLength = 0; + } + } + + public boolean isOnePhase() { + return onePhase; + } + + public int getFormatId() { + return formatId; + } + + public int getGtridLength() { + return gtridLength; + } + + public int getBqualLength() { + return bqualLength; + } + + public byte[] getData() { + return data; + } + +} diff --git a/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/mariadb/StartEncryptionLogEvent.java b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/mariadb/StartEncryptionLogEvent.java new file mode 100644 index 00000000..8db5361c --- /dev/null +++ b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/mariadb/StartEncryptionLogEvent.java @@ -0,0 +1,19 @@ +package com.taobao.tddl.dbsync.binlog.event.mariadb; + +import com.taobao.tddl.dbsync.binlog.LogBuffer; +import com.taobao.tddl.dbsync.binlog.LogEvent; +import com.taobao.tddl.dbsync.binlog.event.FormatDescriptionLogEvent; +import com.taobao.tddl.dbsync.binlog.event.LogHeader; + +/** + * mariadb的Start_encryption_log_event + * + * @author agapple 2018年5月7日 下午7:23:02 + * @version 1.0.26 + */ +public class StartEncryptionLogEvent extends LogEvent { + + public StartEncryptionLogEvent(LogHeader header, LogBuffer buffer, FormatDescriptionLogEvent descriptionEvent){ + super(header); + } +} diff --git a/deployer/src/main/resources/example/instance.properties b/deployer/src/main/resources/example/instance.properties index 32f4f78f..a3703b86 100644 --- a/deployer/src/main/resources/example/instance.properties +++ b/deployer/src/main/resources/example/instance.properties @@ -1,15 +1,16 @@ ################################################# ## mysql serverId canal.instance.mysql.slaveId=0 + # position info canal.instance.master.address=127.0.0.1:3306 +# enable gtid use true/false +canal.instance.gtidon=false canal.instance.master.journal.name= canal.instance.master.position= canal.instance.master.timestamp= canal.instance.master.gtid= -canal.instance.gtidon=true - # table meta tsdb info canal.instance.tsdb.enable=true canal.instance.tsdb.dir=${canal.file.data.dir:../conf}/${canal.instance.destination:} diff --git a/deployer/src/main/resources/spring/default-instance.xml b/deployer/src/main/resources/spring/default-instance.xml index 8a26c34a..e33a7018 100644 --- a/deployer/src/main/resources/spring/default-instance.xml +++ b/deployer/src/main/resources/spring/default-instance.xml @@ -166,6 +166,7 @@ + @@ -173,6 +174,7 @@ + @@ -187,5 +189,8 @@ + + + diff --git a/deployer/src/main/resources/spring/file-instance.xml b/deployer/src/main/resources/spring/file-instance.xml index d8285dc1..5d2bd5ab 100644 --- a/deployer/src/main/resources/spring/file-instance.xml +++ b/deployer/src/main/resources/spring/file-instance.xml @@ -176,6 +176,6 @@ - + diff --git a/deployer/src/main/resources/spring/group-instance.xml b/deployer/src/main/resources/spring/group-instance.xml index 5ac91794..e8c0dd0f 100644 --- a/deployer/src/main/resources/spring/group-instance.xml +++ b/deployer/src/main/resources/spring/group-instance.xml @@ -148,6 +148,7 @@ + @@ -155,6 +156,7 @@ + @@ -239,6 +241,7 @@ + @@ -246,6 +249,7 @@ + diff --git a/deployer/src/main/resources/spring/memory-instance.xml b/deployer/src/main/resources/spring/memory-instance.xml index 7f1eff3f..9c4876d5 100644 --- a/deployer/src/main/resources/spring/memory-instance.xml +++ b/deployer/src/main/resources/spring/memory-instance.xml @@ -139,6 +139,7 @@ + @@ -146,6 +147,7 @@ + @@ -160,5 +162,8 @@ + + + diff --git a/example/src/main/java/com/alibaba/otter/canal/example/AbstractCanalClientTest.java b/example/src/main/java/com/alibaba/otter/canal/example/AbstractCanalClientTest.java index 264e1b1e..33ea6550 100644 --- a/example/src/main/java/com/alibaba/otter/canal/example/AbstractCanalClientTest.java +++ b/example/src/main/java/com/alibaba/otter/canal/example/AbstractCanalClientTest.java @@ -4,6 +4,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; +import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.SystemUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,6 +18,7 @@ import com.alibaba.otter.canal.protocol.CanalEntry.Column; import com.alibaba.otter.canal.protocol.CanalEntry.Entry; import com.alibaba.otter.canal.protocol.CanalEntry.EntryType; import com.alibaba.otter.canal.protocol.CanalEntry.EventType; +import com.alibaba.otter.canal.protocol.CanalEntry.Pair; import com.alibaba.otter.canal.protocol.CanalEntry.RowChange; import com.alibaba.otter.canal.protocol.CanalEntry.RowData; import com.alibaba.otter.canal.protocol.CanalEntry.TransactionBegin; @@ -58,10 +60,12 @@ public class AbstractCanalClientTest { context_format += "****************************************************" + SEP; row_format = SEP - + "----------------> binlog[{}:{}] , name[{},{}] , eventType : {} , executeTime : {}({}) , delay : {} ms" + + "----------------> binlog[{}:{}] , name[{},{}] , eventType : {} , executeTime : {}({}) , gtid : ({}) , delay : {} ms" + SEP; - transaction_format = SEP + "================> binlog[{}:{}] , executeTime : {}({}) , delay : {}ms" + SEP; + transaction_format = SEP + + "================> binlog[{}:{}] , executeTime : {}({}) , gtid : ({}) , delay : {}ms" + + SEP; } @@ -92,13 +96,7 @@ public class AbstractCanalClientTest { if (!running) { return; } - running = false; - if (waiting) { - if (connector instanceof ClusterCanalConnector) { - ((ClusterCanalConnector) connector).setRetryTimes(-1); - } - thread.interrupt(); - } + connector.stopRunning(); if (thread != null) { try { thread.join(); @@ -166,8 +164,12 @@ public class AbstractCanalClientTest { long time = entry.getHeader().getExecuteTime(); Date date = new Date(time); SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT); - return entry.getHeader().getLogfileName() + ":" + entry.getHeader().getLogfileOffset() + ":" - + entry.getHeader().getExecuteTime() + "(" + format.format(date) + ")"; + String position = entry.getHeader().getLogfileName() + ":" + entry.getHeader().getLogfileOffset() + ":" + + entry.getHeader().getExecuteTime() + "(" + format.format(date) + ")"; + if (StringUtils.isNotEmpty(entry.getHeader().getGtid())) { + position += " gtid(" + entry.getHeader().getGtid() + ")"; + } + return position; } protected void printEntry(List entrys) { @@ -190,8 +192,9 @@ public class AbstractCanalClientTest { new Object[] { entry.getHeader().getLogfileName(), String.valueOf(entry.getHeader().getLogfileOffset()), String.valueOf(entry.getHeader().getExecuteTime()), simpleDateFormat.format(date), - String.valueOf(delayTime) }); + entry.getHeader().getGtid(), String.valueOf(delayTime) }); logger.info(" BEGIN ----> Thread id: {}", begin.getThreadId()); + printXAInfo(begin.getPropsList()); } else if (entry.getEntryType() == EntryType.TRANSACTIONEND) { TransactionEnd end = null; try { @@ -202,11 +205,12 @@ public class AbstractCanalClientTest { // 打印事务提交信息,事务id logger.info("----------------\n"); logger.info(" END ----> transaction id: {}", end.getTransactionId()); + printXAInfo(end.getPropsList()); logger.info(transaction_format, new Object[] { entry.getHeader().getLogfileName(), String.valueOf(entry.getHeader().getLogfileOffset()), String.valueOf(entry.getHeader().getExecuteTime()), simpleDateFormat.format(date), - String.valueOf(delayTime) }); + entry.getHeader().getGtid(), String.valueOf(delayTime) }); } continue; @@ -227,13 +231,14 @@ public class AbstractCanalClientTest { String.valueOf(entry.getHeader().getLogfileOffset()), entry.getHeader().getSchemaName(), entry.getHeader().getTableName(), eventType, String.valueOf(entry.getHeader().getExecuteTime()), simpleDateFormat.format(date), - String.valueOf(delayTime) }); + entry.getHeader().getGtid(), String.valueOf(delayTime) }); if (eventType == EventType.QUERY || rowChage.getIsDdl()) { logger.info(" sql ----> " + rowChage.getSql() + SEP); continue; } + printXAInfo(rowChage.getPropsList()); for (RowData rowData : rowChage.getRowDatasList()) { if (eventType == EventType.DELETE) { printColumn(rowData.getBeforeColumnsList()); @@ -260,6 +265,27 @@ public class AbstractCanalClientTest { } } + protected void printXAInfo(List pairs) { + if (pairs == null) { + return; + } + + String xaType = null; + String xaXid = null; + for (Pair pair : pairs) { + String key = pair.getKey(); + if (StringUtils.endsWithIgnoreCase(key, "XA_TYPE")) { + xaType = pair.getValue(); + } else if (StringUtils.endsWithIgnoreCase(key, "XA_XID")) { + xaXid = pair.getValue(); + } + } + + if (xaType != null && xaXid != null) { + logger.info(" ------> " + xaType + " " + xaXid); + } + } + public void setConnector(CanalConnector connector) { this.connector = connector; } diff --git a/meta/src/main/java/com/alibaba/otter/canal/meta/FileMixedMetaManager.java b/meta/src/main/java/com/alibaba/otter/canal/meta/FileMixedMetaManager.java index 383fb351..49543939 100644 --- a/meta/src/main/java/com/alibaba/otter/canal/meta/FileMixedMetaManager.java +++ b/meta/src/main/java/com/alibaba/otter/canal/meta/FileMixedMetaManager.java @@ -109,10 +109,11 @@ public class FileMixedMetaManager extends MemoryMetaManager implements CanalMeta // 定时将内存中的最新值刷到file中,多次变更只刷一次 if (logger.isInfoEnabled()) { LogPosition cursor = (LogPosition) getCursor(clientIdentity); - logger.info("clientId:{} cursor:[{},{},{}] address[{}]", - new Object[] { clientIdentity.getClientId(), cursor.getPostion().getJournalName(), - cursor.getPostion().getPosition(), cursor.getPostion().getTimestamp(), - cursor.getIdentity().getSourceAddress().toString() }); + logger.info("clientId:{} cursor:[{},{},{},{},{}] address[{}]", new Object[] { + clientIdentity.getClientId(), cursor.getPostion().getJournalName(), + cursor.getPostion().getPosition(), cursor.getPostion().getTimestamp(), + cursor.getPostion().getServerId(), cursor.getPostion().getGtid(), + cursor.getIdentity().getSourceAddress().toString() }); } flushDataToFile(clientIdentity.getDestination()); updateCursorTasks.remove(clientIdentity); diff --git a/meta/src/main/java/com/alibaba/otter/canal/meta/MemoryMetaManager.java b/meta/src/main/java/com/alibaba/otter/canal/meta/MemoryMetaManager.java index 4d6072d8..d5e040a6 100644 --- a/meta/src/main/java/com/alibaba/otter/canal/meta/MemoryMetaManager.java +++ b/meta/src/main/java/com/alibaba/otter/canal/meta/MemoryMetaManager.java @@ -83,7 +83,8 @@ public class MemoryMetaManager extends AbstractCanalLifeCycle implements CanalMe } public synchronized List listAllSubscribeInfo(String destination) throws CanalMetaManagerException { - return destinations.get(destination); + // fixed issue #657, fixed ConcurrentModificationException + return Lists.newArrayList(destinations.get(destination)); } public Position getCursor(ClientIdentity clientIdentity) throws CanalMetaManagerException { diff --git a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/AbstractEventParser.java b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/AbstractEventParser.java index c486c463..d047c6be 100644 --- a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/AbstractEventParser.java +++ b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/AbstractEventParser.java @@ -8,8 +8,6 @@ import java.util.TimerTask; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; -import com.alibaba.otter.canal.parse.driver.mysql.packets.MysqlGTIDSet; -import com.google.protobuf.InvalidProtocolBufferException; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.commons.lang.math.RandomUtils; @@ -21,6 +19,7 @@ import com.alibaba.otter.canal.common.AbstractCanalLifeCycle; import com.alibaba.otter.canal.common.alarm.CanalAlarmHandler; import com.alibaba.otter.canal.filter.CanalEventFilter; import com.alibaba.otter.canal.parse.CanalEventParser; +import com.alibaba.otter.canal.parse.driver.mysql.packets.MysqlGTIDSet; import com.alibaba.otter.canal.parse.exception.CanalParseException; import com.alibaba.otter.canal.parse.exception.TableIdNotFoundException; import com.alibaba.otter.canal.parse.inbound.EventTransactionBuffer.TransactionFlushCallback; @@ -90,7 +89,6 @@ public abstract class AbstractEventParser extends AbstractCanalLifeCycle protected Throwable exception = null; protected boolean isGTIDMode = false; // 是否是GTID模式 - protected String GTIDSetStr = null; protected abstract BinlogParser buildParser(); @@ -550,13 +548,4 @@ public abstract class AbstractEventParser extends AbstractCanalLifeCycle public void setIsGTIDMode(boolean isGTIDMode) { this.isGTIDMode = isGTIDMode; } - - public String getGTIDSetStr() { - return GTIDSetStr; - } - - public void setGTIDSetStr(String GTIDSetStr) { - this.GTIDSetStr = GTIDSetStr; - } - } diff --git a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/AbstractMysqlEventParser.java b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/AbstractMysqlEventParser.java index 8d0c5288..3b0e605d 100644 --- a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/AbstractMysqlEventParser.java +++ b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/AbstractMysqlEventParser.java @@ -1,15 +1,13 @@ package com.alibaba.otter.canal.parse.inbound.mysql; -import java.io.IOException; import java.nio.charset.Charset; -import com.alibaba.otter.canal.parse.driver.mysql.packets.MysqlGTIDSet; -import com.alibaba.otter.canal.parse.inbound.mysql.dbsync.LogEventConvertGTID; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.alibaba.otter.canal.filter.CanalEventFilter; import com.alibaba.otter.canal.filter.aviater.AviaterRegexFilter; +import com.alibaba.otter.canal.parse.driver.mysql.packets.MysqlGTIDSet; import com.alibaba.otter.canal.parse.exception.CanalParseException; import com.alibaba.otter.canal.parse.inbound.AbstractEventParser; import com.alibaba.otter.canal.parse.inbound.BinlogParser; @@ -37,20 +35,7 @@ public abstract class AbstractMysqlEventParser extends AbstractEventParser { protected boolean useDruidDdlFilter = true; protected BinlogParser buildParser() { - LogEventConvert convert; - - if (isGTIDMode()) { - EntryPosition position; - try { - position = findStartPosition(null); - } catch (IOException e) { - throw new RuntimeException("findStartPosition failed.", e); - } - convert = new LogEventConvertGTID(MysqlGTIDSet.parse(position.getGtid())); - } else { - convert = new LogEventConvert(); - } - + LogEventConvert convert = new LogEventConvert(); if (eventFilter != null && eventFilter instanceof AviaterRegexFilter) { convert.setNameFilter((AviaterRegexFilter) eventFilter); } @@ -84,7 +69,18 @@ public abstract class AbstractMysqlEventParser extends AbstractEventParser { * @return */ protected boolean processTableMeta(EntryPosition position) { + if (isGTIDMode()) { + if (binlogParser instanceof LogEventConvert) { + // 记录gtid + ((LogEventConvert) binlogParser).setGtidSet(MysqlGTIDSet.parse(position.getGtid())); + } + } + if (tableMetaTSDB != null) { + if (position.getTimestamp() == null || position.getTimestamp() <= 0) { + throw new CanalParseException("use gtid and TableMeta TSDB should be config timestamp > 0"); + } + return tableMetaTSDB.rollback(position); } diff --git a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlEventParser.java b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlEventParser.java index 6b0c7a66..2efab0ee 100644 --- a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlEventParser.java +++ b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlEventParser.java @@ -10,10 +10,6 @@ import java.util.Map; import java.util.TimerTask; import java.util.concurrent.atomic.AtomicLong; -import com.alibaba.otter.canal.filter.aviater.AviaterRegexFilter; -import com.alibaba.otter.canal.parse.driver.mysql.packets.MysqlGTIDSet; -import com.alibaba.otter.canal.parse.inbound.BinlogParser; -import com.alibaba.otter.canal.parse.inbound.mysql.dbsync.LogEventConvertGTID; import org.apache.commons.lang.StringUtils; import org.springframework.util.CollectionUtils; @@ -354,8 +350,12 @@ public class MysqlEventParser extends AbstractMysqlEventParser implements CanalE if (logPosition != null) { return logPosition.getPostion(); } - return masterPosition; + + if (StringUtils.isNotEmpty(masterPosition.getGtid())) { + return masterPosition; + } } + EntryPosition startPosition = findStartPositionInternal(connection); if (needTransactionPosition.get()) { logger.warn("prepare to find last position : {}", startPosition.toString()); diff --git a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/LogEventConvert.java b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/LogEventConvert.java index dc243fd3..67332cfa 100644 --- a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/LogEventConvert.java +++ b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/LogEventConvert.java @@ -17,6 +17,7 @@ import org.slf4j.LoggerFactory; import com.alibaba.otter.canal.common.AbstractCanalLifeCycle; import com.alibaba.otter.canal.filter.aviater.AviaterRegexFilter; +import com.alibaba.otter.canal.parse.driver.mysql.packets.GTIDSet; import com.alibaba.otter.canal.parse.exception.CanalParseException; import com.alibaba.otter.canal.parse.exception.TableIdNotFoundException; import com.alibaba.otter.canal.parse.inbound.BinlogParser; @@ -40,6 +41,7 @@ import com.alibaba.otter.canal.protocol.position.EntryPosition; import com.google.protobuf.ByteString; import com.taobao.tddl.dbsync.binlog.LogEvent; import com.taobao.tddl.dbsync.binlog.event.DeleteRowsLogEvent; +import com.taobao.tddl.dbsync.binlog.event.GtidLogEvent; import com.taobao.tddl.dbsync.binlog.event.IntvarLogEvent; import com.taobao.tddl.dbsync.binlog.event.LogHeader; import com.taobao.tddl.dbsync.binlog.event.QueryLogEvent; @@ -56,7 +58,6 @@ import com.taobao.tddl.dbsync.binlog.event.UserVarLogEvent; import com.taobao.tddl.dbsync.binlog.event.WriteRowsLogEvent; import com.taobao.tddl.dbsync.binlog.event.XidLogEvent; import com.taobao.tddl.dbsync.binlog.event.mariadb.AnnotateRowsEvent; -import com.taobao.tddl.dbsync.binlog.event.GtidLogEvent; /** * 基于{@linkplain LogEvent}转化为Entry对象的处理 @@ -66,6 +67,12 @@ import com.taobao.tddl.dbsync.binlog.event.GtidLogEvent; */ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogParser { + public static final String XA_XID = "XA_XID"; + public static final String XA_TYPE = "XA_TYPE"; + public static final String XA_START = "XA START"; + public static final String XA_END = "XA END"; + public static final String XA_COMMIT = "XA COMMIT"; + public static final String XA_ROLLBACK = "XA ROLLBACK"; public static final String ISO_8859_1 = "ISO-8859-1"; public static final String UTF_8 = "UTF-8"; public static final int TINYINT_MAX_VALUE = 256; @@ -93,6 +100,17 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar private boolean filterRows = false; private boolean useDruidDdlFilter = true; + // latest gtid + private GTIDSet gtidSet; + + public LogEventConvert(GTIDSet gtidSet){ + this.gtidSet = gtidSet; + } + + public LogEventConvert(){ + + } + @Override public Entry parse(LogEvent logEvent, boolean isSeek) throws CanalParseException { if (logEvent == null || logEvent instanceof UnknownLogEvent) { @@ -148,16 +166,57 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar private Entry parseGTIDLogEvent(GtidLogEvent logEvent) { LogHeader logHeader = logEvent.getHeader(); - Header header = createHeader("", logHeader, "", "", EventType.GTID); + String value = logEvent.getSid().toString() + ":" + logEvent.getGno(); Pair.Builder builder = Pair.newBuilder(); builder.setKey("gtid"); - builder.setValue(String.format("%s:%d", logEvent.getSid(), logEvent.getGno())); + builder.setValue(value); + if (gtidSet != null) { + gtidSet.update(value); + } + + Header header = createHeader("", logHeader, "", "", EventType.GTID); return createEntry(header, EntryType.GTIDLOG, builder.build().toByteString()); } private Entry parseQueryEvent(QueryLogEvent event, boolean isSeek) { String queryString = event.getQuery(); - if (StringUtils.endsWithIgnoreCase(queryString, BEGIN)) { + if (StringUtils.startsWithIgnoreCase(queryString, XA_START)) { + // xa start use TransactionBegin + TransactionBegin.Builder beginBuilder = TransactionBegin.newBuilder(); + beginBuilder.setThreadId(event.getSessionId()); + beginBuilder.addProps(createSpecialPair(XA_TYPE, XA_START)); + beginBuilder.addProps(createSpecialPair(XA_XID, getXaXid(queryString, XA_START))); + TransactionBegin transactionBegin = beginBuilder.build(); + Header header = createHeader(binlogFileName, event.getHeader(), "", "", null); + return createEntry(header, EntryType.TRANSACTIONBEGIN, transactionBegin.toByteString()); + } else if (StringUtils.startsWithIgnoreCase(queryString, XA_END)) { + // xa start use TransactionEnd + TransactionEnd.Builder endBuilder = TransactionEnd.newBuilder(); + endBuilder.setTransactionId(String.valueOf(0L)); + endBuilder.addProps(createSpecialPair(XA_TYPE, XA_END)); + endBuilder.addProps(createSpecialPair(XA_XID, getXaXid(queryString, XA_END))); + TransactionEnd transactionEnd = endBuilder.build(); + Header header = createHeader(binlogFileName, event.getHeader(), "", "", null); + return createEntry(header, EntryType.TRANSACTIONEND, transactionEnd.toByteString()); + } else if (StringUtils.startsWithIgnoreCase(queryString, XA_COMMIT)) { + // xa commit + Header header = createHeader(binlogFileName, event.getHeader(), "", "", EventType.XACOMMIT); + RowChange.Builder rowChangeBuider = RowChange.newBuilder(); + rowChangeBuider.setSql(queryString); + rowChangeBuider.addProps(createSpecialPair(XA_TYPE, XA_COMMIT)); + rowChangeBuider.addProps(createSpecialPair(XA_XID, getXaXid(queryString, XA_COMMIT))); + rowChangeBuider.setEventType(EventType.XACOMMIT); + return createEntry(header, EntryType.ROWDATA, rowChangeBuider.build().toByteString()); + } else if (StringUtils.startsWithIgnoreCase(queryString, XA_ROLLBACK)) { + // xa rollback + Header header = createHeader(binlogFileName, event.getHeader(), "", "", EventType.XAROLLBACK); + RowChange.Builder rowChangeBuider = RowChange.newBuilder(); + rowChangeBuider.setSql(queryString); + rowChangeBuider.addProps(createSpecialPair(XA_TYPE, XA_ROLLBACK)); + rowChangeBuider.addProps(createSpecialPair(XA_XID, getXaXid(queryString, XA_ROLLBACK))); + rowChangeBuider.setEventType(EventType.XAROLLBACK); + return createEntry(header, EntryType.ROWDATA, rowChangeBuider.build().toByteString()); + } else if (StringUtils.endsWithIgnoreCase(queryString, BEGIN)) { TransactionBegin transactionBegin = createTransactionBegin(event.getSessionId()); Header header = createHeader(binlogFileName, event.getHeader(), "", "", null); return createEntry(header, EntryType.TRANSACTIONBEGIN, transactionBegin.toByteString()); @@ -220,6 +279,10 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar } } + private String getXaXid(String queryString, String type) { + return StringUtils.substringAfter(queryString, type); + } + private boolean processFilter(String queryString, DdlResult result) { String schemaName = result.getSchemaName(); String tableName = result.getTableName(); @@ -404,7 +467,7 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar // 处理alisql模式的test.heartbeat心跳数据 // 心跳表基本无权限,需要mock一个tableMeta FieldMeta idMeta = new FieldMeta("id", "smallint(6)", false, true, null); - FieldMeta typeMeta = new FieldMeta("type", "int(11)", true, false, null); + FieldMeta typeMeta = new FieldMeta("ts", "int(11)", true, false, null); tableMeta = new TableMeta(table.getDbName(), table.getTableName(), Arrays.asList(idMeta, typeMeta)); } @@ -571,11 +634,14 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar // fixed issue // https://github.com/alibaba/canal/issues/66,特殊处理binary/varbinary,不能做编码处理 boolean isBinary = false; + boolean isSingleBit = false; if (fieldMeta != null) { if (StringUtils.containsIgnoreCase(fieldMeta.getColumnType(), "VARBINARY")) { isBinary = true; } else if (StringUtils.containsIgnoreCase(fieldMeta.getColumnType(), "BINARY")) { isBinary = true; + } else if (StringUtils.containsIgnoreCase(fieldMeta.getColumnType(), "tinyint(1)")) { + isSingleBit = true; } } buffer.nextValue(info.type, info.meta, isBinary); @@ -585,6 +651,9 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar } int javaType = buffer.getJavaType(); + if (isSingleBit && javaType == Types.TINYINT) { + javaType = Types.BIT; + } if (buffer.isNull()) { columnBuilder.setIsNull(true); } else { @@ -737,6 +806,11 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar headerBuilder.setTableName(tableName); } headerBuilder.setEventLength(logHeader.getEventLen()); + // enable gtid position + if (gtidSet != null) { + String gtid = gtidSet.toString(); + headerBuilder.setGtid(gtid); + } return headerBuilder.build(); } @@ -785,7 +859,7 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar return "LONGTEXT".equalsIgnoreCase(columnType) || "MEDIUMTEXT".equalsIgnoreCase(columnType) || "TEXT".equalsIgnoreCase(columnType) || "TINYTEXT".equalsIgnoreCase(columnType); } - + private boolean isAliSQLHeartBeat(String schema, String table) { return "test".equalsIgnoreCase(schema) && "heartbeat".equalsIgnoreCase(table); } @@ -857,4 +931,8 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar this.filterRows = filterRows; } + public void setGtidSet(GTIDSet gtidSet) { + this.gtidSet = gtidSet; + } + } diff --git a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/LogEventConvertGTID.java b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/LogEventConvertGTID.java deleted file mode 100644 index 337e6f48..00000000 --- a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/LogEventConvertGTID.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.alibaba.otter.canal.parse.inbound.mysql.dbsync; - -import com.alibaba.otter.canal.parse.driver.mysql.packets.GTIDSet; -import com.alibaba.otter.canal.parse.exception.CanalParseException; -import com.alibaba.otter.canal.parse.inbound.BinlogParser; -import com.alibaba.otter.canal.protocol.CanalEntry; -import com.google.protobuf.InvalidProtocolBufferException; -import com.taobao.tddl.dbsync.binlog.LogEvent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Created by hiwjd on 2018/5/2. - * hiwjd0@gmail.com - */ -public class LogEventConvertGTID extends LogEventConvert implements BinlogParser { - - public static final Logger logger = LoggerFactory.getLogger(LogEventConvertGTID.class); - - // latest gtid - private GTIDSet gtidSet; - - public LogEventConvertGTID(GTIDSet gtidSet) { - this.gtidSet = gtidSet; - } - - @Override - public CanalEntry.Entry parse(LogEvent event, boolean isSeek) throws CanalParseException { - CanalEntry.Entry entry = super.parse(event, isSeek); - if (entry == null) { - return null; - } - - if (entry.getEntryType() == CanalEntry.EntryType.GTIDLOG) { - try { - CanalEntry.Pair pair = CanalEntry.Pair.parseFrom(entry.getStoreValue()); - gtidSet.update(pair.getValue()); - - } catch (InvalidProtocolBufferException e) { - logger.error("retrive gtid failed.", e); - throw new CanalParseException("retrive gtid failed.", e); - } - - return null; - } - - if (gtidSet != null) { - String gtid = gtidSet.toString(); - CanalEntry.Header header = entry.getHeader().toBuilder().setGtid(gtid).build(); - entry = entry.toBuilder().setHeader(header).build(); - } - - return entry; - } -} diff --git a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/MemoryTableMeta.java b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/MemoryTableMeta.java index f5621f51..127df1c4 100644 --- a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/MemoryTableMeta.java +++ b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/MemoryTableMeta.java @@ -16,6 +16,7 @@ import com.alibaba.fastsql.sql.ast.SQLExpr; import com.alibaba.fastsql.sql.ast.SQLStatement; import com.alibaba.fastsql.sql.ast.expr.SQLCharExpr; import com.alibaba.fastsql.sql.ast.expr.SQLIdentifierExpr; +import com.alibaba.fastsql.sql.ast.expr.SQLMethodInvokeExpr; import com.alibaba.fastsql.sql.ast.expr.SQLNullExpr; import com.alibaba.fastsql.sql.ast.expr.SQLPropertyExpr; import com.alibaba.fastsql.sql.ast.statement.SQLColumnConstraint; @@ -243,6 +244,8 @@ public class MemoryTableMeta implements TableMetaTSDB { return DruidDdlParser.unescapeName(((SQLIdentifierExpr) sqlName).getName()); } else if (sqlName instanceof SQLCharExpr) { return ((SQLCharExpr) sqlName).getText(); + } else if (sqlName instanceof SQLMethodInvokeExpr) { + return DruidDdlParser.unescapeName(((SQLMethodInvokeExpr) sqlName).getMethodName()); } else { return sqlName.toString(); } diff --git a/parse/src/test/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlDumpTest.java b/parse/src/test/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlDumpTest.java index a0754635..6849c5b3 100644 --- a/parse/src/test/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlDumpTest.java +++ b/parse/src/test/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlDumpTest.java @@ -4,6 +4,7 @@ import java.net.InetSocketAddress; import java.nio.charset.Charset; import java.util.List; +import org.apache.commons.lang.StringUtils; import org.junit.Assert; import org.junit.Test; @@ -16,6 +17,7 @@ import com.alibaba.otter.canal.protocol.CanalEntry.Column; import com.alibaba.otter.canal.protocol.CanalEntry.Entry; import com.alibaba.otter.canal.protocol.CanalEntry.EntryType; import com.alibaba.otter.canal.protocol.CanalEntry.EventType; +import com.alibaba.otter.canal.protocol.CanalEntry.Pair; import com.alibaba.otter.canal.protocol.CanalEntry.RowChange; import com.alibaba.otter.canal.protocol.CanalEntry.RowData; import com.alibaba.otter.canal.protocol.position.EntryPosition; @@ -27,8 +29,8 @@ public class MysqlDumpTest { @Test public void testSimple() { final MysqlEventParser controller = new MysqlEventParser(); - final EntryPosition startPosition = new EntryPosition("mysql-bin.000001", 104606L); - + final EntryPosition startPosition = new EntryPosition("mysql-bin.000012", 34051L, 100L); + // startPosition.setGtid("f1ceb61a-a5d5-11e7-bdee-107c3dbcf8a7:1-17"); controller.setConnectionCharset(Charset.forName("UTF-8")); controller.setSlaveId(3344L); controller.setDetectingEnable(false); @@ -39,6 +41,7 @@ public class MysqlDumpTest { controller.setTsdbSpringXml("classpath:tsdb/h2-tsdb.xml"); controller.setEventFilter(new AviaterRegexFilter("test\\..*")); controller.setEventBlackFilter(new AviaterRegexFilter("canal_tsdb\\..*")); + controller.setIsGTIDMode(false); controller.setEventSink(new AbstractCanalEventSinkTest>() { public boolean sink(List entrys, InetSocketAddress remoteAddress, String destination) @@ -72,6 +75,7 @@ public class MysqlDumpTest { System.out.println(" sql ----> " + rowChage.getSql()); } + printXAInfo(rowChage.getPropsList()); for (RowData rowData : rowChage.getRowDatasList()) { if (eventType == EventType.DELETE) { print(rowData.getBeforeColumnsList()); @@ -118,4 +122,25 @@ public class MysqlDumpTest { System.out.println(column.getName() + " : " + column.getValue() + " update=" + column.getUpdated()); } } + + private void printXAInfo(List pairs) { + if (pairs == null) { + return; + } + + String xaType = null; + String xaXid = null; + for (Pair pair : pairs) { + String key = pair.getKey(); + if (StringUtils.endsWithIgnoreCase(key, "XA_TYPE")) { + xaType = pair.getValue(); + } else if (StringUtils.endsWithIgnoreCase(key, "XA_XID")) { + xaXid = pair.getValue(); + } + } + + if (xaType != null && xaXid != null) { + System.out.println(" ------> " + xaType + " " + xaXid); + } + } } diff --git a/parse/src/test/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/FastsqlSchemaTest.java b/parse/src/test/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/FastsqlSchemaTest.java new file mode 100644 index 00000000..c7e25607 --- /dev/null +++ b/parse/src/test/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/FastsqlSchemaTest.java @@ -0,0 +1,30 @@ +package com.alibaba.otter.canal.parse.inbound.mysql.tsdb; + +import java.io.FileNotFoundException; +import java.io.IOException; + +import org.junit.Test; + +import com.alibaba.fastsql.sql.repository.SchemaObject; +import com.alibaba.fastsql.sql.repository.SchemaRepository; +import com.alibaba.fastsql.util.JdbcConstants; + +/** + * @author agapple 2018年6月7日 下午5:36:13 + * @since 3.1.9 + */ +public class FastsqlSchemaTest { + + @Test + public void testSimple() throws FileNotFoundException, IOException { + SchemaRepository repository = new SchemaRepository(JdbcConstants.MYSQL); + String sql = "create table yushitai_test.card_record ( id bigint auto_increment) auto_increment=256 " + + "; alter table yushitai_test.card_record add column customization_id bigint unsigned NOT NULL COMMENT 'TEST' ;" + + "; rename table yushitai_test.card_record to yushitai_test._card_record_del;"; + repository.console(sql); + + repository.setDefaultSchema("yushitai_test"); + SchemaObject table = repository.findTable("_card_record_del"); + System.out.println(table.getStatement().toString()); + } +} diff --git a/parse/src/test/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/MemoryTableMeta_DDL_Test.java b/parse/src/test/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/MemoryTableMeta_DDL_Test.java new file mode 100644 index 00000000..e3005b62 --- /dev/null +++ b/parse/src/test/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/MemoryTableMeta_DDL_Test.java @@ -0,0 +1,40 @@ +package com.alibaba.otter.canal.parse.inbound.mysql.tsdb; + +import java.io.File; +import java.io.FileInputStream; +import java.net.URL; + +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.StringUtils; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.alibaba.otter.canal.parse.inbound.TableMeta; + +/** + * @author agapple 2017年8月1日 下午7:15:54 + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = { "/tsdb/mysql-tsdb.xml" }) +public class MemoryTableMeta_DDL_Test { + + @Test + public void test1() throws Throwable { + MemoryTableMeta memoryTableMeta = new MemoryTableMeta(); + URL url = Thread.currentThread().getContextClassLoader().getResource("dummy.txt"); + File dummyFile = new File(url.getFile()); + File create = new File(dummyFile.getParent() + "/ddl", "ddl_test1.sql"); + String sql = StringUtils.join(IOUtils.readLines(new FileInputStream(create)), "\n"); + memoryTableMeta.apply(null, "test", sql, null); + + TableMeta meta = memoryTableMeta.find("yushitai_test", "card_record"); + System.out.println(meta); + Assert.assertNotNull(meta.getFieldMetaByName("customization_id")); + + meta = memoryTableMeta.find("yushitai_test", "_card_record_gho"); + Assert.assertNull(meta); + } +} diff --git a/parse/src/test/resources/ddl/ddl_test1.sql b/parse/src/test/resources/ddl/ddl_test1.sql new file mode 100644 index 00000000..a708fdac --- /dev/null +++ b/parse/src/test/resources/ddl/ddl_test1.sql @@ -0,0 +1,21 @@ +create table yushitai_test.card_record ( +id bigint auto_increment, +last_update timestamp not null DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, +hint varchar(64) charset ascii not null, +value varchar(255) charset ascii not null, +primary key(id), +unique key hint_uidx(hint) +) auto_increment=256 ; + +DROP TABLE IF EXISTS _card_record_gho /* generated by server */ ; +DROP TABLE IF EXISTS _card_record_del /* generated by server */ ; + +create /* gh-ost */ table yushitai_test._card_record_gho like yushitai_test.card_record ; +alter /* gh-ost */ table yushitai_test._card_record_gho add column customization_id bigint unsigned NOT NULL COMMENT 'TEST' ; + +create /* gh-ost */ table yushitai_test._card_record_del ( +id int auto_increment primary key +) engine=InnoDB comment='ghost-cut-over-sentry' ; + +DROP TABLE IF EXISTS _card_record_del /* generated by server */ ; +rename /* gh-ost */ table yushitai_test.card_record to yushitai_test._card_record_del, yushitai_test._card_record_gho to yushitai_test.card_record; \ No newline at end of file diff --git a/pom.xml b/pom.xml index e9c2623b..1c4ff11b 100644 --- a/pom.xml +++ b/pom.xml @@ -254,7 +254,7 @@ com.alibaba.fastsql fastsql - 2.0.0_preview_186 + 2.0.0_preview_371 com.alibaba diff --git a/protocol/src/main/java/com/alibaba/otter/canal/protocol/CanalEntry.java b/protocol/src/main/java/com/alibaba/otter/canal/protocol/CanalEntry.java index eb911fb5..d802f54e 100644 --- a/protocol/src/main/java/com/alibaba/otter/canal/protocol/CanalEntry.java +++ b/protocol/src/main/java/com/alibaba/otter/canal/protocol/CanalEntry.java @@ -8,13 +8,14 @@ public final class CanalEntry { public static void registerAllExtensions( com.google.protobuf.ExtensionRegistry registry) { } - /** - * Protobuf enum {@code com.alibaba.otter.canal.protocol.EntryType} - * - *
-   **打散后的事件类型,主要用于标识事务的开始,变更数据,结束*
-   * 
- */ + + /** + * Protobuf enum {@code com.alibaba.otter.canal.protocol.EntryType} + * + *
+     * *打散后的事件类型,主要用于标识事务的开始,变更数据,结束*
+     * 
+ */ public enum EntryType implements com.google.protobuf.ProtocolMessageEnum { /** @@ -29,13 +30,13 @@ public final class CanalEntry { * TRANSACTIONEND = 3; */ TRANSACTIONEND(2, 3), - /** - * HEARTBEAT = 4; - * - *
-     ** 心跳类型,内部使用,外部暂不可见,可忽略 *
-     * 
- */ + /** + * HEARTBEAT = 4; + * + *
+         * * 心跳类型,内部使用,外部暂不可见,可忽略 *
+         * 
+ */ HEARTBEAT(3, 4), /** * GTIDLOG = 5; @@ -55,13 +56,13 @@ public final class CanalEntry { * TRANSACTIONEND = 3; */ public static final int TRANSACTIONEND_VALUE = 3; - /** - * HEARTBEAT = 4; - * - *
-     ** 心跳类型,内部使用,外部暂不可见,可忽略 *
-     * 
- */ + /** + * HEARTBEAT = 4; + * + *
+         * * 心跳类型,内部使用,外部暂不可见,可忽略 *
+         * 
+ */ public static final int HEARTBEAT_VALUE = 4; /** * GTIDLOG = 5; @@ -129,13 +130,13 @@ public final class CanalEntry { // @@protoc_insertion_point(enum_scope:com.alibaba.otter.canal.protocol.EntryType) } - /** - * Protobuf enum {@code com.alibaba.otter.canal.protocol.EventType} - * - *
-   ** 事件类型 *
-   * 
- */ + /** + * Protobuf enum {@code com.alibaba.otter.canal.protocol.EventType} + * + *
+     * * 事件类型 *
+     * 
+ */ public enum EventType implements com.google.protobuf.ProtocolMessageEnum { /** @@ -190,6 +191,26 @@ public final class CanalEntry { * GTID = 12; */ GTID(11, 12), + /** + * XASTART = 13; + * + *
+     ** XA *
+     * 
+ */ + XASTART(12, 13), + /** + * XAEND = 14; + */ + XAEND(13, 14), + /** + * XACOMMIT = 15; + */ + XACOMMIT(14, 15), + /** + * XAROLLBACK = 16; + */ + XAROLLBACK(15, 16), ; /** @@ -244,6 +265,26 @@ public final class CanalEntry { * GTID = 12; */ public static final int GTID_VALUE = 12; + /** + * XASTART = 13; + * + *
+     ** XA *
+     * 
+ */ + public static final int XASTART_VALUE = 13; + /** + * XAEND = 14; + */ + public static final int XAEND_VALUE = 14; + /** + * XACOMMIT = 15; + */ + public static final int XACOMMIT_VALUE = 15; + /** + * XAROLLBACK = 16; + */ + public static final int XAROLLBACK_VALUE = 16; public final int getNumber() { return value; } @@ -262,6 +303,10 @@ public final class CanalEntry { case 10: return CINDEX; case 11: return DINDEX; case 12: return GTID; + case 13: return XASTART; + case 14: return XAEND; + case 15: return XACOMMIT; + case 16: return XAROLLBACK; default: return null; } } @@ -313,13 +358,13 @@ public final class CanalEntry { // @@protoc_insertion_point(enum_scope:com.alibaba.otter.canal.protocol.EventType) } - /** - * Protobuf enum {@code com.alibaba.otter.canal.protocol.Type} - * - *
-   **数据库类型*
-   * 
- */ + /** + * Protobuf enum {@code com.alibaba.otter.canal.protocol.Type} + * + *
+     * *数据库类型*
+     * 
+ */ public enum Type implements com.google.protobuf.ProtocolMessageEnum { /** @@ -412,75 +457,80 @@ public final class CanalEntry { // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.Entry) com.google.protobuf.MessageOrBuilder { - /** - * optional .com.alibaba.otter.canal.protocol.Header header = 1; - * - *
-     **协议头部信息*
-     * 
- */ + /** + * optional .com.alibaba.otter.canal.protocol.Header header = 1; + * + *
+         * *协议头部信息*
+         * 
+ */ boolean hasHeader(); - /** - * optional .com.alibaba.otter.canal.protocol.Header header = 1; - * - *
-     **协议头部信息*
-     * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.Header header = 1; + * + *
+         * *协议头部信息*
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.Header getHeader(); - /** - * optional .com.alibaba.otter.canal.protocol.Header header = 1; - * - *
-     **协议头部信息*
-     * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.Header header = 1; + * + *
+         * *协议头部信息*
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.HeaderOrBuilder getHeaderOrBuilder(); - /** - * optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA]; - * - *
-     **打散后的事件类型*
-     * 
- */ + /** + * optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA]; + * + *
+         * *打散后的事件类型*
+         * 
+ */ boolean hasEntryType(); - /** - * optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA]; - * - *
-     **打散后的事件类型*
-     * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA]; + * + *
+         * *打散后的事件类型*
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.EntryType getEntryType(); - /** - * optional bytes storeValue = 3; - * - *
-     **传输的二进制数组*
-     * 
- */ + /** + * optional bytes storeValue = 3; + * + *
+         * *传输的二进制数组*
+         * 
+ */ boolean hasStoreValue(); - /** - * optional bytes storeValue = 3; - * - *
-     **传输的二进制数组*
-     * 
- */ + + /** + * optional bytes storeValue = 3; + * + *
+         * *传输的二进制数组*
+         * 
+ */ com.google.protobuf.ByteString getStoreValue(); } - /** - * Protobuf type {@code com.alibaba.otter.canal.protocol.Entry} - * - *
-   ****************************************************************
-   * message model
-   *如果要在Enum中新增类型,确保以前的类型的下标值不变.
-   ***************************************************************
-   * 
- */ + + /** + * Protobuf type {@code com.alibaba.otter.canal.protocol.Entry} + * + *
+     ****************************************************************
+     *  message model
+     * 如果要在Enum中新增类型,确保以前的类型的下标值不变.
+     ***************************************************************
+     * 
+ */ public static final class Entry extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.Entry) @@ -601,79 +651,86 @@ public final class CanalEntry { private int bitField0_; public static final int HEADER_FIELD_NUMBER = 1; private com.alibaba.otter.canal.protocol.CanalEntry.Header header_; - /** - * optional .com.alibaba.otter.canal.protocol.Header header = 1; - * - *
-     **协议头部信息*
-     * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.Header header = 1; + * + *
+         * *协议头部信息*
+         * 
+ */ public boolean hasHeader() { return ((bitField0_ & 0x00000001) == 0x00000001); } - /** - * optional .com.alibaba.otter.canal.protocol.Header header = 1; - * - *
-     **协议头部信息*
-     * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.Header header = 1; + * + *
+         * *协议头部信息*
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Header getHeader() { return header_; } - /** - * optional .com.alibaba.otter.canal.protocol.Header header = 1; - * - *
-     **协议头部信息*
-     * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.Header header = 1; + * + *
+         * *协议头部信息*
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.HeaderOrBuilder getHeaderOrBuilder() { return header_; } public static final int ENTRYTYPE_FIELD_NUMBER = 2; private com.alibaba.otter.canal.protocol.CanalEntry.EntryType entryType_; - /** - * optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA]; - * - *
-     **打散后的事件类型*
-     * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA]; + * + *
+         * *打散后的事件类型*
+         * 
+ */ public boolean hasEntryType() { return ((bitField0_ & 0x00000002) == 0x00000002); } - /** - * optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA]; - * - *
-     **打散后的事件类型*
-     * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA]; + * + *
+         * *打散后的事件类型*
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.EntryType getEntryType() { return entryType_; } public static final int STOREVALUE_FIELD_NUMBER = 3; private com.google.protobuf.ByteString storeValue_; - /** - * optional bytes storeValue = 3; - * - *
-     **传输的二进制数组*
-     * 
- */ + + /** + * optional bytes storeValue = 3; + * + *
+         * *传输的二进制数组*
+         * 
+ */ public boolean hasStoreValue() { return ((bitField0_ & 0x00000004) == 0x00000004); } - /** - * optional bytes storeValue = 3; - * - *
-     **传输的二进制数组*
-     * 
- */ + + /** + * optional bytes storeValue = 3; + * + *
+         * *传输的二进制数组*
+         * 
+ */ public com.google.protobuf.ByteString getStoreValue() { return storeValue_; } @@ -804,16 +861,17 @@ public final class CanalEntry { Builder builder = new Builder(parent); return builder; } - /** - * Protobuf type {@code com.alibaba.otter.canal.protocol.Entry} - * - *
-     ****************************************************************
-     * message model
-     *如果要在Enum中新增类型,确保以前的类型的下标值不变.
-     ***************************************************************
-     * 
- */ + + /** + * Protobuf type {@code com.alibaba.otter.canal.protocol.Entry} + * + *
+         ****************************************************************
+         *  message model
+         * 如果要在Enum中新增类型,确保以前的类型的下标值不变.
+         ***************************************************************
+         * 
+ */ public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.Entry) @@ -960,23 +1018,25 @@ public final class CanalEntry { private com.alibaba.otter.canal.protocol.CanalEntry.Header header_ = com.alibaba.otter.canal.protocol.CanalEntry.Header.getDefaultInstance(); private com.google.protobuf.SingleFieldBuilder< com.alibaba.otter.canal.protocol.CanalEntry.Header, com.alibaba.otter.canal.protocol.CanalEntry.Header.Builder, com.alibaba.otter.canal.protocol.CanalEntry.HeaderOrBuilder> headerBuilder_; - /** - * optional .com.alibaba.otter.canal.protocol.Header header = 1; - * - *
-       **协议头部信息*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.Header header = 1; + * + *
+             * *协议头部信息*
+             * 
+ */ public boolean hasHeader() { return ((bitField0_ & 0x00000001) == 0x00000001); } - /** - * optional .com.alibaba.otter.canal.protocol.Header header = 1; - * - *
-       **协议头部信息*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.Header header = 1; + * + *
+             * *协议头部信息*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Header getHeader() { if (headerBuilder_ == null) { return header_; @@ -984,13 +1044,14 @@ public final class CanalEntry { return headerBuilder_.getMessage(); } } - /** - * optional .com.alibaba.otter.canal.protocol.Header header = 1; - * - *
-       **协议头部信息*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.Header header = 1; + * + *
+             * *协议头部信息*
+             * 
+ */ public Builder setHeader(com.alibaba.otter.canal.protocol.CanalEntry.Header value) { if (headerBuilder_ == null) { if (value == null) { @@ -1004,13 +1065,14 @@ public final class CanalEntry { bitField0_ |= 0x00000001; return this; } - /** - * optional .com.alibaba.otter.canal.protocol.Header header = 1; - * - *
-       **协议头部信息*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.Header header = 1; + * + *
+             * *协议头部信息*
+             * 
+ */ public Builder setHeader( com.alibaba.otter.canal.protocol.CanalEntry.Header.Builder builderForValue) { if (headerBuilder_ == null) { @@ -1022,13 +1084,14 @@ public final class CanalEntry { bitField0_ |= 0x00000001; return this; } - /** - * optional .com.alibaba.otter.canal.protocol.Header header = 1; - * - *
-       **协议头部信息*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.Header header = 1; + * + *
+             * *协议头部信息*
+             * 
+ */ public Builder mergeHeader(com.alibaba.otter.canal.protocol.CanalEntry.Header value) { if (headerBuilder_ == null) { if (((bitField0_ & 0x00000001) == 0x00000001) && @@ -1045,13 +1108,14 @@ public final class CanalEntry { bitField0_ |= 0x00000001; return this; } - /** - * optional .com.alibaba.otter.canal.protocol.Header header = 1; - * - *
-       **协议头部信息*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.Header header = 1; + * + *
+             * *协议头部信息*
+             * 
+ */ public Builder clearHeader() { if (headerBuilder_ == null) { header_ = com.alibaba.otter.canal.protocol.CanalEntry.Header.getDefaultInstance(); @@ -1062,25 +1126,27 @@ public final class CanalEntry { bitField0_ = (bitField0_ & ~0x00000001); return this; } - /** - * optional .com.alibaba.otter.canal.protocol.Header header = 1; - * - *
-       **协议头部信息*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.Header header = 1; + * + *
+             * *协议头部信息*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Header.Builder getHeaderBuilder() { bitField0_ |= 0x00000001; onChanged(); return getHeaderFieldBuilder().getBuilder(); } - /** - * optional .com.alibaba.otter.canal.protocol.Header header = 1; - * - *
-       **协议头部信息*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.Header header = 1; + * + *
+             * *协议头部信息*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.HeaderOrBuilder getHeaderOrBuilder() { if (headerBuilder_ != null) { return headerBuilder_.getMessageOrBuilder(); @@ -1088,13 +1154,14 @@ public final class CanalEntry { return header_; } } - /** - * optional .com.alibaba.otter.canal.protocol.Header header = 1; - * - *
-       **协议头部信息*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.Header header = 1; + * + *
+             * *协议头部信息*
+             * 
+ */ private com.google.protobuf.SingleFieldBuilder< com.alibaba.otter.canal.protocol.CanalEntry.Header, com.alibaba.otter.canal.protocol.CanalEntry.Header.Builder, com.alibaba.otter.canal.protocol.CanalEntry.HeaderOrBuilder> getHeaderFieldBuilder() { @@ -1110,33 +1177,36 @@ public final class CanalEntry { } private com.alibaba.otter.canal.protocol.CanalEntry.EntryType entryType_ = com.alibaba.otter.canal.protocol.CanalEntry.EntryType.ROWDATA; - /** - * optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA]; - * - *
-       **打散后的事件类型*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA]; + * + *
+             * *打散后的事件类型*
+             * 
+ */ public boolean hasEntryType() { return ((bitField0_ & 0x00000002) == 0x00000002); } - /** - * optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA]; - * - *
-       **打散后的事件类型*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA]; + * + *
+             * *打散后的事件类型*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.EntryType getEntryType() { return entryType_; } - /** - * optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA]; - * - *
-       **打散后的事件类型*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA]; + * + *
+             * *打散后的事件类型*
+             * 
+ */ public Builder setEntryType(com.alibaba.otter.canal.protocol.CanalEntry.EntryType value) { if (value == null) { throw new NullPointerException(); @@ -1146,13 +1216,14 @@ public final class CanalEntry { onChanged(); return this; } - /** - * optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA]; - * - *
-       **打散后的事件类型*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA]; + * + *
+             * *打散后的事件类型*
+             * 
+ */ public Builder clearEntryType() { bitField0_ = (bitField0_ & ~0x00000002); entryType_ = com.alibaba.otter.canal.protocol.CanalEntry.EntryType.ROWDATA; @@ -1161,33 +1232,36 @@ public final class CanalEntry { } private com.google.protobuf.ByteString storeValue_ = com.google.protobuf.ByteString.EMPTY; - /** - * optional bytes storeValue = 3; - * - *
-       **传输的二进制数组*
-       * 
- */ + + /** + * optional bytes storeValue = 3; + * + *
+             * *传输的二进制数组*
+             * 
+ */ public boolean hasStoreValue() { return ((bitField0_ & 0x00000004) == 0x00000004); } - /** - * optional bytes storeValue = 3; - * - *
-       **传输的二进制数组*
-       * 
- */ + + /** + * optional bytes storeValue = 3; + * + *
+             * *传输的二进制数组*
+             * 
+ */ public com.google.protobuf.ByteString getStoreValue() { return storeValue_; } - /** - * optional bytes storeValue = 3; - * - *
-       **传输的二进制数组*
-       * 
- */ + + /** + * optional bytes storeValue = 3; + * + *
+             * *传输的二进制数组*
+             * 
+ */ public Builder setStoreValue(com.google.protobuf.ByteString value) { if (value == null) { throw new NullPointerException(); @@ -1197,13 +1271,14 @@ public final class CanalEntry { onChanged(); return this; } - /** - * optional bytes storeValue = 3; - * - *
-       **传输的二进制数组*
-       * 
- */ + + /** + * optional bytes storeValue = 3; + * + *
+             * *传输的二进制数组*
+             * 
+ */ public Builder clearStoreValue() { bitField0_ = (bitField0_ & ~0x00000004); storeValue_ = getDefaultInstance().getStoreValue(); @@ -1226,296 +1301,317 @@ public final class CanalEntry { // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.Header) com.google.protobuf.MessageOrBuilder { - /** - * optional int32 version = 1 [default = 1]; - * - *
-     **协议的版本号*
-     * 
- */ + /** + * optional int32 version = 1 [default = 1]; + * + *
+         * *协议的版本号*
+         * 
+ */ boolean hasVersion(); - /** - * optional int32 version = 1 [default = 1]; - * - *
-     **协议的版本号*
-     * 
- */ + + /** + * optional int32 version = 1 [default = 1]; + * + *
+         * *协议的版本号*
+         * 
+ */ int getVersion(); - /** - * optional string logfileName = 2; - * - *
-     **binlog/redolog 文件名*
-     * 
- */ + /** + * optional string logfileName = 2; + * + *
+         * *binlog/redolog 文件名*
+         * 
+ */ boolean hasLogfileName(); - /** - * optional string logfileName = 2; - * - *
-     **binlog/redolog 文件名*
-     * 
- */ + + /** + * optional string logfileName = 2; + * + *
+         * *binlog/redolog 文件名*
+         * 
+ */ java.lang.String getLogfileName(); - /** - * optional string logfileName = 2; - * - *
-     **binlog/redolog 文件名*
-     * 
- */ + + /** + * optional string logfileName = 2; + * + *
+         * *binlog/redolog 文件名*
+         * 
+ */ com.google.protobuf.ByteString getLogfileNameBytes(); - /** - * optional int64 logfileOffset = 3; - * - *
-     **binlog/redolog 文件的偏移位置*
-     * 
- */ + /** + * optional int64 logfileOffset = 3; + * + *
+         * *binlog/redolog 文件的偏移位置*
+         * 
+ */ boolean hasLogfileOffset(); - /** - * optional int64 logfileOffset = 3; - * - *
-     **binlog/redolog 文件的偏移位置*
-     * 
- */ + + /** + * optional int64 logfileOffset = 3; + * + *
+         * *binlog/redolog 文件的偏移位置*
+         * 
+ */ long getLogfileOffset(); - /** - * optional int64 serverId = 4; - * - *
-     **服务端serverId*
-     * 
- */ + /** + * optional int64 serverId = 4; + * + *
+         * *服务端serverId*
+         * 
+ */ boolean hasServerId(); - /** - * optional int64 serverId = 4; - * - *
-     **服务端serverId*
-     * 
- */ + + /** + * optional int64 serverId = 4; + * + *
+         * *服务端serverId*
+         * 
+ */ long getServerId(); - /** - * optional string serverenCode = 5; - * - *
-     ** 变更数据的编码 *
-     * 
- */ + /** + * optional string serverenCode = 5; + * + *
+         * * 变更数据的编码 *
+         * 
+ */ boolean hasServerenCode(); - /** - * optional string serverenCode = 5; - * - *
-     ** 变更数据的编码 *
-     * 
- */ + + /** + * optional string serverenCode = 5; + * + *
+         * * 变更数据的编码 *
+         * 
+ */ java.lang.String getServerenCode(); - /** - * optional string serverenCode = 5; - * - *
-     ** 变更数据的编码 *
-     * 
- */ + + /** + * optional string serverenCode = 5; + * + *
+         * * 变更数据的编码 *
+         * 
+ */ com.google.protobuf.ByteString getServerenCodeBytes(); - /** - * optional int64 executeTime = 6; - * - *
-     **变更数据的执行时间 *
-     * 
- */ + /** + * optional int64 executeTime = 6; + * + *
+         * *变更数据的执行时间 *
+         * 
+ */ boolean hasExecuteTime(); - /** - * optional int64 executeTime = 6; - * - *
-     **变更数据的执行时间 *
-     * 
- */ + + /** + * optional int64 executeTime = 6; + * + *
+         * *变更数据的执行时间 *
+         * 
+ */ long getExecuteTime(); - /** - * optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL]; - * - *
-     ** 变更数据的来源*
-     * 
- */ + /** + * optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL]; + * + *
+         * * 变更数据的来源*
+         * 
+ */ boolean hasSourceType(); - /** - * optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL]; - * - *
-     ** 变更数据的来源*
-     * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL]; + * + *
+         * * 变更数据的来源*
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.Type getSourceType(); - /** - * optional string schemaName = 8; - * - *
-     ** 变更数据的schemaname*
-     * 
- */ + /** + * optional string schemaName = 8; + * + *
+         * * 变更数据的schemaname*
+         * 
+ */ boolean hasSchemaName(); - /** - * optional string schemaName = 8; - * - *
-     ** 变更数据的schemaname*
-     * 
- */ + + /** + * optional string schemaName = 8; + * + *
+         * * 变更数据的schemaname*
+         * 
+ */ java.lang.String getSchemaName(); - /** - * optional string schemaName = 8; - * - *
-     ** 变更数据的schemaname*
-     * 
- */ + + /** + * optional string schemaName = 8; + * + *
+         * * 变更数据的schemaname*
+         * 
+ */ com.google.protobuf.ByteString getSchemaNameBytes(); - /** - * optional string tableName = 9; - * - *
-     **变更数据的tablename*
-     * 
- */ + /** + * optional string tableName = 9; + * + *
+         * *变更数据的tablename*
+         * 
+ */ boolean hasTableName(); - /** - * optional string tableName = 9; - * - *
-     **变更数据的tablename*
-     * 
- */ + + /** + * optional string tableName = 9; + * + *
+         * *变更数据的tablename*
+         * 
+ */ java.lang.String getTableName(); - /** - * optional string tableName = 9; - * - *
-     **变更数据的tablename*
-     * 
- */ + + /** + * optional string tableName = 9; + * + *
+         * *变更数据的tablename*
+         * 
+ */ com.google.protobuf.ByteString getTableNameBytes(); - /** - * optional int64 eventLength = 10; - * - *
-     **每个event的长度*
-     * 
- */ + /** + * optional int64 eventLength = 10; + * + *
+         * *每个event的长度*
+         * 
+ */ boolean hasEventLength(); - /** - * optional int64 eventLength = 10; - * - *
-     **每个event的长度*
-     * 
- */ + + /** + * optional int64 eventLength = 10; + * + *
+         * *每个event的长度*
+         * 
+ */ long getEventLength(); - /** - * optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE]; - * - *
-     **数据变更类型*
-     * 
- */ + /** + * optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE]; + * + *
+         * *数据变更类型*
+         * 
+ */ boolean hasEventType(); - /** - * optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE]; - * - *
-     **数据变更类型*
-     * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE]; + * + *
+         * *数据变更类型*
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.EventType getEventType(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-     **预留扩展*
-     * 
- */ + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+         * *预留扩展*
+         * 
+ */ java.util.List getPropsList(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+         * *预留扩展*
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.Pair getProps(int index); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+         * *预留扩展*
+         * 
+ */ int getPropsCount(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+         * *预留扩展*
+         * 
+ */ java.util.List getPropsOrBuilderList(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+         * *预留扩展*
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder getPropsOrBuilder( int index); - /** - * optional string gtid = 13; - * - *
-     **当前事务的gitd*
-     * 
- */ + /** + * optional string gtid = 13; + * + *
+         * *当前事务的gitd*
+         * 
+ */ boolean hasGtid(); - /** - * optional string gtid = 13; - * - *
-     **当前事务的gitd*
-     * 
- */ + + /** + * optional string gtid = 13; + * + *
+         * *当前事务的gitd*
+         * 
+ */ java.lang.String getGtid(); - /** - * optional string gtid = 13; - * - *
-     **当前事务的gitd*
-     * 
- */ + + /** + * optional string gtid = 13; + * + *
+         * *当前事务的gitd*
+         * 
+ */ com.google.protobuf.ByteString getGtidBytes(); } @@ -1705,46 +1801,50 @@ public final class CanalEntry { private int bitField0_; public static final int VERSION_FIELD_NUMBER = 1; private int version_; - /** - * optional int32 version = 1 [default = 1]; - * - *
-     **协议的版本号*
-     * 
- */ + + /** + * optional int32 version = 1 [default = 1]; + * + *
+         * *协议的版本号*
+         * 
+ */ public boolean hasVersion() { return ((bitField0_ & 0x00000001) == 0x00000001); } - /** - * optional int32 version = 1 [default = 1]; - * - *
-     **协议的版本号*
-     * 
- */ + + /** + * optional int32 version = 1 [default = 1]; + * + *
+         * *协议的版本号*
+         * 
+ */ public int getVersion() { return version_; } public static final int LOGFILENAME_FIELD_NUMBER = 2; private java.lang.Object logfileName_; - /** - * optional string logfileName = 2; - * - *
-     **binlog/redolog 文件名*
-     * 
- */ + + /** + * optional string logfileName = 2; + * + *
+         * *binlog/redolog 文件名*
+         * 
+ */ public boolean hasLogfileName() { return ((bitField0_ & 0x00000002) == 0x00000002); } - /** - * optional string logfileName = 2; - * - *
-     **binlog/redolog 文件名*
-     * 
- */ + + /** + * optional string logfileName = 2; + * + *
+         * *binlog/redolog 文件名*
+         * 
+ */ public java.lang.String getLogfileName() { java.lang.Object ref = logfileName_; if (ref instanceof java.lang.String) { @@ -1759,13 +1859,14 @@ public final class CanalEntry { return s; } } - /** - * optional string logfileName = 2; - * - *
-     **binlog/redolog 文件名*
-     * 
- */ + + /** + * optional string logfileName = 2; + * + *
+         * *binlog/redolog 文件名*
+         * 
+ */ public com.google.protobuf.ByteString getLogfileNameBytes() { java.lang.Object ref = logfileName_; @@ -1782,69 +1883,75 @@ public final class CanalEntry { public static final int LOGFILEOFFSET_FIELD_NUMBER = 3; private long logfileOffset_; - /** - * optional int64 logfileOffset = 3; - * - *
-     **binlog/redolog 文件的偏移位置*
-     * 
- */ + + /** + * optional int64 logfileOffset = 3; + * + *
+         * *binlog/redolog 文件的偏移位置*
+         * 
+ */ public boolean hasLogfileOffset() { return ((bitField0_ & 0x00000004) == 0x00000004); } - /** - * optional int64 logfileOffset = 3; - * - *
-     **binlog/redolog 文件的偏移位置*
-     * 
- */ + + /** + * optional int64 logfileOffset = 3; + * + *
+         * *binlog/redolog 文件的偏移位置*
+         * 
+ */ public long getLogfileOffset() { return logfileOffset_; } public static final int SERVERID_FIELD_NUMBER = 4; private long serverId_; - /** - * optional int64 serverId = 4; - * - *
-     **服务端serverId*
-     * 
- */ + + /** + * optional int64 serverId = 4; + * + *
+         * *服务端serverId*
+         * 
+ */ public boolean hasServerId() { return ((bitField0_ & 0x00000008) == 0x00000008); } - /** - * optional int64 serverId = 4; - * - *
-     **服务端serverId*
-     * 
- */ + + /** + * optional int64 serverId = 4; + * + *
+         * *服务端serverId*
+         * 
+ */ public long getServerId() { return serverId_; } public static final int SERVERENCODE_FIELD_NUMBER = 5; private java.lang.Object serverenCode_; - /** - * optional string serverenCode = 5; - * - *
-     ** 变更数据的编码 *
-     * 
- */ + + /** + * optional string serverenCode = 5; + * + *
+         * * 变更数据的编码 *
+         * 
+ */ public boolean hasServerenCode() { return ((bitField0_ & 0x00000010) == 0x00000010); } - /** - * optional string serverenCode = 5; - * - *
-     ** 变更数据的编码 *
-     * 
- */ + + /** + * optional string serverenCode = 5; + * + *
+         * * 变更数据的编码 *
+         * 
+ */ public java.lang.String getServerenCode() { java.lang.Object ref = serverenCode_; if (ref instanceof java.lang.String) { @@ -1859,13 +1966,14 @@ public final class CanalEntry { return s; } } - /** - * optional string serverenCode = 5; - * - *
-     ** 变更数据的编码 *
-     * 
- */ + + /** + * optional string serverenCode = 5; + * + *
+         * * 变更数据的编码 *
+         * 
+ */ public com.google.protobuf.ByteString getServerenCodeBytes() { java.lang.Object ref = serverenCode_; @@ -1882,69 +1990,75 @@ public final class CanalEntry { public static final int EXECUTETIME_FIELD_NUMBER = 6; private long executeTime_; - /** - * optional int64 executeTime = 6; - * - *
-     **变更数据的执行时间 *
-     * 
- */ + + /** + * optional int64 executeTime = 6; + * + *
+         * *变更数据的执行时间 *
+         * 
+ */ public boolean hasExecuteTime() { return ((bitField0_ & 0x00000020) == 0x00000020); } - /** - * optional int64 executeTime = 6; - * - *
-     **变更数据的执行时间 *
-     * 
- */ + + /** + * optional int64 executeTime = 6; + * + *
+         * *变更数据的执行时间 *
+         * 
+ */ public long getExecuteTime() { return executeTime_; } public static final int SOURCETYPE_FIELD_NUMBER = 7; private com.alibaba.otter.canal.protocol.CanalEntry.Type sourceType_; - /** - * optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL]; - * - *
-     ** 变更数据的来源*
-     * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL]; + * + *
+         * * 变更数据的来源*
+         * 
+ */ public boolean hasSourceType() { return ((bitField0_ & 0x00000040) == 0x00000040); } - /** - * optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL]; - * - *
-     ** 变更数据的来源*
-     * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL]; + * + *
+         * * 变更数据的来源*
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Type getSourceType() { return sourceType_; } public static final int SCHEMANAME_FIELD_NUMBER = 8; private java.lang.Object schemaName_; - /** - * optional string schemaName = 8; - * - *
-     ** 变更数据的schemaname*
-     * 
- */ + + /** + * optional string schemaName = 8; + * + *
+         * * 变更数据的schemaname*
+         * 
+ */ public boolean hasSchemaName() { return ((bitField0_ & 0x00000080) == 0x00000080); } - /** - * optional string schemaName = 8; - * - *
-     ** 变更数据的schemaname*
-     * 
- */ + + /** + * optional string schemaName = 8; + * + *
+         * * 变更数据的schemaname*
+         * 
+ */ public java.lang.String getSchemaName() { java.lang.Object ref = schemaName_; if (ref instanceof java.lang.String) { @@ -1959,13 +2073,14 @@ public final class CanalEntry { return s; } } - /** - * optional string schemaName = 8; - * - *
-     ** 变更数据的schemaname*
-     * 
- */ + + /** + * optional string schemaName = 8; + * + *
+         * * 变更数据的schemaname*
+         * 
+ */ public com.google.protobuf.ByteString getSchemaNameBytes() { java.lang.Object ref = schemaName_; @@ -1982,23 +2097,25 @@ public final class CanalEntry { public static final int TABLENAME_FIELD_NUMBER = 9; private java.lang.Object tableName_; - /** - * optional string tableName = 9; - * - *
-     **变更数据的tablename*
-     * 
- */ + + /** + * optional string tableName = 9; + * + *
+         * *变更数据的tablename*
+         * 
+ */ public boolean hasTableName() { return ((bitField0_ & 0x00000100) == 0x00000100); } - /** - * optional string tableName = 9; - * - *
-     **变更数据的tablename*
-     * 
- */ + + /** + * optional string tableName = 9; + * + *
+         * *变更数据的tablename*
+         * 
+ */ public java.lang.String getTableName() { java.lang.Object ref = tableName_; if (ref instanceof java.lang.String) { @@ -2013,13 +2130,14 @@ public final class CanalEntry { return s; } } - /** - * optional string tableName = 9; - * - *
-     **变更数据的tablename*
-     * 
- */ + + /** + * optional string tableName = 9; + * + *
+         * *变更数据的tablename*
+         * 
+ */ public com.google.protobuf.ByteString getTableNameBytes() { java.lang.Object ref = tableName_; @@ -2036,100 +2154,109 @@ public final class CanalEntry { public static final int EVENTLENGTH_FIELD_NUMBER = 10; private long eventLength_; - /** - * optional int64 eventLength = 10; - * - *
-     **每个event的长度*
-     * 
- */ + + /** + * optional int64 eventLength = 10; + * + *
+         * *每个event的长度*
+         * 
+ */ public boolean hasEventLength() { return ((bitField0_ & 0x00000200) == 0x00000200); } - /** - * optional int64 eventLength = 10; - * - *
-     **每个event的长度*
-     * 
- */ + + /** + * optional int64 eventLength = 10; + * + *
+         * *每个event的长度*
+         * 
+ */ public long getEventLength() { return eventLength_; } public static final int EVENTTYPE_FIELD_NUMBER = 11; private com.alibaba.otter.canal.protocol.CanalEntry.EventType eventType_; - /** - * optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE]; - * - *
-     **数据变更类型*
-     * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE]; + * + *
+         * *数据变更类型*
+         * 
+ */ public boolean hasEventType() { return ((bitField0_ & 0x00000400) == 0x00000400); } - /** - * optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE]; - * - *
-     **数据变更类型*
-     * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE]; + * + *
+         * *数据变更类型*
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.EventType getEventType() { return eventType_; } public static final int PROPS_FIELD_NUMBER = 12; private java.util.List props_; - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+         * *预留扩展*
+         * 
+ */ public java.util.List getPropsList() { return props_; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+         * *预留扩展*
+         * 
+ */ public java.util.List getPropsOrBuilderList() { return props_; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+         * *预留扩展*
+         * 
+ */ public int getPropsCount() { return props_.size(); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+         * *预留扩展*
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair getProps(int index) { return props_.get(index); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+         * *预留扩展*
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder getPropsOrBuilder( int index) { return props_.get(index); @@ -2137,23 +2264,25 @@ public final class CanalEntry { public static final int GTID_FIELD_NUMBER = 13; private java.lang.Object gtid_; - /** - * optional string gtid = 13; - * - *
-     **当前事务的gitd*
-     * 
- */ + + /** + * optional string gtid = 13; + * + *
+         * *当前事务的gitd*
+         * 
+ */ public boolean hasGtid() { return ((bitField0_ & 0x00000800) == 0x00000800); } - /** - * optional string gtid = 13; - * - *
-     **当前事务的gitd*
-     * 
- */ + + /** + * optional string gtid = 13; + * + *
+         * *当前事务的gitd*
+         * 
+ */ public java.lang.String getGtid() { java.lang.Object ref = gtid_; if (ref instanceof java.lang.String) { @@ -2168,13 +2297,14 @@ public final class CanalEntry { return s; } } - /** - * optional string gtid = 13; - * - *
-     **当前事务的gitd*
-     * 
- */ + + /** + * optional string gtid = 13; + * + *
+         * *当前事务的gitd*
+         * 
+ */ public com.google.protobuf.ByteString getGtidBytes() { java.lang.Object ref = gtid_; @@ -2670,46 +2800,50 @@ public final class CanalEntry { private int bitField0_; private int version_ = 1; - /** - * optional int32 version = 1 [default = 1]; - * - *
-       **协议的版本号*
-       * 
- */ + + /** + * optional int32 version = 1 [default = 1]; + * + *
+             * *协议的版本号*
+             * 
+ */ public boolean hasVersion() { return ((bitField0_ & 0x00000001) == 0x00000001); } - /** - * optional int32 version = 1 [default = 1]; - * - *
-       **协议的版本号*
-       * 
- */ + + /** + * optional int32 version = 1 [default = 1]; + * + *
+             * *协议的版本号*
+             * 
+ */ public int getVersion() { return version_; } - /** - * optional int32 version = 1 [default = 1]; - * - *
-       **协议的版本号*
-       * 
- */ + + /** + * optional int32 version = 1 [default = 1]; + * + *
+             * *协议的版本号*
+             * 
+ */ public Builder setVersion(int value) { bitField0_ |= 0x00000001; version_ = value; onChanged(); return this; } - /** - * optional int32 version = 1 [default = 1]; - * - *
-       **协议的版本号*
-       * 
- */ + + /** + * optional int32 version = 1 [default = 1]; + * + *
+             * *协议的版本号*
+             * 
+ */ public Builder clearVersion() { bitField0_ = (bitField0_ & ~0x00000001); version_ = 1; @@ -2718,23 +2852,25 @@ public final class CanalEntry { } private java.lang.Object logfileName_ = ""; - /** - * optional string logfileName = 2; - * - *
-       **binlog/redolog 文件名*
-       * 
- */ + + /** + * optional string logfileName = 2; + * + *
+             * *binlog/redolog 文件名*
+             * 
+ */ public boolean hasLogfileName() { return ((bitField0_ & 0x00000002) == 0x00000002); } - /** - * optional string logfileName = 2; - * - *
-       **binlog/redolog 文件名*
-       * 
- */ + + /** + * optional string logfileName = 2; + * + *
+             * *binlog/redolog 文件名*
+             * 
+ */ public java.lang.String getLogfileName() { java.lang.Object ref = logfileName_; if (!(ref instanceof java.lang.String)) { @@ -2749,13 +2885,14 @@ public final class CanalEntry { return (java.lang.String) ref; } } - /** - * optional string logfileName = 2; - * - *
-       **binlog/redolog 文件名*
-       * 
- */ + + /** + * optional string logfileName = 2; + * + *
+             * *binlog/redolog 文件名*
+             * 
+ */ public com.google.protobuf.ByteString getLogfileNameBytes() { java.lang.Object ref = logfileName_; @@ -2769,13 +2906,14 @@ public final class CanalEntry { return (com.google.protobuf.ByteString) ref; } } - /** - * optional string logfileName = 2; - * - *
-       **binlog/redolog 文件名*
-       * 
- */ + + /** + * optional string logfileName = 2; + * + *
+             * *binlog/redolog 文件名*
+             * 
+ */ public Builder setLogfileName( java.lang.String value) { if (value == null) { @@ -2786,26 +2924,28 @@ public final class CanalEntry { onChanged(); return this; } - /** - * optional string logfileName = 2; - * - *
-       **binlog/redolog 文件名*
-       * 
- */ + + /** + * optional string logfileName = 2; + * + *
+             * *binlog/redolog 文件名*
+             * 
+ */ public Builder clearLogfileName() { bitField0_ = (bitField0_ & ~0x00000002); logfileName_ = getDefaultInstance().getLogfileName(); onChanged(); return this; } - /** - * optional string logfileName = 2; - * - *
-       **binlog/redolog 文件名*
-       * 
- */ + + /** + * optional string logfileName = 2; + * + *
+             * *binlog/redolog 文件名*
+             * 
+ */ public Builder setLogfileNameBytes( com.google.protobuf.ByteString value) { if (value == null) { @@ -2818,46 +2958,50 @@ public final class CanalEntry { } private long logfileOffset_ ; - /** - * optional int64 logfileOffset = 3; - * - *
-       **binlog/redolog 文件的偏移位置*
-       * 
- */ + + /** + * optional int64 logfileOffset = 3; + * + *
+             * *binlog/redolog 文件的偏移位置*
+             * 
+ */ public boolean hasLogfileOffset() { return ((bitField0_ & 0x00000004) == 0x00000004); } - /** - * optional int64 logfileOffset = 3; - * - *
-       **binlog/redolog 文件的偏移位置*
-       * 
- */ + + /** + * optional int64 logfileOffset = 3; + * + *
+             * *binlog/redolog 文件的偏移位置*
+             * 
+ */ public long getLogfileOffset() { return logfileOffset_; } - /** - * optional int64 logfileOffset = 3; - * - *
-       **binlog/redolog 文件的偏移位置*
-       * 
- */ + + /** + * optional int64 logfileOffset = 3; + * + *
+             * *binlog/redolog 文件的偏移位置*
+             * 
+ */ public Builder setLogfileOffset(long value) { bitField0_ |= 0x00000004; logfileOffset_ = value; onChanged(); return this; } - /** - * optional int64 logfileOffset = 3; - * - *
-       **binlog/redolog 文件的偏移位置*
-       * 
- */ + + /** + * optional int64 logfileOffset = 3; + * + *
+             * *binlog/redolog 文件的偏移位置*
+             * 
+ */ public Builder clearLogfileOffset() { bitField0_ = (bitField0_ & ~0x00000004); logfileOffset_ = 0L; @@ -2866,46 +3010,50 @@ public final class CanalEntry { } private long serverId_ ; - /** - * optional int64 serverId = 4; - * - *
-       **服务端serverId*
-       * 
- */ + + /** + * optional int64 serverId = 4; + * + *
+             * *服务端serverId*
+             * 
+ */ public boolean hasServerId() { return ((bitField0_ & 0x00000008) == 0x00000008); } - /** - * optional int64 serverId = 4; - * - *
-       **服务端serverId*
-       * 
- */ + + /** + * optional int64 serverId = 4; + * + *
+             * *服务端serverId*
+             * 
+ */ public long getServerId() { return serverId_; } - /** - * optional int64 serverId = 4; - * - *
-       **服务端serverId*
-       * 
- */ + + /** + * optional int64 serverId = 4; + * + *
+             * *服务端serverId*
+             * 
+ */ public Builder setServerId(long value) { bitField0_ |= 0x00000008; serverId_ = value; onChanged(); return this; } - /** - * optional int64 serverId = 4; - * - *
-       **服务端serverId*
-       * 
- */ + + /** + * optional int64 serverId = 4; + * + *
+             * *服务端serverId*
+             * 
+ */ public Builder clearServerId() { bitField0_ = (bitField0_ & ~0x00000008); serverId_ = 0L; @@ -2914,23 +3062,25 @@ public final class CanalEntry { } private java.lang.Object serverenCode_ = ""; - /** - * optional string serverenCode = 5; - * - *
-       ** 变更数据的编码 *
-       * 
- */ + + /** + * optional string serverenCode = 5; + * + *
+             * * 变更数据的编码 *
+             * 
+ */ public boolean hasServerenCode() { return ((bitField0_ & 0x00000010) == 0x00000010); } - /** - * optional string serverenCode = 5; - * - *
-       ** 变更数据的编码 *
-       * 
- */ + + /** + * optional string serverenCode = 5; + * + *
+             * * 变更数据的编码 *
+             * 
+ */ public java.lang.String getServerenCode() { java.lang.Object ref = serverenCode_; if (!(ref instanceof java.lang.String)) { @@ -2945,13 +3095,14 @@ public final class CanalEntry { return (java.lang.String) ref; } } - /** - * optional string serverenCode = 5; - * - *
-       ** 变更数据的编码 *
-       * 
- */ + + /** + * optional string serverenCode = 5; + * + *
+             * * 变更数据的编码 *
+             * 
+ */ public com.google.protobuf.ByteString getServerenCodeBytes() { java.lang.Object ref = serverenCode_; @@ -2965,13 +3116,14 @@ public final class CanalEntry { return (com.google.protobuf.ByteString) ref; } } - /** - * optional string serverenCode = 5; - * - *
-       ** 变更数据的编码 *
-       * 
- */ + + /** + * optional string serverenCode = 5; + * + *
+             * * 变更数据的编码 *
+             * 
+ */ public Builder setServerenCode( java.lang.String value) { if (value == null) { @@ -2982,26 +3134,28 @@ public final class CanalEntry { onChanged(); return this; } - /** - * optional string serverenCode = 5; - * - *
-       ** 变更数据的编码 *
-       * 
- */ + + /** + * optional string serverenCode = 5; + * + *
+             * * 变更数据的编码 *
+             * 
+ */ public Builder clearServerenCode() { bitField0_ = (bitField0_ & ~0x00000010); serverenCode_ = getDefaultInstance().getServerenCode(); onChanged(); return this; } - /** - * optional string serverenCode = 5; - * - *
-       ** 变更数据的编码 *
-       * 
- */ + + /** + * optional string serverenCode = 5; + * + *
+             * * 变更数据的编码 *
+             * 
+ */ public Builder setServerenCodeBytes( com.google.protobuf.ByteString value) { if (value == null) { @@ -3014,46 +3168,50 @@ public final class CanalEntry { } private long executeTime_ ; - /** - * optional int64 executeTime = 6; - * - *
-       **变更数据的执行时间 *
-       * 
- */ + + /** + * optional int64 executeTime = 6; + * + *
+             * *变更数据的执行时间 *
+             * 
+ */ public boolean hasExecuteTime() { return ((bitField0_ & 0x00000020) == 0x00000020); } - /** - * optional int64 executeTime = 6; - * - *
-       **变更数据的执行时间 *
-       * 
- */ + + /** + * optional int64 executeTime = 6; + * + *
+             * *变更数据的执行时间 *
+             * 
+ */ public long getExecuteTime() { return executeTime_; } - /** - * optional int64 executeTime = 6; - * - *
-       **变更数据的执行时间 *
-       * 
- */ + + /** + * optional int64 executeTime = 6; + * + *
+             * *变更数据的执行时间 *
+             * 
+ */ public Builder setExecuteTime(long value) { bitField0_ |= 0x00000020; executeTime_ = value; onChanged(); return this; } - /** - * optional int64 executeTime = 6; - * - *
-       **变更数据的执行时间 *
-       * 
- */ + + /** + * optional int64 executeTime = 6; + * + *
+             * *变更数据的执行时间 *
+             * 
+ */ public Builder clearExecuteTime() { bitField0_ = (bitField0_ & ~0x00000020); executeTime_ = 0L; @@ -3062,33 +3220,36 @@ public final class CanalEntry { } private com.alibaba.otter.canal.protocol.CanalEntry.Type sourceType_ = com.alibaba.otter.canal.protocol.CanalEntry.Type.MYSQL; - /** - * optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL]; - * - *
-       ** 变更数据的来源*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL]; + * + *
+             * * 变更数据的来源*
+             * 
+ */ public boolean hasSourceType() { return ((bitField0_ & 0x00000040) == 0x00000040); } - /** - * optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL]; - * - *
-       ** 变更数据的来源*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL]; + * + *
+             * * 变更数据的来源*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Type getSourceType() { return sourceType_; } - /** - * optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL]; - * - *
-       ** 变更数据的来源*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL]; + * + *
+             * * 变更数据的来源*
+             * 
+ */ public Builder setSourceType(com.alibaba.otter.canal.protocol.CanalEntry.Type value) { if (value == null) { throw new NullPointerException(); @@ -3098,13 +3259,14 @@ public final class CanalEntry { onChanged(); return this; } - /** - * optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL]; - * - *
-       ** 变更数据的来源*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL]; + * + *
+             * * 变更数据的来源*
+             * 
+ */ public Builder clearSourceType() { bitField0_ = (bitField0_ & ~0x00000040); sourceType_ = com.alibaba.otter.canal.protocol.CanalEntry.Type.MYSQL; @@ -3113,23 +3275,25 @@ public final class CanalEntry { } private java.lang.Object schemaName_ = ""; - /** - * optional string schemaName = 8; - * - *
-       ** 变更数据的schemaname*
-       * 
- */ + + /** + * optional string schemaName = 8; + * + *
+             * * 变更数据的schemaname*
+             * 
+ */ public boolean hasSchemaName() { return ((bitField0_ & 0x00000080) == 0x00000080); } - /** - * optional string schemaName = 8; - * - *
-       ** 变更数据的schemaname*
-       * 
- */ + + /** + * optional string schemaName = 8; + * + *
+             * * 变更数据的schemaname*
+             * 
+ */ public java.lang.String getSchemaName() { java.lang.Object ref = schemaName_; if (!(ref instanceof java.lang.String)) { @@ -3144,13 +3308,14 @@ public final class CanalEntry { return (java.lang.String) ref; } } - /** - * optional string schemaName = 8; - * - *
-       ** 变更数据的schemaname*
-       * 
- */ + + /** + * optional string schemaName = 8; + * + *
+             * * 变更数据的schemaname*
+             * 
+ */ public com.google.protobuf.ByteString getSchemaNameBytes() { java.lang.Object ref = schemaName_; @@ -3164,13 +3329,14 @@ public final class CanalEntry { return (com.google.protobuf.ByteString) ref; } } - /** - * optional string schemaName = 8; - * - *
-       ** 变更数据的schemaname*
-       * 
- */ + + /** + * optional string schemaName = 8; + * + *
+             * * 变更数据的schemaname*
+             * 
+ */ public Builder setSchemaName( java.lang.String value) { if (value == null) { @@ -3181,26 +3347,28 @@ public final class CanalEntry { onChanged(); return this; } - /** - * optional string schemaName = 8; - * - *
-       ** 变更数据的schemaname*
-       * 
- */ + + /** + * optional string schemaName = 8; + * + *
+             * * 变更数据的schemaname*
+             * 
+ */ public Builder clearSchemaName() { bitField0_ = (bitField0_ & ~0x00000080); schemaName_ = getDefaultInstance().getSchemaName(); onChanged(); return this; } - /** - * optional string schemaName = 8; - * - *
-       ** 变更数据的schemaname*
-       * 
- */ + + /** + * optional string schemaName = 8; + * + *
+             * * 变更数据的schemaname*
+             * 
+ */ public Builder setSchemaNameBytes( com.google.protobuf.ByteString value) { if (value == null) { @@ -3213,23 +3381,25 @@ public final class CanalEntry { } private java.lang.Object tableName_ = ""; - /** - * optional string tableName = 9; - * - *
-       **变更数据的tablename*
-       * 
- */ + + /** + * optional string tableName = 9; + * + *
+             * *变更数据的tablename*
+             * 
+ */ public boolean hasTableName() { return ((bitField0_ & 0x00000100) == 0x00000100); } - /** - * optional string tableName = 9; - * - *
-       **变更数据的tablename*
-       * 
- */ + + /** + * optional string tableName = 9; + * + *
+             * *变更数据的tablename*
+             * 
+ */ public java.lang.String getTableName() { java.lang.Object ref = tableName_; if (!(ref instanceof java.lang.String)) { @@ -3244,13 +3414,14 @@ public final class CanalEntry { return (java.lang.String) ref; } } - /** - * optional string tableName = 9; - * - *
-       **变更数据的tablename*
-       * 
- */ + + /** + * optional string tableName = 9; + * + *
+             * *变更数据的tablename*
+             * 
+ */ public com.google.protobuf.ByteString getTableNameBytes() { java.lang.Object ref = tableName_; @@ -3264,13 +3435,14 @@ public final class CanalEntry { return (com.google.protobuf.ByteString) ref; } } - /** - * optional string tableName = 9; - * - *
-       **变更数据的tablename*
-       * 
- */ + + /** + * optional string tableName = 9; + * + *
+             * *变更数据的tablename*
+             * 
+ */ public Builder setTableName( java.lang.String value) { if (value == null) { @@ -3281,26 +3453,28 @@ public final class CanalEntry { onChanged(); return this; } - /** - * optional string tableName = 9; - * - *
-       **变更数据的tablename*
-       * 
- */ + + /** + * optional string tableName = 9; + * + *
+             * *变更数据的tablename*
+             * 
+ */ public Builder clearTableName() { bitField0_ = (bitField0_ & ~0x00000100); tableName_ = getDefaultInstance().getTableName(); onChanged(); return this; } - /** - * optional string tableName = 9; - * - *
-       **变更数据的tablename*
-       * 
- */ + + /** + * optional string tableName = 9; + * + *
+             * *变更数据的tablename*
+             * 
+ */ public Builder setTableNameBytes( com.google.protobuf.ByteString value) { if (value == null) { @@ -3313,46 +3487,50 @@ public final class CanalEntry { } private long eventLength_ ; - /** - * optional int64 eventLength = 10; - * - *
-       **每个event的长度*
-       * 
- */ + + /** + * optional int64 eventLength = 10; + * + *
+             * *每个event的长度*
+             * 
+ */ public boolean hasEventLength() { return ((bitField0_ & 0x00000200) == 0x00000200); } - /** - * optional int64 eventLength = 10; - * - *
-       **每个event的长度*
-       * 
- */ + + /** + * optional int64 eventLength = 10; + * + *
+             * *每个event的长度*
+             * 
+ */ public long getEventLength() { return eventLength_; } - /** - * optional int64 eventLength = 10; - * - *
-       **每个event的长度*
-       * 
- */ + + /** + * optional int64 eventLength = 10; + * + *
+             * *每个event的长度*
+             * 
+ */ public Builder setEventLength(long value) { bitField0_ |= 0x00000200; eventLength_ = value; onChanged(); return this; } - /** - * optional int64 eventLength = 10; - * - *
-       **每个event的长度*
-       * 
- */ + + /** + * optional int64 eventLength = 10; + * + *
+             * *每个event的长度*
+             * 
+ */ public Builder clearEventLength() { bitField0_ = (bitField0_ & ~0x00000200); eventLength_ = 0L; @@ -3361,33 +3539,36 @@ public final class CanalEntry { } private com.alibaba.otter.canal.protocol.CanalEntry.EventType eventType_ = com.alibaba.otter.canal.protocol.CanalEntry.EventType.UPDATE; - /** - * optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE]; - * - *
-       **数据变更类型*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE]; + * + *
+             * *数据变更类型*
+             * 
+ */ public boolean hasEventType() { return ((bitField0_ & 0x00000400) == 0x00000400); } - /** - * optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE]; - * - *
-       **数据变更类型*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE]; + * + *
+             * *数据变更类型*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.EventType getEventType() { return eventType_; } - /** - * optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE]; - * - *
-       **数据变更类型*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE]; + * + *
+             * *数据变更类型*
+             * 
+ */ public Builder setEventType(com.alibaba.otter.canal.protocol.CanalEntry.EventType value) { if (value == null) { throw new NullPointerException(); @@ -3397,13 +3578,14 @@ public final class CanalEntry { onChanged(); return this; } - /** - * optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE]; - * - *
-       **数据变更类型*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE]; + * + *
+             * *数据变更类型*
+             * 
+ */ public Builder clearEventType() { bitField0_ = (bitField0_ & ~0x00000400); eventType_ = com.alibaba.otter.canal.protocol.CanalEntry.EventType.UPDATE; @@ -3423,13 +3605,13 @@ public final class CanalEntry { private com.google.protobuf.RepeatedFieldBuilder< com.alibaba.otter.canal.protocol.CanalEntry.Pair, com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder, com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder> propsBuilder_; - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-       **预留扩展*
-       * 
- */ + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+             * *预留扩展*
+             * 
+ */ public java.util.List getPropsList() { if (propsBuilder_ == null) { return java.util.Collections.unmodifiableList(props_); @@ -3437,13 +3619,14 @@ public final class CanalEntry { return propsBuilder_.getMessageList(); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+             * *预留扩展*
+             * 
+ */ public int getPropsCount() { if (propsBuilder_ == null) { return props_.size(); @@ -3451,13 +3634,14 @@ public final class CanalEntry { return propsBuilder_.getCount(); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair getProps(int index) { if (propsBuilder_ == null) { return props_.get(index); @@ -3465,13 +3649,14 @@ public final class CanalEntry { return propsBuilder_.getMessage(index); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder setProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair value) { if (propsBuilder_ == null) { @@ -3486,13 +3671,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder setProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder builderForValue) { if (propsBuilder_ == null) { @@ -3504,13 +3690,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps(com.alibaba.otter.canal.protocol.CanalEntry.Pair value) { if (propsBuilder_ == null) { if (value == null) { @@ -3524,13 +3711,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair value) { if (propsBuilder_ == null) { @@ -3545,13 +3733,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps( com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder builderForValue) { if (propsBuilder_ == null) { @@ -3563,13 +3752,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder builderForValue) { if (propsBuilder_ == null) { @@ -3581,13 +3771,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addAllProps( java.lang.Iterable values) { if (propsBuilder_ == null) { @@ -3600,13 +3791,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder clearProps() { if (propsBuilder_ == null) { props_ = java.util.Collections.emptyList(); @@ -3617,13 +3809,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder removeProps(int index) { if (propsBuilder_ == null) { ensurePropsIsMutable(); @@ -3634,24 +3827,26 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder getPropsBuilder( int index) { return getPropsFieldBuilder().getBuilder(index); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder getPropsOrBuilder( int index) { if (propsBuilder_ == null) { @@ -3659,13 +3854,14 @@ public final class CanalEntry { return propsBuilder_.getMessageOrBuilder(index); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+             * *预留扩展*
+             * 
+ */ public java.util.List getPropsOrBuilderList() { if (propsBuilder_ != null) { @@ -3674,36 +3870,39 @@ public final class CanalEntry { return java.util.Collections.unmodifiableList(props_); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder addPropsBuilder() { return getPropsFieldBuilder().addBuilder( com.alibaba.otter.canal.protocol.CanalEntry.Pair.getDefaultInstance()); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder addPropsBuilder( int index) { return getPropsFieldBuilder().addBuilder( index, com.alibaba.otter.canal.protocol.CanalEntry.Pair.getDefaultInstance()); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 12; + * + *
+             * *预留扩展*
+             * 
+ */ public java.util.List getPropsBuilderList() { return getPropsFieldBuilder().getBuilderList(); @@ -3724,23 +3923,25 @@ public final class CanalEntry { } private java.lang.Object gtid_ = ""; - /** - * optional string gtid = 13; - * - *
-       **当前事务的gitd*
-       * 
- */ + + /** + * optional string gtid = 13; + * + *
+             * *当前事务的gitd*
+             * 
+ */ public boolean hasGtid() { return ((bitField0_ & 0x00001000) == 0x00001000); } - /** - * optional string gtid = 13; - * - *
-       **当前事务的gitd*
-       * 
- */ + + /** + * optional string gtid = 13; + * + *
+             * *当前事务的gitd*
+             * 
+ */ public java.lang.String getGtid() { java.lang.Object ref = gtid_; if (!(ref instanceof java.lang.String)) { @@ -3755,13 +3956,14 @@ public final class CanalEntry { return (java.lang.String) ref; } } - /** - * optional string gtid = 13; - * - *
-       **当前事务的gitd*
-       * 
- */ + + /** + * optional string gtid = 13; + * + *
+             * *当前事务的gitd*
+             * 
+ */ public com.google.protobuf.ByteString getGtidBytes() { java.lang.Object ref = gtid_; @@ -3775,13 +3977,14 @@ public final class CanalEntry { return (com.google.protobuf.ByteString) ref; } } - /** - * optional string gtid = 13; - * - *
-       **当前事务的gitd*
-       * 
- */ + + /** + * optional string gtid = 13; + * + *
+             * *当前事务的gitd*
+             * 
+ */ public Builder setGtid( java.lang.String value) { if (value == null) { @@ -3792,26 +3995,28 @@ public final class CanalEntry { onChanged(); return this; } - /** - * optional string gtid = 13; - * - *
-       **当前事务的gitd*
-       * 
- */ + + /** + * optional string gtid = 13; + * + *
+             * *当前事务的gitd*
+             * 
+ */ public Builder clearGtid() { bitField0_ = (bitField0_ & ~0x00001000); gtid_ = getDefaultInstance().getGtid(); onChanged(); return this; } - /** - * optional string gtid = 13; - * - *
-       **当前事务的gitd*
-       * 
- */ + + /** + * optional string gtid = 13; + * + *
+             * *当前事务的gitd*
+             * 
+ */ public Builder setGtidBytes( com.google.protobuf.ByteString value) { if (value == null) { @@ -3838,237 +4043,254 @@ public final class CanalEntry { // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.Column) com.google.protobuf.MessageOrBuilder { - /** - * optional int32 index = 1; - * - *
-     **字段下标*
-     * 
- */ + /** + * optional int32 index = 1; + * + *
+         * *字段下标*
+         * 
+ */ boolean hasIndex(); - /** - * optional int32 index = 1; - * - *
-     **字段下标*
-     * 
- */ + + /** + * optional int32 index = 1; + * + *
+         * *字段下标*
+         * 
+ */ int getIndex(); - /** - * optional int32 sqlType = 2; - * - *
-     **字段java中类型*
-     * 
- */ + /** + * optional int32 sqlType = 2; + * + *
+         * *字段java中类型*
+         * 
+ */ boolean hasSqlType(); - /** - * optional int32 sqlType = 2; - * - *
-     **字段java中类型*
-     * 
- */ + + /** + * optional int32 sqlType = 2; + * + *
+         * *字段java中类型*
+         * 
+ */ int getSqlType(); - /** - * optional string name = 3; - * - *
-     **字段名称(忽略大小写),在mysql中是没有的*
-     * 
- */ + /** + * optional string name = 3; + * + *
+         * *字段名称(忽略大小写),在mysql中是没有的*
+         * 
+ */ boolean hasName(); - /** - * optional string name = 3; - * - *
-     **字段名称(忽略大小写),在mysql中是没有的*
-     * 
- */ + + /** + * optional string name = 3; + * + *
+         * *字段名称(忽略大小写),在mysql中是没有的*
+         * 
+ */ java.lang.String getName(); - /** - * optional string name = 3; - * - *
-     **字段名称(忽略大小写),在mysql中是没有的*
-     * 
- */ + + /** + * optional string name = 3; + * + *
+         * *字段名称(忽略大小写),在mysql中是没有的*
+         * 
+ */ com.google.protobuf.ByteString getNameBytes(); - /** - * optional bool isKey = 4; - * - *
-     **是否是主键*
-     * 
- */ + /** + * optional bool isKey = 4; + * + *
+         * *是否是主键*
+         * 
+ */ boolean hasIsKey(); - /** - * optional bool isKey = 4; - * - *
-     **是否是主键*
-     * 
- */ + + /** + * optional bool isKey = 4; + * + *
+         * *是否是主键*
+         * 
+ */ boolean getIsKey(); - /** - * optional bool updated = 5; - * - *
-     **如果EventType=UPDATE,用于标识这个字段值是否有修改*
-     * 
- */ + /** + * optional bool updated = 5; + * + *
+         * *如果EventType=UPDATE,用于标识这个字段值是否有修改*
+         * 
+ */ boolean hasUpdated(); - /** - * optional bool updated = 5; - * - *
-     **如果EventType=UPDATE,用于标识这个字段值是否有修改*
-     * 
- */ + + /** + * optional bool updated = 5; + * + *
+         * *如果EventType=UPDATE,用于标识这个字段值是否有修改*
+         * 
+ */ boolean getUpdated(); - /** - * optional bool isNull = 6 [default = false]; - * - *
-     ** 标识是否为空  *
-     * 
- */ + /** + * optional bool isNull = 6 [default = false]; + * + *
+         * * 标识是否为空  *
+         * 
+ */ boolean hasIsNull(); - /** - * optional bool isNull = 6 [default = false]; - * - *
-     ** 标识是否为空  *
-     * 
- */ + + /** + * optional bool isNull = 6 [default = false]; + * + *
+         * * 标识是否为空  *
+         * 
+ */ boolean getIsNull(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-     **预留扩展*
-     * 
- */ + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+         * *预留扩展*
+         * 
+ */ java.util.List getPropsList(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+         * *预留扩展*
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.Pair getProps(int index); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+         * *预留扩展*
+         * 
+ */ int getPropsCount(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+         * *预留扩展*
+         * 
+ */ java.util.List getPropsOrBuilderList(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+         * *预留扩展*
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder getPropsOrBuilder( int index); - /** - * optional string value = 8; - * - *
-     ** 字段值,timestamp,Datetime是一个时间格式的文本 *
-     * 
- */ + /** + * optional string value = 8; + * + *
+         * * 字段值,timestamp,Datetime是一个时间格式的文本 *
+         * 
+ */ boolean hasValue(); - /** - * optional string value = 8; - * - *
-     ** 字段值,timestamp,Datetime是一个时间格式的文本 *
-     * 
- */ + + /** + * optional string value = 8; + * + *
+         * * 字段值,timestamp,Datetime是一个时间格式的文本 *
+         * 
+ */ java.lang.String getValue(); - /** - * optional string value = 8; - * - *
-     ** 字段值,timestamp,Datetime是一个时间格式的文本 *
-     * 
- */ + + /** + * optional string value = 8; + * + *
+         * * 字段值,timestamp,Datetime是一个时间格式的文本 *
+         * 
+ */ com.google.protobuf.ByteString getValueBytes(); - /** - * optional int32 length = 9; - * - *
-     ** 对应数据对象原始长度 *
-     * 
- */ + /** + * optional int32 length = 9; + * + *
+         * * 对应数据对象原始长度 *
+         * 
+ */ boolean hasLength(); - /** - * optional int32 length = 9; - * - *
-     ** 对应数据对象原始长度 *
-     * 
- */ + + /** + * optional int32 length = 9; + * + *
+         * * 对应数据对象原始长度 *
+         * 
+ */ int getLength(); - /** - * optional string mysqlType = 10; - * - *
-     **字段mysql类型*
-     * 
- */ + /** + * optional string mysqlType = 10; + * + *
+         * *字段mysql类型*
+         * 
+ */ boolean hasMysqlType(); - /** - * optional string mysqlType = 10; - * - *
-     **字段mysql类型*
-     * 
- */ + + /** + * optional string mysqlType = 10; + * + *
+         * *字段mysql类型*
+         * 
+ */ java.lang.String getMysqlType(); - /** - * optional string mysqlType = 10; - * - *
-     **字段mysql类型*
-     * 
- */ + + /** + * optional string mysqlType = 10; + * + *
+         * *字段mysql类型*
+         * 
+ */ com.google.protobuf.ByteString getMysqlTypeBytes(); } - /** - * Protobuf type {@code com.alibaba.otter.canal.protocol.Column} - * - *
-   **每个字段的数据结构*
-   * 
- */ + + /** + * Protobuf type {@code com.alibaba.otter.canal.protocol.Column} + * + *
+     * *每个字段的数据结构*
+     * 
+ */ public static final class Column extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.Column) @@ -4219,69 +4441,75 @@ public final class CanalEntry { private int bitField0_; public static final int INDEX_FIELD_NUMBER = 1; private int index_; - /** - * optional int32 index = 1; - * - *
-     **字段下标*
-     * 
- */ + + /** + * optional int32 index = 1; + * + *
+         * *字段下标*
+         * 
+ */ public boolean hasIndex() { return ((bitField0_ & 0x00000001) == 0x00000001); } - /** - * optional int32 index = 1; - * - *
-     **字段下标*
-     * 
- */ + + /** + * optional int32 index = 1; + * + *
+         * *字段下标*
+         * 
+ */ public int getIndex() { return index_; } public static final int SQLTYPE_FIELD_NUMBER = 2; private int sqlType_; - /** - * optional int32 sqlType = 2; - * - *
-     **字段java中类型*
-     * 
- */ + + /** + * optional int32 sqlType = 2; + * + *
+         * *字段java中类型*
+         * 
+ */ public boolean hasSqlType() { return ((bitField0_ & 0x00000002) == 0x00000002); } - /** - * optional int32 sqlType = 2; - * - *
-     **字段java中类型*
-     * 
- */ + + /** + * optional int32 sqlType = 2; + * + *
+         * *字段java中类型*
+         * 
+ */ public int getSqlType() { return sqlType_; } public static final int NAME_FIELD_NUMBER = 3; private java.lang.Object name_; - /** - * optional string name = 3; - * - *
-     **字段名称(忽略大小写),在mysql中是没有的*
-     * 
- */ + + /** + * optional string name = 3; + * + *
+         * *字段名称(忽略大小写),在mysql中是没有的*
+         * 
+ */ public boolean hasName() { return ((bitField0_ & 0x00000004) == 0x00000004); } - /** - * optional string name = 3; - * - *
-     **字段名称(忽略大小写),在mysql中是没有的*
-     * 
- */ + + /** + * optional string name = 3; + * + *
+         * *字段名称(忽略大小写),在mysql中是没有的*
+         * 
+ */ public java.lang.String getName() { java.lang.Object ref = name_; if (ref instanceof java.lang.String) { @@ -4296,13 +4524,14 @@ public final class CanalEntry { return s; } } - /** - * optional string name = 3; - * - *
-     **字段名称(忽略大小写),在mysql中是没有的*
-     * 
- */ + + /** + * optional string name = 3; + * + *
+         * *字段名称(忽略大小写),在mysql中是没有的*
+         * 
+ */ public com.google.protobuf.ByteString getNameBytes() { java.lang.Object ref = name_; @@ -4319,123 +4548,134 @@ public final class CanalEntry { public static final int ISKEY_FIELD_NUMBER = 4; private boolean isKey_; - /** - * optional bool isKey = 4; - * - *
-     **是否是主键*
-     * 
- */ + + /** + * optional bool isKey = 4; + * + *
+         * *是否是主键*
+         * 
+ */ public boolean hasIsKey() { return ((bitField0_ & 0x00000008) == 0x00000008); } - /** - * optional bool isKey = 4; - * - *
-     **是否是主键*
-     * 
- */ + + /** + * optional bool isKey = 4; + * + *
+         * *是否是主键*
+         * 
+ */ public boolean getIsKey() { return isKey_; } public static final int UPDATED_FIELD_NUMBER = 5; private boolean updated_; - /** - * optional bool updated = 5; - * - *
-     **如果EventType=UPDATE,用于标识这个字段值是否有修改*
-     * 
- */ + + /** + * optional bool updated = 5; + * + *
+         * *如果EventType=UPDATE,用于标识这个字段值是否有修改*
+         * 
+ */ public boolean hasUpdated() { return ((bitField0_ & 0x00000010) == 0x00000010); } - /** - * optional bool updated = 5; - * - *
-     **如果EventType=UPDATE,用于标识这个字段值是否有修改*
-     * 
- */ + + /** + * optional bool updated = 5; + * + *
+         * *如果EventType=UPDATE,用于标识这个字段值是否有修改*
+         * 
+ */ public boolean getUpdated() { return updated_; } public static final int ISNULL_FIELD_NUMBER = 6; private boolean isNull_; - /** - * optional bool isNull = 6 [default = false]; - * - *
-     ** 标识是否为空  *
-     * 
- */ + + /** + * optional bool isNull = 6 [default = false]; + * + *
+         * * 标识是否为空  *
+         * 
+ */ public boolean hasIsNull() { return ((bitField0_ & 0x00000020) == 0x00000020); } - /** - * optional bool isNull = 6 [default = false]; - * - *
-     ** 标识是否为空  *
-     * 
- */ + + /** + * optional bool isNull = 6 [default = false]; + * + *
+         * * 标识是否为空  *
+         * 
+ */ public boolean getIsNull() { return isNull_; } public static final int PROPS_FIELD_NUMBER = 7; private java.util.List props_; - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+         * *预留扩展*
+         * 
+ */ public java.util.List getPropsList() { return props_; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+         * *预留扩展*
+         * 
+ */ public java.util.List getPropsOrBuilderList() { return props_; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+         * *预留扩展*
+         * 
+ */ public int getPropsCount() { return props_.size(); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+         * *预留扩展*
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair getProps(int index) { return props_.get(index); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+         * *预留扩展*
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder getPropsOrBuilder( int index) { return props_.get(index); @@ -4443,23 +4683,25 @@ public final class CanalEntry { public static final int VALUE_FIELD_NUMBER = 8; private java.lang.Object value_; - /** - * optional string value = 8; - * - *
-     ** 字段值,timestamp,Datetime是一个时间格式的文本 *
-     * 
- */ + + /** + * optional string value = 8; + * + *
+         * * 字段值,timestamp,Datetime是一个时间格式的文本 *
+         * 
+ */ public boolean hasValue() { return ((bitField0_ & 0x00000040) == 0x00000040); } - /** - * optional string value = 8; - * - *
-     ** 字段值,timestamp,Datetime是一个时间格式的文本 *
-     * 
- */ + + /** + * optional string value = 8; + * + *
+         * * 字段值,timestamp,Datetime是一个时间格式的文本 *
+         * 
+ */ public java.lang.String getValue() { java.lang.Object ref = value_; if (ref instanceof java.lang.String) { @@ -4474,13 +4716,14 @@ public final class CanalEntry { return s; } } - /** - * optional string value = 8; - * - *
-     ** 字段值,timestamp,Datetime是一个时间格式的文本 *
-     * 
- */ + + /** + * optional string value = 8; + * + *
+         * * 字段值,timestamp,Datetime是一个时间格式的文本 *
+         * 
+ */ public com.google.protobuf.ByteString getValueBytes() { java.lang.Object ref = value_; @@ -4497,46 +4740,50 @@ public final class CanalEntry { public static final int LENGTH_FIELD_NUMBER = 9; private int length_; - /** - * optional int32 length = 9; - * - *
-     ** 对应数据对象原始长度 *
-     * 
- */ + + /** + * optional int32 length = 9; + * + *
+         * * 对应数据对象原始长度 *
+         * 
+ */ public boolean hasLength() { return ((bitField0_ & 0x00000080) == 0x00000080); } - /** - * optional int32 length = 9; - * - *
-     ** 对应数据对象原始长度 *
-     * 
- */ + + /** + * optional int32 length = 9; + * + *
+         * * 对应数据对象原始长度 *
+         * 
+ */ public int getLength() { return length_; } public static final int MYSQLTYPE_FIELD_NUMBER = 10; private java.lang.Object mysqlType_; - /** - * optional string mysqlType = 10; - * - *
-     **字段mysql类型*
-     * 
- */ + + /** + * optional string mysqlType = 10; + * + *
+         * *字段mysql类型*
+         * 
+ */ public boolean hasMysqlType() { return ((bitField0_ & 0x00000100) == 0x00000100); } - /** - * optional string mysqlType = 10; - * - *
-     **字段mysql类型*
-     * 
- */ + + /** + * optional string mysqlType = 10; + * + *
+         * *字段mysql类型*
+         * 
+ */ public java.lang.String getMysqlType() { java.lang.Object ref = mysqlType_; if (ref instanceof java.lang.String) { @@ -4551,13 +4798,14 @@ public final class CanalEntry { return s; } } - /** - * optional string mysqlType = 10; - * - *
-     **字段mysql类型*
-     * 
- */ + + /** + * optional string mysqlType = 10; + * + *
+         * *字段mysql类型*
+         * 
+ */ public com.google.protobuf.ByteString getMysqlTypeBytes() { java.lang.Object ref = mysqlType_; @@ -4754,13 +5002,14 @@ public final class CanalEntry { Builder builder = new Builder(parent); return builder; } - /** - * Protobuf type {@code com.alibaba.otter.canal.protocol.Column} - * - *
-     **每个字段的数据结构*
-     * 
- */ + + /** + * Protobuf type {@code com.alibaba.otter.canal.protocol.Column} + * + *
+         * *每个字段的数据结构*
+         * 
+ */ public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.Column) @@ -4998,46 +5247,50 @@ public final class CanalEntry { private int bitField0_; private int index_ ; - /** - * optional int32 index = 1; - * - *
-       **字段下标*
-       * 
- */ + + /** + * optional int32 index = 1; + * + *
+             * *字段下标*
+             * 
+ */ public boolean hasIndex() { return ((bitField0_ & 0x00000001) == 0x00000001); } - /** - * optional int32 index = 1; - * - *
-       **字段下标*
-       * 
- */ + + /** + * optional int32 index = 1; + * + *
+             * *字段下标*
+             * 
+ */ public int getIndex() { return index_; } - /** - * optional int32 index = 1; - * - *
-       **字段下标*
-       * 
- */ + + /** + * optional int32 index = 1; + * + *
+             * *字段下标*
+             * 
+ */ public Builder setIndex(int value) { bitField0_ |= 0x00000001; index_ = value; onChanged(); return this; } - /** - * optional int32 index = 1; - * - *
-       **字段下标*
-       * 
- */ + + /** + * optional int32 index = 1; + * + *
+             * *字段下标*
+             * 
+ */ public Builder clearIndex() { bitField0_ = (bitField0_ & ~0x00000001); index_ = 0; @@ -5046,46 +5299,50 @@ public final class CanalEntry { } private int sqlType_ ; - /** - * optional int32 sqlType = 2; - * - *
-       **字段java中类型*
-       * 
- */ + + /** + * optional int32 sqlType = 2; + * + *
+             * *字段java中类型*
+             * 
+ */ public boolean hasSqlType() { return ((bitField0_ & 0x00000002) == 0x00000002); } - /** - * optional int32 sqlType = 2; - * - *
-       **字段java中类型*
-       * 
- */ + + /** + * optional int32 sqlType = 2; + * + *
+             * *字段java中类型*
+             * 
+ */ public int getSqlType() { return sqlType_; } - /** - * optional int32 sqlType = 2; - * - *
-       **字段java中类型*
-       * 
- */ + + /** + * optional int32 sqlType = 2; + * + *
+             * *字段java中类型*
+             * 
+ */ public Builder setSqlType(int value) { bitField0_ |= 0x00000002; sqlType_ = value; onChanged(); return this; } - /** - * optional int32 sqlType = 2; - * - *
-       **字段java中类型*
-       * 
- */ + + /** + * optional int32 sqlType = 2; + * + *
+             * *字段java中类型*
+             * 
+ */ public Builder clearSqlType() { bitField0_ = (bitField0_ & ~0x00000002); sqlType_ = 0; @@ -5094,23 +5351,25 @@ public final class CanalEntry { } private java.lang.Object name_ = ""; - /** - * optional string name = 3; - * - *
-       **字段名称(忽略大小写),在mysql中是没有的*
-       * 
- */ + + /** + * optional string name = 3; + * + *
+             * *字段名称(忽略大小写),在mysql中是没有的*
+             * 
+ */ public boolean hasName() { return ((bitField0_ & 0x00000004) == 0x00000004); } - /** - * optional string name = 3; - * - *
-       **字段名称(忽略大小写),在mysql中是没有的*
-       * 
- */ + + /** + * optional string name = 3; + * + *
+             * *字段名称(忽略大小写),在mysql中是没有的*
+             * 
+ */ public java.lang.String getName() { java.lang.Object ref = name_; if (!(ref instanceof java.lang.String)) { @@ -5125,13 +5384,14 @@ public final class CanalEntry { return (java.lang.String) ref; } } - /** - * optional string name = 3; - * - *
-       **字段名称(忽略大小写),在mysql中是没有的*
-       * 
- */ + + /** + * optional string name = 3; + * + *
+             * *字段名称(忽略大小写),在mysql中是没有的*
+             * 
+ */ public com.google.protobuf.ByteString getNameBytes() { java.lang.Object ref = name_; @@ -5145,13 +5405,14 @@ public final class CanalEntry { return (com.google.protobuf.ByteString) ref; } } - /** - * optional string name = 3; - * - *
-       **字段名称(忽略大小写),在mysql中是没有的*
-       * 
- */ + + /** + * optional string name = 3; + * + *
+             * *字段名称(忽略大小写),在mysql中是没有的*
+             * 
+ */ public Builder setName( java.lang.String value) { if (value == null) { @@ -5162,26 +5423,28 @@ public final class CanalEntry { onChanged(); return this; } - /** - * optional string name = 3; - * - *
-       **字段名称(忽略大小写),在mysql中是没有的*
-       * 
- */ + + /** + * optional string name = 3; + * + *
+             * *字段名称(忽略大小写),在mysql中是没有的*
+             * 
+ */ public Builder clearName() { bitField0_ = (bitField0_ & ~0x00000004); name_ = getDefaultInstance().getName(); onChanged(); return this; } - /** - * optional string name = 3; - * - *
-       **字段名称(忽略大小写),在mysql中是没有的*
-       * 
- */ + + /** + * optional string name = 3; + * + *
+             * *字段名称(忽略大小写),在mysql中是没有的*
+             * 
+ */ public Builder setNameBytes( com.google.protobuf.ByteString value) { if (value == null) { @@ -5194,46 +5457,50 @@ public final class CanalEntry { } private boolean isKey_ ; - /** - * optional bool isKey = 4; - * - *
-       **是否是主键*
-       * 
- */ + + /** + * optional bool isKey = 4; + * + *
+             * *是否是主键*
+             * 
+ */ public boolean hasIsKey() { return ((bitField0_ & 0x00000008) == 0x00000008); } - /** - * optional bool isKey = 4; - * - *
-       **是否是主键*
-       * 
- */ + + /** + * optional bool isKey = 4; + * + *
+             * *是否是主键*
+             * 
+ */ public boolean getIsKey() { return isKey_; } - /** - * optional bool isKey = 4; - * - *
-       **是否是主键*
-       * 
- */ + + /** + * optional bool isKey = 4; + * + *
+             * *是否是主键*
+             * 
+ */ public Builder setIsKey(boolean value) { bitField0_ |= 0x00000008; isKey_ = value; onChanged(); return this; } - /** - * optional bool isKey = 4; - * - *
-       **是否是主键*
-       * 
- */ + + /** + * optional bool isKey = 4; + * + *
+             * *是否是主键*
+             * 
+ */ public Builder clearIsKey() { bitField0_ = (bitField0_ & ~0x00000008); isKey_ = false; @@ -5242,46 +5509,50 @@ public final class CanalEntry { } private boolean updated_ ; - /** - * optional bool updated = 5; - * - *
-       **如果EventType=UPDATE,用于标识这个字段值是否有修改*
-       * 
- */ + + /** + * optional bool updated = 5; + * + *
+             * *如果EventType=UPDATE,用于标识这个字段值是否有修改*
+             * 
+ */ public boolean hasUpdated() { return ((bitField0_ & 0x00000010) == 0x00000010); } - /** - * optional bool updated = 5; - * - *
-       **如果EventType=UPDATE,用于标识这个字段值是否有修改*
-       * 
- */ + + /** + * optional bool updated = 5; + * + *
+             * *如果EventType=UPDATE,用于标识这个字段值是否有修改*
+             * 
+ */ public boolean getUpdated() { return updated_; } - /** - * optional bool updated = 5; - * - *
-       **如果EventType=UPDATE,用于标识这个字段值是否有修改*
-       * 
- */ + + /** + * optional bool updated = 5; + * + *
+             * *如果EventType=UPDATE,用于标识这个字段值是否有修改*
+             * 
+ */ public Builder setUpdated(boolean value) { bitField0_ |= 0x00000010; updated_ = value; onChanged(); return this; } - /** - * optional bool updated = 5; - * - *
-       **如果EventType=UPDATE,用于标识这个字段值是否有修改*
-       * 
- */ + + /** + * optional bool updated = 5; + * + *
+             * *如果EventType=UPDATE,用于标识这个字段值是否有修改*
+             * 
+ */ public Builder clearUpdated() { bitField0_ = (bitField0_ & ~0x00000010); updated_ = false; @@ -5290,46 +5561,50 @@ public final class CanalEntry { } private boolean isNull_ ; - /** - * optional bool isNull = 6 [default = false]; - * - *
-       ** 标识是否为空  *
-       * 
- */ + + /** + * optional bool isNull = 6 [default = false]; + * + *
+             * * 标识是否为空  *
+             * 
+ */ public boolean hasIsNull() { return ((bitField0_ & 0x00000020) == 0x00000020); } - /** - * optional bool isNull = 6 [default = false]; - * - *
-       ** 标识是否为空  *
-       * 
- */ + + /** + * optional bool isNull = 6 [default = false]; + * + *
+             * * 标识是否为空  *
+             * 
+ */ public boolean getIsNull() { return isNull_; } - /** - * optional bool isNull = 6 [default = false]; - * - *
-       ** 标识是否为空  *
-       * 
- */ + + /** + * optional bool isNull = 6 [default = false]; + * + *
+             * * 标识是否为空  *
+             * 
+ */ public Builder setIsNull(boolean value) { bitField0_ |= 0x00000020; isNull_ = value; onChanged(); return this; } - /** - * optional bool isNull = 6 [default = false]; - * - *
-       ** 标识是否为空  *
-       * 
- */ + + /** + * optional bool isNull = 6 [default = false]; + * + *
+             * * 标识是否为空  *
+             * 
+ */ public Builder clearIsNull() { bitField0_ = (bitField0_ & ~0x00000020); isNull_ = false; @@ -5349,13 +5624,13 @@ public final class CanalEntry { private com.google.protobuf.RepeatedFieldBuilder< com.alibaba.otter.canal.protocol.CanalEntry.Pair, com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder, com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder> propsBuilder_; - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-       **预留扩展*
-       * 
- */ + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+             * *预留扩展*
+             * 
+ */ public java.util.List getPropsList() { if (propsBuilder_ == null) { return java.util.Collections.unmodifiableList(props_); @@ -5363,13 +5638,14 @@ public final class CanalEntry { return propsBuilder_.getMessageList(); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+             * *预留扩展*
+             * 
+ */ public int getPropsCount() { if (propsBuilder_ == null) { return props_.size(); @@ -5377,13 +5653,14 @@ public final class CanalEntry { return propsBuilder_.getCount(); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair getProps(int index) { if (propsBuilder_ == null) { return props_.get(index); @@ -5391,13 +5668,14 @@ public final class CanalEntry { return propsBuilder_.getMessage(index); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder setProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair value) { if (propsBuilder_ == null) { @@ -5412,13 +5690,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder setProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder builderForValue) { if (propsBuilder_ == null) { @@ -5430,13 +5709,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps(com.alibaba.otter.canal.protocol.CanalEntry.Pair value) { if (propsBuilder_ == null) { if (value == null) { @@ -5450,13 +5730,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair value) { if (propsBuilder_ == null) { @@ -5471,13 +5752,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps( com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder builderForValue) { if (propsBuilder_ == null) { @@ -5489,13 +5771,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder builderForValue) { if (propsBuilder_ == null) { @@ -5507,13 +5790,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addAllProps( java.lang.Iterable values) { if (propsBuilder_ == null) { @@ -5526,13 +5810,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder clearProps() { if (propsBuilder_ == null) { props_ = java.util.Collections.emptyList(); @@ -5543,13 +5828,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder removeProps(int index) { if (propsBuilder_ == null) { ensurePropsIsMutable(); @@ -5560,24 +5846,26 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder getPropsBuilder( int index) { return getPropsFieldBuilder().getBuilder(index); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder getPropsOrBuilder( int index) { if (propsBuilder_ == null) { @@ -5585,13 +5873,14 @@ public final class CanalEntry { return propsBuilder_.getMessageOrBuilder(index); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+             * *预留扩展*
+             * 
+ */ public java.util.List getPropsOrBuilderList() { if (propsBuilder_ != null) { @@ -5600,36 +5889,39 @@ public final class CanalEntry { return java.util.Collections.unmodifiableList(props_); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder addPropsBuilder() { return getPropsFieldBuilder().addBuilder( com.alibaba.otter.canal.protocol.CanalEntry.Pair.getDefaultInstance()); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder addPropsBuilder( int index) { return getPropsFieldBuilder().addBuilder( index, com.alibaba.otter.canal.protocol.CanalEntry.Pair.getDefaultInstance()); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 7; + * + *
+             * *预留扩展*
+             * 
+ */ public java.util.List getPropsBuilderList() { return getPropsFieldBuilder().getBuilderList(); @@ -5650,23 +5942,25 @@ public final class CanalEntry { } private java.lang.Object value_ = ""; - /** - * optional string value = 8; - * - *
-       ** 字段值,timestamp,Datetime是一个时间格式的文本 *
-       * 
- */ + + /** + * optional string value = 8; + * + *
+             * * 字段值,timestamp,Datetime是一个时间格式的文本 *
+             * 
+ */ public boolean hasValue() { return ((bitField0_ & 0x00000080) == 0x00000080); } - /** - * optional string value = 8; - * - *
-       ** 字段值,timestamp,Datetime是一个时间格式的文本 *
-       * 
- */ + + /** + * optional string value = 8; + * + *
+             * * 字段值,timestamp,Datetime是一个时间格式的文本 *
+             * 
+ */ public java.lang.String getValue() { java.lang.Object ref = value_; if (!(ref instanceof java.lang.String)) { @@ -5681,13 +5975,14 @@ public final class CanalEntry { return (java.lang.String) ref; } } - /** - * optional string value = 8; - * - *
-       ** 字段值,timestamp,Datetime是一个时间格式的文本 *
-       * 
- */ + + /** + * optional string value = 8; + * + *
+             * * 字段值,timestamp,Datetime是一个时间格式的文本 *
+             * 
+ */ public com.google.protobuf.ByteString getValueBytes() { java.lang.Object ref = value_; @@ -5701,13 +5996,14 @@ public final class CanalEntry { return (com.google.protobuf.ByteString) ref; } } - /** - * optional string value = 8; - * - *
-       ** 字段值,timestamp,Datetime是一个时间格式的文本 *
-       * 
- */ + + /** + * optional string value = 8; + * + *
+             * * 字段值,timestamp,Datetime是一个时间格式的文本 *
+             * 
+ */ public Builder setValue( java.lang.String value) { if (value == null) { @@ -5718,26 +6014,28 @@ public final class CanalEntry { onChanged(); return this; } - /** - * optional string value = 8; - * - *
-       ** 字段值,timestamp,Datetime是一个时间格式的文本 *
-       * 
- */ + + /** + * optional string value = 8; + * + *
+             * * 字段值,timestamp,Datetime是一个时间格式的文本 *
+             * 
+ */ public Builder clearValue() { bitField0_ = (bitField0_ & ~0x00000080); value_ = getDefaultInstance().getValue(); onChanged(); return this; } - /** - * optional string value = 8; - * - *
-       ** 字段值,timestamp,Datetime是一个时间格式的文本 *
-       * 
- */ + + /** + * optional string value = 8; + * + *
+             * * 字段值,timestamp,Datetime是一个时间格式的文本 *
+             * 
+ */ public Builder setValueBytes( com.google.protobuf.ByteString value) { if (value == null) { @@ -5750,46 +6048,50 @@ public final class CanalEntry { } private int length_ ; - /** - * optional int32 length = 9; - * - *
-       ** 对应数据对象原始长度 *
-       * 
- */ + + /** + * optional int32 length = 9; + * + *
+             * * 对应数据对象原始长度 *
+             * 
+ */ public boolean hasLength() { return ((bitField0_ & 0x00000100) == 0x00000100); } - /** - * optional int32 length = 9; - * - *
-       ** 对应数据对象原始长度 *
-       * 
- */ + + /** + * optional int32 length = 9; + * + *
+             * * 对应数据对象原始长度 *
+             * 
+ */ public int getLength() { return length_; } - /** - * optional int32 length = 9; - * - *
-       ** 对应数据对象原始长度 *
-       * 
- */ + + /** + * optional int32 length = 9; + * + *
+             * * 对应数据对象原始长度 *
+             * 
+ */ public Builder setLength(int value) { bitField0_ |= 0x00000100; length_ = value; onChanged(); return this; } - /** - * optional int32 length = 9; - * - *
-       ** 对应数据对象原始长度 *
-       * 
- */ + + /** + * optional int32 length = 9; + * + *
+             * * 对应数据对象原始长度 *
+             * 
+ */ public Builder clearLength() { bitField0_ = (bitField0_ & ~0x00000100); length_ = 0; @@ -5798,23 +6100,25 @@ public final class CanalEntry { } private java.lang.Object mysqlType_ = ""; - /** - * optional string mysqlType = 10; - * - *
-       **字段mysql类型*
-       * 
- */ + + /** + * optional string mysqlType = 10; + * + *
+             * *字段mysql类型*
+             * 
+ */ public boolean hasMysqlType() { return ((bitField0_ & 0x00000200) == 0x00000200); } - /** - * optional string mysqlType = 10; - * - *
-       **字段mysql类型*
-       * 
- */ + + /** + * optional string mysqlType = 10; + * + *
+             * *字段mysql类型*
+             * 
+ */ public java.lang.String getMysqlType() { java.lang.Object ref = mysqlType_; if (!(ref instanceof java.lang.String)) { @@ -5829,13 +6133,14 @@ public final class CanalEntry { return (java.lang.String) ref; } } - /** - * optional string mysqlType = 10; - * - *
-       **字段mysql类型*
-       * 
- */ + + /** + * optional string mysqlType = 10; + * + *
+             * *字段mysql类型*
+             * 
+ */ public com.google.protobuf.ByteString getMysqlTypeBytes() { java.lang.Object ref = mysqlType_; @@ -5849,13 +6154,14 @@ public final class CanalEntry { return (com.google.protobuf.ByteString) ref; } } - /** - * optional string mysqlType = 10; - * - *
-       **字段mysql类型*
-       * 
- */ + + /** + * optional string mysqlType = 10; + * + *
+             * *字段mysql类型*
+             * 
+ */ public Builder setMysqlType( java.lang.String value) { if (value == null) { @@ -5866,26 +6172,28 @@ public final class CanalEntry { onChanged(); return this; } - /** - * optional string mysqlType = 10; - * - *
-       **字段mysql类型*
-       * 
- */ + + /** + * optional string mysqlType = 10; + * + *
+             * *字段mysql类型*
+             * 
+ */ public Builder clearMysqlType() { bitField0_ = (bitField0_ & ~0x00000200); mysqlType_ = getDefaultInstance().getMysqlType(); onChanged(); return this; } - /** - * optional string mysqlType = 10; - * - *
-       **字段mysql类型*
-       * 
- */ + + /** + * optional string mysqlType = 10; + * + *
+             * *字段mysql类型*
+             * 
+ */ public Builder setMysqlTypeBytes( com.google.protobuf.ByteString value) { if (value == null) { @@ -5912,135 +6220,147 @@ public final class CanalEntry { // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.RowData) com.google.protobuf.MessageOrBuilder { - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-     ** 字段信息,增量数据(修改前,删除前) *
-     * 
- */ + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+         * * 字段信息,增量数据(修改前,删除前) *
+         * 
+ */ java.util.List getBeforeColumnsList(); - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-     ** 字段信息,增量数据(修改前,删除前) *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+         * * 字段信息,增量数据(修改前,删除前) *
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.Column getBeforeColumns(int index); - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-     ** 字段信息,增量数据(修改前,删除前) *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+         * * 字段信息,增量数据(修改前,删除前) *
+         * 
+ */ int getBeforeColumnsCount(); - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-     ** 字段信息,增量数据(修改前,删除前) *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+         * * 字段信息,增量数据(修改前,删除前) *
+         * 
+ */ java.util.List getBeforeColumnsOrBuilderList(); - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-     ** 字段信息,增量数据(修改前,删除前) *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+         * * 字段信息,增量数据(修改前,删除前) *
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.ColumnOrBuilder getBeforeColumnsOrBuilder( int index); - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-     ** 字段信息,增量数据(修改后,新增后)  *
-     * 
- */ + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+         * * 字段信息,增量数据(修改后,新增后)  *
+         * 
+ */ java.util.List getAfterColumnsList(); - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-     ** 字段信息,增量数据(修改后,新增后)  *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+         * * 字段信息,增量数据(修改后,新增后)  *
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.Column getAfterColumns(int index); - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-     ** 字段信息,增量数据(修改后,新增后)  *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+         * * 字段信息,增量数据(修改后,新增后)  *
+         * 
+ */ int getAfterColumnsCount(); - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-     ** 字段信息,增量数据(修改后,新增后)  *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+         * * 字段信息,增量数据(修改后,新增后)  *
+         * 
+ */ java.util.List getAfterColumnsOrBuilderList(); - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-     ** 字段信息,增量数据(修改后,新增后)  *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+         * * 字段信息,增量数据(修改后,新增后)  *
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.ColumnOrBuilder getAfterColumnsOrBuilder( int index); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ java.util.List getPropsList(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.Pair getProps(int index); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ int getPropsCount(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ java.util.List getPropsOrBuilderList(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder getPropsOrBuilder( int index); } @@ -6170,54 +6490,59 @@ public final class CanalEntry { public static final int BEFORECOLUMNS_FIELD_NUMBER = 1; private java.util.List beforeColumns_; - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-     ** 字段信息,增量数据(修改前,删除前) *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+         * * 字段信息,增量数据(修改前,删除前) *
+         * 
+ */ public java.util.List getBeforeColumnsList() { return beforeColumns_; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-     ** 字段信息,增量数据(修改前,删除前) *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+         * * 字段信息,增量数据(修改前,删除前) *
+         * 
+ */ public java.util.List getBeforeColumnsOrBuilderList() { return beforeColumns_; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-     ** 字段信息,增量数据(修改前,删除前) *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+         * * 字段信息,增量数据(修改前,删除前) *
+         * 
+ */ public int getBeforeColumnsCount() { return beforeColumns_.size(); } - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-     ** 字段信息,增量数据(修改前,删除前) *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+         * * 字段信息,增量数据(修改前,删除前) *
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Column getBeforeColumns(int index) { return beforeColumns_.get(index); } - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-     ** 字段信息,增量数据(修改前,删除前) *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+         * * 字段信息,增量数据(修改前,删除前) *
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.ColumnOrBuilder getBeforeColumnsOrBuilder( int index) { return beforeColumns_.get(index); @@ -6225,54 +6550,59 @@ public final class CanalEntry { public static final int AFTERCOLUMNS_FIELD_NUMBER = 2; private java.util.List afterColumns_; - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-     ** 字段信息,增量数据(修改后,新增后)  *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+         * * 字段信息,增量数据(修改后,新增后)  *
+         * 
+ */ public java.util.List getAfterColumnsList() { return afterColumns_; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-     ** 字段信息,增量数据(修改后,新增后)  *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+         * * 字段信息,增量数据(修改后,新增后)  *
+         * 
+ */ public java.util.List getAfterColumnsOrBuilderList() { return afterColumns_; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-     ** 字段信息,增量数据(修改后,新增后)  *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+         * * 字段信息,增量数据(修改后,新增后)  *
+         * 
+ */ public int getAfterColumnsCount() { return afterColumns_.size(); } - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-     ** 字段信息,增量数据(修改后,新增后)  *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+         * * 字段信息,增量数据(修改后,新增后)  *
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Column getAfterColumns(int index) { return afterColumns_.get(index); } - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-     ** 字段信息,增量数据(修改后,新增后)  *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+         * * 字段信息,增量数据(修改后,新增后)  *
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.ColumnOrBuilder getAfterColumnsOrBuilder( int index) { return afterColumns_.get(index); @@ -6280,54 +6610,59 @@ public final class CanalEntry { public static final int PROPS_FIELD_NUMBER = 3; private java.util.List props_; - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ public java.util.List getPropsList() { return props_; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ public java.util.List getPropsOrBuilderList() { return props_; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ public int getPropsCount() { return props_.size(); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair getProps(int index) { return props_.get(index); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder getPropsOrBuilder( int index) { return props_.get(index); @@ -6705,13 +7040,13 @@ public final class CanalEntry { private com.google.protobuf.RepeatedFieldBuilder< com.alibaba.otter.canal.protocol.CanalEntry.Column, com.alibaba.otter.canal.protocol.CanalEntry.Column.Builder, com.alibaba.otter.canal.protocol.CanalEntry.ColumnOrBuilder> beforeColumnsBuilder_; - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-       ** 字段信息,增量数据(修改前,删除前) *
-       * 
- */ + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+             * * 字段信息,增量数据(修改前,删除前) *
+             * 
+ */ public java.util.List getBeforeColumnsList() { if (beforeColumnsBuilder_ == null) { return java.util.Collections.unmodifiableList(beforeColumns_); @@ -6719,13 +7054,14 @@ public final class CanalEntry { return beforeColumnsBuilder_.getMessageList(); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-       ** 字段信息,增量数据(修改前,删除前) *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+             * * 字段信息,增量数据(修改前,删除前) *
+             * 
+ */ public int getBeforeColumnsCount() { if (beforeColumnsBuilder_ == null) { return beforeColumns_.size(); @@ -6733,13 +7069,14 @@ public final class CanalEntry { return beforeColumnsBuilder_.getCount(); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-       ** 字段信息,增量数据(修改前,删除前) *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+             * * 字段信息,增量数据(修改前,删除前) *
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Column getBeforeColumns(int index) { if (beforeColumnsBuilder_ == null) { return beforeColumns_.get(index); @@ -6747,13 +7084,14 @@ public final class CanalEntry { return beforeColumnsBuilder_.getMessage(index); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-       ** 字段信息,增量数据(修改前,删除前) *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+             * * 字段信息,增量数据(修改前,删除前) *
+             * 
+ */ public Builder setBeforeColumns( int index, com.alibaba.otter.canal.protocol.CanalEntry.Column value) { if (beforeColumnsBuilder_ == null) { @@ -6768,13 +7106,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-       ** 字段信息,增量数据(修改前,删除前) *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+             * * 字段信息,增量数据(修改前,删除前) *
+             * 
+ */ public Builder setBeforeColumns( int index, com.alibaba.otter.canal.protocol.CanalEntry.Column.Builder builderForValue) { if (beforeColumnsBuilder_ == null) { @@ -6786,13 +7125,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-       ** 字段信息,增量数据(修改前,删除前) *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+             * * 字段信息,增量数据(修改前,删除前) *
+             * 
+ */ public Builder addBeforeColumns(com.alibaba.otter.canal.protocol.CanalEntry.Column value) { if (beforeColumnsBuilder_ == null) { if (value == null) { @@ -6806,13 +7146,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-       ** 字段信息,增量数据(修改前,删除前) *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+             * * 字段信息,增量数据(修改前,删除前) *
+             * 
+ */ public Builder addBeforeColumns( int index, com.alibaba.otter.canal.protocol.CanalEntry.Column value) { if (beforeColumnsBuilder_ == null) { @@ -6827,13 +7168,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-       ** 字段信息,增量数据(修改前,删除前) *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+             * * 字段信息,增量数据(修改前,删除前) *
+             * 
+ */ public Builder addBeforeColumns( com.alibaba.otter.canal.protocol.CanalEntry.Column.Builder builderForValue) { if (beforeColumnsBuilder_ == null) { @@ -6845,13 +7187,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-       ** 字段信息,增量数据(修改前,删除前) *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+             * * 字段信息,增量数据(修改前,删除前) *
+             * 
+ */ public Builder addBeforeColumns( int index, com.alibaba.otter.canal.protocol.CanalEntry.Column.Builder builderForValue) { if (beforeColumnsBuilder_ == null) { @@ -6863,13 +7206,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-       ** 字段信息,增量数据(修改前,删除前) *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+             * * 字段信息,增量数据(修改前,删除前) *
+             * 
+ */ public Builder addAllBeforeColumns( java.lang.Iterable values) { if (beforeColumnsBuilder_ == null) { @@ -6882,13 +7226,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-       ** 字段信息,增量数据(修改前,删除前) *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+             * * 字段信息,增量数据(修改前,删除前) *
+             * 
+ */ public Builder clearBeforeColumns() { if (beforeColumnsBuilder_ == null) { beforeColumns_ = java.util.Collections.emptyList(); @@ -6899,13 +7244,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-       ** 字段信息,增量数据(修改前,删除前) *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+             * * 字段信息,增量数据(修改前,删除前) *
+             * 
+ */ public Builder removeBeforeColumns(int index) { if (beforeColumnsBuilder_ == null) { ensureBeforeColumnsIsMutable(); @@ -6916,24 +7262,26 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-       ** 字段信息,增量数据(修改前,删除前) *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+             * * 字段信息,增量数据(修改前,删除前) *
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Column.Builder getBeforeColumnsBuilder( int index) { return getBeforeColumnsFieldBuilder().getBuilder(index); } - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-       ** 字段信息,增量数据(修改前,删除前) *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+             * * 字段信息,增量数据(修改前,删除前) *
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.ColumnOrBuilder getBeforeColumnsOrBuilder( int index) { if (beforeColumnsBuilder_ == null) { @@ -6941,13 +7289,14 @@ public final class CanalEntry { return beforeColumnsBuilder_.getMessageOrBuilder(index); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-       ** 字段信息,增量数据(修改前,删除前) *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+             * * 字段信息,增量数据(修改前,删除前) *
+             * 
+ */ public java.util.List getBeforeColumnsOrBuilderList() { if (beforeColumnsBuilder_ != null) { @@ -6956,36 +7305,39 @@ public final class CanalEntry { return java.util.Collections.unmodifiableList(beforeColumns_); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-       ** 字段信息,增量数据(修改前,删除前) *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+             * * 字段信息,增量数据(修改前,删除前) *
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Column.Builder addBeforeColumnsBuilder() { return getBeforeColumnsFieldBuilder().addBuilder( com.alibaba.otter.canal.protocol.CanalEntry.Column.getDefaultInstance()); } - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-       ** 字段信息,增量数据(修改前,删除前) *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+             * * 字段信息,增量数据(修改前,删除前) *
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Column.Builder addBeforeColumnsBuilder( int index) { return getBeforeColumnsFieldBuilder().addBuilder( index, com.alibaba.otter.canal.protocol.CanalEntry.Column.getDefaultInstance()); } - /** - * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; - * - *
-       ** 字段信息,增量数据(修改前,删除前) *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1; + * + *
+             * * 字段信息,增量数据(修改前,删除前) *
+             * 
+ */ public java.util.List getBeforeColumnsBuilderList() { return getBeforeColumnsFieldBuilder().getBuilderList(); @@ -7017,13 +7369,13 @@ public final class CanalEntry { private com.google.protobuf.RepeatedFieldBuilder< com.alibaba.otter.canal.protocol.CanalEntry.Column, com.alibaba.otter.canal.protocol.CanalEntry.Column.Builder, com.alibaba.otter.canal.protocol.CanalEntry.ColumnOrBuilder> afterColumnsBuilder_; - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-       ** 字段信息,增量数据(修改后,新增后)  *
-       * 
- */ + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+             * * 字段信息,增量数据(修改后,新增后)  *
+             * 
+ */ public java.util.List getAfterColumnsList() { if (afterColumnsBuilder_ == null) { return java.util.Collections.unmodifiableList(afterColumns_); @@ -7031,13 +7383,14 @@ public final class CanalEntry { return afterColumnsBuilder_.getMessageList(); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-       ** 字段信息,增量数据(修改后,新增后)  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+             * * 字段信息,增量数据(修改后,新增后)  *
+             * 
+ */ public int getAfterColumnsCount() { if (afterColumnsBuilder_ == null) { return afterColumns_.size(); @@ -7045,13 +7398,14 @@ public final class CanalEntry { return afterColumnsBuilder_.getCount(); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-       ** 字段信息,增量数据(修改后,新增后)  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+             * * 字段信息,增量数据(修改后,新增后)  *
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Column getAfterColumns(int index) { if (afterColumnsBuilder_ == null) { return afterColumns_.get(index); @@ -7059,13 +7413,14 @@ public final class CanalEntry { return afterColumnsBuilder_.getMessage(index); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-       ** 字段信息,增量数据(修改后,新增后)  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+             * * 字段信息,增量数据(修改后,新增后)  *
+             * 
+ */ public Builder setAfterColumns( int index, com.alibaba.otter.canal.protocol.CanalEntry.Column value) { if (afterColumnsBuilder_ == null) { @@ -7080,13 +7435,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-       ** 字段信息,增量数据(修改后,新增后)  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+             * * 字段信息,增量数据(修改后,新增后)  *
+             * 
+ */ public Builder setAfterColumns( int index, com.alibaba.otter.canal.protocol.CanalEntry.Column.Builder builderForValue) { if (afterColumnsBuilder_ == null) { @@ -7098,13 +7454,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-       ** 字段信息,增量数据(修改后,新增后)  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+             * * 字段信息,增量数据(修改后,新增后)  *
+             * 
+ */ public Builder addAfterColumns(com.alibaba.otter.canal.protocol.CanalEntry.Column value) { if (afterColumnsBuilder_ == null) { if (value == null) { @@ -7118,13 +7475,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-       ** 字段信息,增量数据(修改后,新增后)  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+             * * 字段信息,增量数据(修改后,新增后)  *
+             * 
+ */ public Builder addAfterColumns( int index, com.alibaba.otter.canal.protocol.CanalEntry.Column value) { if (afterColumnsBuilder_ == null) { @@ -7139,13 +7497,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-       ** 字段信息,增量数据(修改后,新增后)  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+             * * 字段信息,增量数据(修改后,新增后)  *
+             * 
+ */ public Builder addAfterColumns( com.alibaba.otter.canal.protocol.CanalEntry.Column.Builder builderForValue) { if (afterColumnsBuilder_ == null) { @@ -7157,13 +7516,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-       ** 字段信息,增量数据(修改后,新增后)  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+             * * 字段信息,增量数据(修改后,新增后)  *
+             * 
+ */ public Builder addAfterColumns( int index, com.alibaba.otter.canal.protocol.CanalEntry.Column.Builder builderForValue) { if (afterColumnsBuilder_ == null) { @@ -7175,13 +7535,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-       ** 字段信息,增量数据(修改后,新增后)  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+             * * 字段信息,增量数据(修改后,新增后)  *
+             * 
+ */ public Builder addAllAfterColumns( java.lang.Iterable values) { if (afterColumnsBuilder_ == null) { @@ -7194,13 +7555,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-       ** 字段信息,增量数据(修改后,新增后)  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+             * * 字段信息,增量数据(修改后,新增后)  *
+             * 
+ */ public Builder clearAfterColumns() { if (afterColumnsBuilder_ == null) { afterColumns_ = java.util.Collections.emptyList(); @@ -7211,13 +7573,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-       ** 字段信息,增量数据(修改后,新增后)  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+             * * 字段信息,增量数据(修改后,新增后)  *
+             * 
+ */ public Builder removeAfterColumns(int index) { if (afterColumnsBuilder_ == null) { ensureAfterColumnsIsMutable(); @@ -7228,24 +7591,26 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-       ** 字段信息,增量数据(修改后,新增后)  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+             * * 字段信息,增量数据(修改后,新增后)  *
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Column.Builder getAfterColumnsBuilder( int index) { return getAfterColumnsFieldBuilder().getBuilder(index); } - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-       ** 字段信息,增量数据(修改后,新增后)  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+             * * 字段信息,增量数据(修改后,新增后)  *
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.ColumnOrBuilder getAfterColumnsOrBuilder( int index) { if (afterColumnsBuilder_ == null) { @@ -7253,13 +7618,14 @@ public final class CanalEntry { return afterColumnsBuilder_.getMessageOrBuilder(index); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-       ** 字段信息,增量数据(修改后,新增后)  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+             * * 字段信息,增量数据(修改后,新增后)  *
+             * 
+ */ public java.util.List getAfterColumnsOrBuilderList() { if (afterColumnsBuilder_ != null) { @@ -7268,36 +7634,39 @@ public final class CanalEntry { return java.util.Collections.unmodifiableList(afterColumns_); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-       ** 字段信息,增量数据(修改后,新增后)  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+             * * 字段信息,增量数据(修改后,新增后)  *
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Column.Builder addAfterColumnsBuilder() { return getAfterColumnsFieldBuilder().addBuilder( com.alibaba.otter.canal.protocol.CanalEntry.Column.getDefaultInstance()); } - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-       ** 字段信息,增量数据(修改后,新增后)  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+             * * 字段信息,增量数据(修改后,新增后)  *
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Column.Builder addAfterColumnsBuilder( int index) { return getAfterColumnsFieldBuilder().addBuilder( index, com.alibaba.otter.canal.protocol.CanalEntry.Column.getDefaultInstance()); } - /** - * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; - * - *
-       ** 字段信息,增量数据(修改后,新增后)  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2; + * + *
+             * * 字段信息,增量数据(修改后,新增后)  *
+             * 
+ */ public java.util.List getAfterColumnsBuilderList() { return getAfterColumnsFieldBuilder().getBuilderList(); @@ -7329,13 +7698,13 @@ public final class CanalEntry { private com.google.protobuf.RepeatedFieldBuilder< com.alibaba.otter.canal.protocol.CanalEntry.Pair, com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder, com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder> propsBuilder_; - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public java.util.List getPropsList() { if (propsBuilder_ == null) { return java.util.Collections.unmodifiableList(props_); @@ -7343,13 +7712,14 @@ public final class CanalEntry { return propsBuilder_.getMessageList(); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public int getPropsCount() { if (propsBuilder_ == null) { return props_.size(); @@ -7357,13 +7727,14 @@ public final class CanalEntry { return propsBuilder_.getCount(); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair getProps(int index) { if (propsBuilder_ == null) { return props_.get(index); @@ -7371,13 +7742,14 @@ public final class CanalEntry { return propsBuilder_.getMessage(index); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder setProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair value) { if (propsBuilder_ == null) { @@ -7392,13 +7764,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder setProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder builderForValue) { if (propsBuilder_ == null) { @@ -7410,13 +7783,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps(com.alibaba.otter.canal.protocol.CanalEntry.Pair value) { if (propsBuilder_ == null) { if (value == null) { @@ -7430,13 +7804,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair value) { if (propsBuilder_ == null) { @@ -7451,13 +7826,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps( com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder builderForValue) { if (propsBuilder_ == null) { @@ -7469,13 +7845,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder builderForValue) { if (propsBuilder_ == null) { @@ -7487,13 +7864,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addAllProps( java.lang.Iterable values) { if (propsBuilder_ == null) { @@ -7506,13 +7884,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder clearProps() { if (propsBuilder_ == null) { props_ = java.util.Collections.emptyList(); @@ -7523,13 +7902,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder removeProps(int index) { if (propsBuilder_ == null) { ensurePropsIsMutable(); @@ -7540,24 +7920,26 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder getPropsBuilder( int index) { return getPropsFieldBuilder().getBuilder(index); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder getPropsOrBuilder( int index) { if (propsBuilder_ == null) { @@ -7565,13 +7947,14 @@ public final class CanalEntry { return propsBuilder_.getMessageOrBuilder(index); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public java.util.List getPropsOrBuilderList() { if (propsBuilder_ != null) { @@ -7580,36 +7963,39 @@ public final class CanalEntry { return java.util.Collections.unmodifiableList(props_); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder addPropsBuilder() { return getPropsFieldBuilder().addBuilder( com.alibaba.otter.canal.protocol.CanalEntry.Pair.getDefaultInstance()); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder addPropsBuilder( int index) { return getPropsFieldBuilder().addBuilder( index, com.alibaba.otter.canal.protocol.CanalEntry.Pair.getDefaultInstance()); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public java.util.List getPropsBuilderList() { return getPropsFieldBuilder().getBuilderList(); @@ -7644,204 +8030,220 @@ public final class CanalEntry { // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.RowChange) com.google.protobuf.MessageOrBuilder { - /** - * optional int64 tableId = 1; - * - *
-     **tableId,由数据库产生*
-     * 
- */ + /** + * optional int64 tableId = 1; + * + *
+         * *tableId,由数据库产生*
+         * 
+ */ boolean hasTableId(); - /** - * optional int64 tableId = 1; - * - *
-     **tableId,由数据库产生*
-     * 
- */ + + /** + * optional int64 tableId = 1; + * + *
+         * *tableId,由数据库产生*
+         * 
+ */ long getTableId(); - /** - * optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE]; - * - *
-     **数据变更类型*
-     * 
- */ + /** + * optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE]; + * + *
+         * *数据变更类型*
+         * 
+ */ boolean hasEventType(); - /** - * optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE]; - * - *
-     **数据变更类型*
-     * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE]; + * + *
+         * *数据变更类型*
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.EventType getEventType(); - /** - * optional bool isDdl = 10 [default = false]; - * - *
-     ** 标识是否是ddl语句  *
-     * 
- */ + /** + * optional bool isDdl = 10 [default = false]; + * + *
+         * * 标识是否是ddl语句  *
+         * 
+ */ boolean hasIsDdl(); - /** - * optional bool isDdl = 10 [default = false]; - * - *
-     ** 标识是否是ddl语句  *
-     * 
- */ + + /** + * optional bool isDdl = 10 [default = false]; + * + *
+         * * 标识是否是ddl语句  *
+         * 
+ */ boolean getIsDdl(); - /** - * optional string sql = 11; - * - *
-     ** ddl/query的sql语句  *
-     * 
- */ + /** + * optional string sql = 11; + * + *
+         * * ddl/query的sql语句  *
+         * 
+ */ boolean hasSql(); - /** - * optional string sql = 11; - * - *
-     ** ddl/query的sql语句  *
-     * 
- */ + + /** + * optional string sql = 11; + * + *
+         * * ddl/query的sql语句  *
+         * 
+ */ java.lang.String getSql(); - /** - * optional string sql = 11; - * - *
-     ** ddl/query的sql语句  *
-     * 
- */ + + /** + * optional string sql = 11; + * + *
+         * * ddl/query的sql语句  *
+         * 
+ */ com.google.protobuf.ByteString getSqlBytes(); - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-     ** 一次数据库变更可能存在多行  *
-     * 
- */ + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+         * * 一次数据库变更可能存在多行  *
+         * 
+ */ java.util.List getRowDatasList(); - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-     ** 一次数据库变更可能存在多行  *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+         * * 一次数据库变更可能存在多行  *
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.RowData getRowDatas(int index); - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-     ** 一次数据库变更可能存在多行  *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+         * * 一次数据库变更可能存在多行  *
+         * 
+ */ int getRowDatasCount(); - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-     ** 一次数据库变更可能存在多行  *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+         * * 一次数据库变更可能存在多行  *
+         * 
+ */ java.util.List getRowDatasOrBuilderList(); - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-     ** 一次数据库变更可能存在多行  *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+         * * 一次数据库变更可能存在多行  *
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.RowDataOrBuilder getRowDatasOrBuilder( int index); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-     **预留扩展*
-     * 
- */ + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+         * *预留扩展*
+         * 
+ */ java.util.List getPropsList(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+         * *预留扩展*
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.Pair getProps(int index); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+         * *预留扩展*
+         * 
+ */ int getPropsCount(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+         * *预留扩展*
+         * 
+ */ java.util.List getPropsOrBuilderList(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+         * *预留扩展*
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder getPropsOrBuilder( int index); - /** - * optional string ddlSchemaName = 14; - * - *
-     ** ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
-     * 
- */ + /** + * optional string ddlSchemaName = 14; + * + *
+         * * ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
+         * 
+ */ boolean hasDdlSchemaName(); - /** - * optional string ddlSchemaName = 14; - * - *
-     ** ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
-     * 
- */ + + /** + * optional string ddlSchemaName = 14; + * + *
+         * * ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
+         * 
+ */ java.lang.String getDdlSchemaName(); - /** - * optional string ddlSchemaName = 14; - * - *
-     ** ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
-     * 
- */ + + /** + * optional string ddlSchemaName = 14; + * + *
+         * * ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
+         * 
+ */ com.google.protobuf.ByteString getDdlSchemaNameBytes(); } - /** - * Protobuf type {@code com.alibaba.otter.canal.protocol.RowChange} - * - *
-   **message row 每行变更数据的数据结构*
-   * 
- */ + + /** + * Protobuf type {@code com.alibaba.otter.canal.protocol.RowChange} + * + *
+     * *message row 每行变更数据的数据结构*
+     * 
+ */ public static final class RowChange extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.RowChange) @@ -7988,92 +8390,100 @@ public final class CanalEntry { private int bitField0_; public static final int TABLEID_FIELD_NUMBER = 1; private long tableId_; - /** - * optional int64 tableId = 1; - * - *
-     **tableId,由数据库产生*
-     * 
- */ + + /** + * optional int64 tableId = 1; + * + *
+         * *tableId,由数据库产生*
+         * 
+ */ public boolean hasTableId() { return ((bitField0_ & 0x00000001) == 0x00000001); } - /** - * optional int64 tableId = 1; - * - *
-     **tableId,由数据库产生*
-     * 
- */ + + /** + * optional int64 tableId = 1; + * + *
+         * *tableId,由数据库产生*
+         * 
+ */ public long getTableId() { return tableId_; } public static final int EVENTTYPE_FIELD_NUMBER = 2; private com.alibaba.otter.canal.protocol.CanalEntry.EventType eventType_; - /** - * optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE]; - * - *
-     **数据变更类型*
-     * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE]; + * + *
+         * *数据变更类型*
+         * 
+ */ public boolean hasEventType() { return ((bitField0_ & 0x00000002) == 0x00000002); } - /** - * optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE]; - * - *
-     **数据变更类型*
-     * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE]; + * + *
+         * *数据变更类型*
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.EventType getEventType() { return eventType_; } public static final int ISDDL_FIELD_NUMBER = 10; private boolean isDdl_; - /** - * optional bool isDdl = 10 [default = false]; - * - *
-     ** 标识是否是ddl语句  *
-     * 
- */ + + /** + * optional bool isDdl = 10 [default = false]; + * + *
+         * * 标识是否是ddl语句  *
+         * 
+ */ public boolean hasIsDdl() { return ((bitField0_ & 0x00000004) == 0x00000004); } - /** - * optional bool isDdl = 10 [default = false]; - * - *
-     ** 标识是否是ddl语句  *
-     * 
- */ + + /** + * optional bool isDdl = 10 [default = false]; + * + *
+         * * 标识是否是ddl语句  *
+         * 
+ */ public boolean getIsDdl() { return isDdl_; } public static final int SQL_FIELD_NUMBER = 11; private java.lang.Object sql_; - /** - * optional string sql = 11; - * - *
-     ** ddl/query的sql语句  *
-     * 
- */ + + /** + * optional string sql = 11; + * + *
+         * * ddl/query的sql语句  *
+         * 
+ */ public boolean hasSql() { return ((bitField0_ & 0x00000008) == 0x00000008); } - /** - * optional string sql = 11; - * - *
-     ** ddl/query的sql语句  *
-     * 
- */ + + /** + * optional string sql = 11; + * + *
+         * * ddl/query的sql语句  *
+         * 
+ */ public java.lang.String getSql() { java.lang.Object ref = sql_; if (ref instanceof java.lang.String) { @@ -8088,13 +8498,14 @@ public final class CanalEntry { return s; } } - /** - * optional string sql = 11; - * - *
-     ** ddl/query的sql语句  *
-     * 
- */ + + /** + * optional string sql = 11; + * + *
+         * * ddl/query的sql语句  *
+         * 
+ */ public com.google.protobuf.ByteString getSqlBytes() { java.lang.Object ref = sql_; @@ -8111,54 +8522,59 @@ public final class CanalEntry { public static final int ROWDATAS_FIELD_NUMBER = 12; private java.util.List rowDatas_; - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-     ** 一次数据库变更可能存在多行  *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+         * * 一次数据库变更可能存在多行  *
+         * 
+ */ public java.util.List getRowDatasList() { return rowDatas_; } - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-     ** 一次数据库变更可能存在多行  *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+         * * 一次数据库变更可能存在多行  *
+         * 
+ */ public java.util.List getRowDatasOrBuilderList() { return rowDatas_; } - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-     ** 一次数据库变更可能存在多行  *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+         * * 一次数据库变更可能存在多行  *
+         * 
+ */ public int getRowDatasCount() { return rowDatas_.size(); } - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-     ** 一次数据库变更可能存在多行  *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+         * * 一次数据库变更可能存在多行  *
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.RowData getRowDatas(int index) { return rowDatas_.get(index); } - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-     ** 一次数据库变更可能存在多行  *
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+         * * 一次数据库变更可能存在多行  *
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.RowDataOrBuilder getRowDatasOrBuilder( int index) { return rowDatas_.get(index); @@ -8166,54 +8582,59 @@ public final class CanalEntry { public static final int PROPS_FIELD_NUMBER = 13; private java.util.List props_; - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+         * *预留扩展*
+         * 
+ */ public java.util.List getPropsList() { return props_; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+         * *预留扩展*
+         * 
+ */ public java.util.List getPropsOrBuilderList() { return props_; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+         * *预留扩展*
+         * 
+ */ public int getPropsCount() { return props_.size(); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+         * *预留扩展*
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair getProps(int index) { return props_.get(index); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+         * *预留扩展*
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder getPropsOrBuilder( int index) { return props_.get(index); @@ -8221,23 +8642,25 @@ public final class CanalEntry { public static final int DDLSCHEMANAME_FIELD_NUMBER = 14; private java.lang.Object ddlSchemaName_; - /** - * optional string ddlSchemaName = 14; - * - *
-     ** ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
-     * 
- */ + + /** + * optional string ddlSchemaName = 14; + * + *
+         * * ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
+         * 
+ */ public boolean hasDdlSchemaName() { return ((bitField0_ & 0x00000010) == 0x00000010); } - /** - * optional string ddlSchemaName = 14; - * - *
-     ** ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
-     * 
- */ + + /** + * optional string ddlSchemaName = 14; + * + *
+         * * ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
+         * 
+ */ public java.lang.String getDdlSchemaName() { java.lang.Object ref = ddlSchemaName_; if (ref instanceof java.lang.String) { @@ -8252,13 +8675,14 @@ public final class CanalEntry { return s; } } - /** - * optional string ddlSchemaName = 14; - * - *
-     ** ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
-     * 
- */ + + /** + * optional string ddlSchemaName = 14; + * + *
+         * * ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
+         * 
+ */ public com.google.protobuf.ByteString getDdlSchemaNameBytes() { java.lang.Object ref = ddlSchemaName_; @@ -8431,13 +8855,14 @@ public final class CanalEntry { Builder builder = new Builder(parent); return builder; } - /** - * Protobuf type {@code com.alibaba.otter.canal.protocol.RowChange} - * - *
-     **message row 每行变更数据的数据结构*
-     * 
- */ + + /** + * Protobuf type {@code com.alibaba.otter.canal.protocol.RowChange} + * + *
+         * *message row 每行变更数据的数据结构*
+         * 
+ */ public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.RowChange) @@ -8679,46 +9104,50 @@ public final class CanalEntry { private int bitField0_; private long tableId_ ; - /** - * optional int64 tableId = 1; - * - *
-       **tableId,由数据库产生*
-       * 
- */ + + /** + * optional int64 tableId = 1; + * + *
+             * *tableId,由数据库产生*
+             * 
+ */ public boolean hasTableId() { return ((bitField0_ & 0x00000001) == 0x00000001); } - /** - * optional int64 tableId = 1; - * - *
-       **tableId,由数据库产生*
-       * 
- */ + + /** + * optional int64 tableId = 1; + * + *
+             * *tableId,由数据库产生*
+             * 
+ */ public long getTableId() { return tableId_; } - /** - * optional int64 tableId = 1; - * - *
-       **tableId,由数据库产生*
-       * 
- */ + + /** + * optional int64 tableId = 1; + * + *
+             * *tableId,由数据库产生*
+             * 
+ */ public Builder setTableId(long value) { bitField0_ |= 0x00000001; tableId_ = value; onChanged(); return this; } - /** - * optional int64 tableId = 1; - * - *
-       **tableId,由数据库产生*
-       * 
- */ + + /** + * optional int64 tableId = 1; + * + *
+             * *tableId,由数据库产生*
+             * 
+ */ public Builder clearTableId() { bitField0_ = (bitField0_ & ~0x00000001); tableId_ = 0L; @@ -8727,33 +9156,36 @@ public final class CanalEntry { } private com.alibaba.otter.canal.protocol.CanalEntry.EventType eventType_ = com.alibaba.otter.canal.protocol.CanalEntry.EventType.UPDATE; - /** - * optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE]; - * - *
-       **数据变更类型*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE]; + * + *
+             * *数据变更类型*
+             * 
+ */ public boolean hasEventType() { return ((bitField0_ & 0x00000002) == 0x00000002); } - /** - * optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE]; - * - *
-       **数据变更类型*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE]; + * + *
+             * *数据变更类型*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.EventType getEventType() { return eventType_; } - /** - * optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE]; - * - *
-       **数据变更类型*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE]; + * + *
+             * *数据变更类型*
+             * 
+ */ public Builder setEventType(com.alibaba.otter.canal.protocol.CanalEntry.EventType value) { if (value == null) { throw new NullPointerException(); @@ -8763,13 +9195,14 @@ public final class CanalEntry { onChanged(); return this; } - /** - * optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE]; - * - *
-       **数据变更类型*
-       * 
- */ + + /** + * optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE]; + * + *
+             * *数据变更类型*
+             * 
+ */ public Builder clearEventType() { bitField0_ = (bitField0_ & ~0x00000002); eventType_ = com.alibaba.otter.canal.protocol.CanalEntry.EventType.UPDATE; @@ -8778,46 +9211,50 @@ public final class CanalEntry { } private boolean isDdl_ ; - /** - * optional bool isDdl = 10 [default = false]; - * - *
-       ** 标识是否是ddl语句  *
-       * 
- */ + + /** + * optional bool isDdl = 10 [default = false]; + * + *
+             * * 标识是否是ddl语句  *
+             * 
+ */ public boolean hasIsDdl() { return ((bitField0_ & 0x00000004) == 0x00000004); } - /** - * optional bool isDdl = 10 [default = false]; - * - *
-       ** 标识是否是ddl语句  *
-       * 
- */ + + /** + * optional bool isDdl = 10 [default = false]; + * + *
+             * * 标识是否是ddl语句  *
+             * 
+ */ public boolean getIsDdl() { return isDdl_; } - /** - * optional bool isDdl = 10 [default = false]; - * - *
-       ** 标识是否是ddl语句  *
-       * 
- */ + + /** + * optional bool isDdl = 10 [default = false]; + * + *
+             * * 标识是否是ddl语句  *
+             * 
+ */ public Builder setIsDdl(boolean value) { bitField0_ |= 0x00000004; isDdl_ = value; onChanged(); return this; } - /** - * optional bool isDdl = 10 [default = false]; - * - *
-       ** 标识是否是ddl语句  *
-       * 
- */ + + /** + * optional bool isDdl = 10 [default = false]; + * + *
+             * * 标识是否是ddl语句  *
+             * 
+ */ public Builder clearIsDdl() { bitField0_ = (bitField0_ & ~0x00000004); isDdl_ = false; @@ -8826,23 +9263,25 @@ public final class CanalEntry { } private java.lang.Object sql_ = ""; - /** - * optional string sql = 11; - * - *
-       ** ddl/query的sql语句  *
-       * 
- */ + + /** + * optional string sql = 11; + * + *
+             * * ddl/query的sql语句  *
+             * 
+ */ public boolean hasSql() { return ((bitField0_ & 0x00000008) == 0x00000008); } - /** - * optional string sql = 11; - * - *
-       ** ddl/query的sql语句  *
-       * 
- */ + + /** + * optional string sql = 11; + * + *
+             * * ddl/query的sql语句  *
+             * 
+ */ public java.lang.String getSql() { java.lang.Object ref = sql_; if (!(ref instanceof java.lang.String)) { @@ -8857,13 +9296,14 @@ public final class CanalEntry { return (java.lang.String) ref; } } - /** - * optional string sql = 11; - * - *
-       ** ddl/query的sql语句  *
-       * 
- */ + + /** + * optional string sql = 11; + * + *
+             * * ddl/query的sql语句  *
+             * 
+ */ public com.google.protobuf.ByteString getSqlBytes() { java.lang.Object ref = sql_; @@ -8877,13 +9317,14 @@ public final class CanalEntry { return (com.google.protobuf.ByteString) ref; } } - /** - * optional string sql = 11; - * - *
-       ** ddl/query的sql语句  *
-       * 
- */ + + /** + * optional string sql = 11; + * + *
+             * * ddl/query的sql语句  *
+             * 
+ */ public Builder setSql( java.lang.String value) { if (value == null) { @@ -8894,26 +9335,28 @@ public final class CanalEntry { onChanged(); return this; } - /** - * optional string sql = 11; - * - *
-       ** ddl/query的sql语句  *
-       * 
- */ + + /** + * optional string sql = 11; + * + *
+             * * ddl/query的sql语句  *
+             * 
+ */ public Builder clearSql() { bitField0_ = (bitField0_ & ~0x00000008); sql_ = getDefaultInstance().getSql(); onChanged(); return this; } - /** - * optional string sql = 11; - * - *
-       ** ddl/query的sql语句  *
-       * 
- */ + + /** + * optional string sql = 11; + * + *
+             * * ddl/query的sql语句  *
+             * 
+ */ public Builder setSqlBytes( com.google.protobuf.ByteString value) { if (value == null) { @@ -8937,13 +9380,13 @@ public final class CanalEntry { private com.google.protobuf.RepeatedFieldBuilder< com.alibaba.otter.canal.protocol.CanalEntry.RowData, com.alibaba.otter.canal.protocol.CanalEntry.RowData.Builder, com.alibaba.otter.canal.protocol.CanalEntry.RowDataOrBuilder> rowDatasBuilder_; - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-       ** 一次数据库变更可能存在多行  *
-       * 
- */ + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+             * * 一次数据库变更可能存在多行  *
+             * 
+ */ public java.util.List getRowDatasList() { if (rowDatasBuilder_ == null) { return java.util.Collections.unmodifiableList(rowDatas_); @@ -8951,13 +9394,14 @@ public final class CanalEntry { return rowDatasBuilder_.getMessageList(); } } - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-       ** 一次数据库变更可能存在多行  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+             * * 一次数据库变更可能存在多行  *
+             * 
+ */ public int getRowDatasCount() { if (rowDatasBuilder_ == null) { return rowDatas_.size(); @@ -8965,13 +9409,14 @@ public final class CanalEntry { return rowDatasBuilder_.getCount(); } } - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-       ** 一次数据库变更可能存在多行  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+             * * 一次数据库变更可能存在多行  *
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.RowData getRowDatas(int index) { if (rowDatasBuilder_ == null) { return rowDatas_.get(index); @@ -8979,13 +9424,14 @@ public final class CanalEntry { return rowDatasBuilder_.getMessage(index); } } - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-       ** 一次数据库变更可能存在多行  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+             * * 一次数据库变更可能存在多行  *
+             * 
+ */ public Builder setRowDatas( int index, com.alibaba.otter.canal.protocol.CanalEntry.RowData value) { if (rowDatasBuilder_ == null) { @@ -9000,13 +9446,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-       ** 一次数据库变更可能存在多行  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+             * * 一次数据库变更可能存在多行  *
+             * 
+ */ public Builder setRowDatas( int index, com.alibaba.otter.canal.protocol.CanalEntry.RowData.Builder builderForValue) { if (rowDatasBuilder_ == null) { @@ -9018,13 +9465,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-       ** 一次数据库变更可能存在多行  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+             * * 一次数据库变更可能存在多行  *
+             * 
+ */ public Builder addRowDatas(com.alibaba.otter.canal.protocol.CanalEntry.RowData value) { if (rowDatasBuilder_ == null) { if (value == null) { @@ -9038,13 +9486,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-       ** 一次数据库变更可能存在多行  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+             * * 一次数据库变更可能存在多行  *
+             * 
+ */ public Builder addRowDatas( int index, com.alibaba.otter.canal.protocol.CanalEntry.RowData value) { if (rowDatasBuilder_ == null) { @@ -9059,13 +9508,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-       ** 一次数据库变更可能存在多行  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+             * * 一次数据库变更可能存在多行  *
+             * 
+ */ public Builder addRowDatas( com.alibaba.otter.canal.protocol.CanalEntry.RowData.Builder builderForValue) { if (rowDatasBuilder_ == null) { @@ -9077,13 +9527,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-       ** 一次数据库变更可能存在多行  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+             * * 一次数据库变更可能存在多行  *
+             * 
+ */ public Builder addRowDatas( int index, com.alibaba.otter.canal.protocol.CanalEntry.RowData.Builder builderForValue) { if (rowDatasBuilder_ == null) { @@ -9095,13 +9546,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-       ** 一次数据库变更可能存在多行  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+             * * 一次数据库变更可能存在多行  *
+             * 
+ */ public Builder addAllRowDatas( java.lang.Iterable values) { if (rowDatasBuilder_ == null) { @@ -9114,13 +9566,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-       ** 一次数据库变更可能存在多行  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+             * * 一次数据库变更可能存在多行  *
+             * 
+ */ public Builder clearRowDatas() { if (rowDatasBuilder_ == null) { rowDatas_ = java.util.Collections.emptyList(); @@ -9131,13 +9584,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-       ** 一次数据库变更可能存在多行  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+             * * 一次数据库变更可能存在多行  *
+             * 
+ */ public Builder removeRowDatas(int index) { if (rowDatasBuilder_ == null) { ensureRowDatasIsMutable(); @@ -9148,24 +9602,26 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-       ** 一次数据库变更可能存在多行  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+             * * 一次数据库变更可能存在多行  *
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.RowData.Builder getRowDatasBuilder( int index) { return getRowDatasFieldBuilder().getBuilder(index); } - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-       ** 一次数据库变更可能存在多行  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+             * * 一次数据库变更可能存在多行  *
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.RowDataOrBuilder getRowDatasOrBuilder( int index) { if (rowDatasBuilder_ == null) { @@ -9173,13 +9629,14 @@ public final class CanalEntry { return rowDatasBuilder_.getMessageOrBuilder(index); } } - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-       ** 一次数据库变更可能存在多行  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+             * * 一次数据库变更可能存在多行  *
+             * 
+ */ public java.util.List getRowDatasOrBuilderList() { if (rowDatasBuilder_ != null) { @@ -9188,36 +9645,39 @@ public final class CanalEntry { return java.util.Collections.unmodifiableList(rowDatas_); } } - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-       ** 一次数据库变更可能存在多行  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+             * * 一次数据库变更可能存在多行  *
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.RowData.Builder addRowDatasBuilder() { return getRowDatasFieldBuilder().addBuilder( com.alibaba.otter.canal.protocol.CanalEntry.RowData.getDefaultInstance()); } - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-       ** 一次数据库变更可能存在多行  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+             * * 一次数据库变更可能存在多行  *
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.RowData.Builder addRowDatasBuilder( int index) { return getRowDatasFieldBuilder().addBuilder( index, com.alibaba.otter.canal.protocol.CanalEntry.RowData.getDefaultInstance()); } - /** - * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; - * - *
-       ** 一次数据库变更可能存在多行  *
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12; + * + *
+             * * 一次数据库变更可能存在多行  *
+             * 
+ */ public java.util.List getRowDatasBuilderList() { return getRowDatasFieldBuilder().getBuilderList(); @@ -9249,13 +9709,13 @@ public final class CanalEntry { private com.google.protobuf.RepeatedFieldBuilder< com.alibaba.otter.canal.protocol.CanalEntry.Pair, com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder, com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder> propsBuilder_; - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-       **预留扩展*
-       * 
- */ + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+             * *预留扩展*
+             * 
+ */ public java.util.List getPropsList() { if (propsBuilder_ == null) { return java.util.Collections.unmodifiableList(props_); @@ -9263,13 +9723,14 @@ public final class CanalEntry { return propsBuilder_.getMessageList(); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+             * *预留扩展*
+             * 
+ */ public int getPropsCount() { if (propsBuilder_ == null) { return props_.size(); @@ -9277,13 +9738,14 @@ public final class CanalEntry { return propsBuilder_.getCount(); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair getProps(int index) { if (propsBuilder_ == null) { return props_.get(index); @@ -9291,13 +9753,14 @@ public final class CanalEntry { return propsBuilder_.getMessage(index); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder setProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair value) { if (propsBuilder_ == null) { @@ -9312,13 +9775,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder setProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder builderForValue) { if (propsBuilder_ == null) { @@ -9330,13 +9794,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps(com.alibaba.otter.canal.protocol.CanalEntry.Pair value) { if (propsBuilder_ == null) { if (value == null) { @@ -9350,13 +9815,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair value) { if (propsBuilder_ == null) { @@ -9371,13 +9837,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps( com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder builderForValue) { if (propsBuilder_ == null) { @@ -9389,13 +9856,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder builderForValue) { if (propsBuilder_ == null) { @@ -9407,13 +9875,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addAllProps( java.lang.Iterable values) { if (propsBuilder_ == null) { @@ -9426,13 +9895,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder clearProps() { if (propsBuilder_ == null) { props_ = java.util.Collections.emptyList(); @@ -9443,13 +9913,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder removeProps(int index) { if (propsBuilder_ == null) { ensurePropsIsMutable(); @@ -9460,24 +9931,26 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder getPropsBuilder( int index) { return getPropsFieldBuilder().getBuilder(index); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder getPropsOrBuilder( int index) { if (propsBuilder_ == null) { @@ -9485,13 +9958,14 @@ public final class CanalEntry { return propsBuilder_.getMessageOrBuilder(index); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+             * *预留扩展*
+             * 
+ */ public java.util.List getPropsOrBuilderList() { if (propsBuilder_ != null) { @@ -9500,36 +9974,39 @@ public final class CanalEntry { return java.util.Collections.unmodifiableList(props_); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder addPropsBuilder() { return getPropsFieldBuilder().addBuilder( com.alibaba.otter.canal.protocol.CanalEntry.Pair.getDefaultInstance()); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder addPropsBuilder( int index) { return getPropsFieldBuilder().addBuilder( index, com.alibaba.otter.canal.protocol.CanalEntry.Pair.getDefaultInstance()); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 13; + * + *
+             * *预留扩展*
+             * 
+ */ public java.util.List getPropsBuilderList() { return getPropsFieldBuilder().getBuilderList(); @@ -9550,23 +10027,25 @@ public final class CanalEntry { } private java.lang.Object ddlSchemaName_ = ""; - /** - * optional string ddlSchemaName = 14; - * - *
-       ** ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
-       * 
- */ + + /** + * optional string ddlSchemaName = 14; + * + *
+             * * ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
+             * 
+ */ public boolean hasDdlSchemaName() { return ((bitField0_ & 0x00000040) == 0x00000040); } - /** - * optional string ddlSchemaName = 14; - * - *
-       ** ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
-       * 
- */ + + /** + * optional string ddlSchemaName = 14; + * + *
+             * * ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
+             * 
+ */ public java.lang.String getDdlSchemaName() { java.lang.Object ref = ddlSchemaName_; if (!(ref instanceof java.lang.String)) { @@ -9581,13 +10060,14 @@ public final class CanalEntry { return (java.lang.String) ref; } } - /** - * optional string ddlSchemaName = 14; - * - *
-       ** ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
-       * 
- */ + + /** + * optional string ddlSchemaName = 14; + * + *
+             * * ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
+             * 
+ */ public com.google.protobuf.ByteString getDdlSchemaNameBytes() { java.lang.Object ref = ddlSchemaName_; @@ -9601,13 +10081,14 @@ public final class CanalEntry { return (com.google.protobuf.ByteString) ref; } } - /** - * optional string ddlSchemaName = 14; - * - *
-       ** ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
-       * 
- */ + + /** + * optional string ddlSchemaName = 14; + * + *
+             * * ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
+             * 
+ */ public Builder setDdlSchemaName( java.lang.String value) { if (value == null) { @@ -9618,26 +10099,28 @@ public final class CanalEntry { onChanged(); return this; } - /** - * optional string ddlSchemaName = 14; - * - *
-       ** ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
-       * 
- */ + + /** + * optional string ddlSchemaName = 14; + * + *
+             * * ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
+             * 
+ */ public Builder clearDdlSchemaName() { bitField0_ = (bitField0_ & ~0x00000040); ddlSchemaName_ = getDefaultInstance().getDdlSchemaName(); onChanged(); return this; } - /** - * optional string ddlSchemaName = 14; - * - *
-       ** ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
-       * 
- */ + + /** + * optional string ddlSchemaName = 14; + * + *
+             * * ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName  *
+             * 
+ */ public Builder setDdlSchemaNameBytes( com.google.protobuf.ByteString value) { if (value == null) { @@ -9664,117 +10147,126 @@ public final class CanalEntry { // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.TransactionBegin) com.google.protobuf.MessageOrBuilder { - /** - * optional int64 executeTime = 1; - * - *
-     **已废弃,请使用header里的executeTime*
-     * 
- */ + /** + * optional int64 executeTime = 1; + * + *
+         * *已废弃,请使用header里的executeTime*
+         * 
+ */ boolean hasExecuteTime(); - /** - * optional int64 executeTime = 1; - * - *
-     **已废弃,请使用header里的executeTime*
-     * 
- */ + + /** + * optional int64 executeTime = 1; + * + *
+         * *已废弃,请使用header里的executeTime*
+         * 
+ */ long getExecuteTime(); - /** - * optional string transactionId = 2; - * - *
-     **已废弃,Begin里不提供事务id*
-     * 
- */ + /** + * optional string transactionId = 2; + * + *
+         * *已废弃,Begin里不提供事务id*
+         * 
+ */ boolean hasTransactionId(); - /** - * optional string transactionId = 2; - * - *
-     **已废弃,Begin里不提供事务id*
-     * 
- */ + + /** + * optional string transactionId = 2; + * + *
+         * *已废弃,Begin里不提供事务id*
+         * 
+ */ java.lang.String getTransactionId(); - /** - * optional string transactionId = 2; - * - *
-     **已废弃,Begin里不提供事务id*
-     * 
- */ + + /** + * optional string transactionId = 2; + * + *
+         * *已废弃,Begin里不提供事务id*
+         * 
+ */ com.google.protobuf.ByteString getTransactionIdBytes(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ java.util.List getPropsList(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.Pair getProps(int index); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ int getPropsCount(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ java.util.List getPropsOrBuilderList(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder getPropsOrBuilder( int index); - /** - * optional int64 threadId = 4; - * - *
-     **执行的thread Id*
-     * 
- */ + /** + * optional int64 threadId = 4; + * + *
+         * *执行的thread Id*
+         * 
+ */ boolean hasThreadId(); - /** - * optional int64 threadId = 4; - * - *
-     **执行的thread Id*
-     * 
- */ + + /** + * optional int64 threadId = 4; + * + *
+         * *执行的thread Id*
+         * 
+ */ long getThreadId(); } - /** - * Protobuf type {@code com.alibaba.otter.canal.protocol.TransactionBegin} - * - *
-   **开始事务的一些信息*
-   * 
- */ + + /** + * Protobuf type {@code com.alibaba.otter.canal.protocol.TransactionBegin} + * + *
+     * *开始事务的一些信息*
+     * 
+ */ public static final class TransactionBegin extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.TransactionBegin) @@ -9893,46 +10385,50 @@ public final class CanalEntry { private int bitField0_; public static final int EXECUTETIME_FIELD_NUMBER = 1; private long executeTime_; - /** - * optional int64 executeTime = 1; - * - *
-     **已废弃,请使用header里的executeTime*
-     * 
- */ + + /** + * optional int64 executeTime = 1; + * + *
+         * *已废弃,请使用header里的executeTime*
+         * 
+ */ public boolean hasExecuteTime() { return ((bitField0_ & 0x00000001) == 0x00000001); } - /** - * optional int64 executeTime = 1; - * - *
-     **已废弃,请使用header里的executeTime*
-     * 
- */ + + /** + * optional int64 executeTime = 1; + * + *
+         * *已废弃,请使用header里的executeTime*
+         * 
+ */ public long getExecuteTime() { return executeTime_; } public static final int TRANSACTIONID_FIELD_NUMBER = 2; private java.lang.Object transactionId_; - /** - * optional string transactionId = 2; - * - *
-     **已废弃,Begin里不提供事务id*
-     * 
- */ + + /** + * optional string transactionId = 2; + * + *
+         * *已废弃,Begin里不提供事务id*
+         * 
+ */ public boolean hasTransactionId() { return ((bitField0_ & 0x00000002) == 0x00000002); } - /** - * optional string transactionId = 2; - * - *
-     **已废弃,Begin里不提供事务id*
-     * 
- */ + + /** + * optional string transactionId = 2; + * + *
+         * *已废弃,Begin里不提供事务id*
+         * 
+ */ public java.lang.String getTransactionId() { java.lang.Object ref = transactionId_; if (ref instanceof java.lang.String) { @@ -9947,13 +10443,14 @@ public final class CanalEntry { return s; } } - /** - * optional string transactionId = 2; - * - *
-     **已废弃,Begin里不提供事务id*
-     * 
- */ + + /** + * optional string transactionId = 2; + * + *
+         * *已废弃,Begin里不提供事务id*
+         * 
+ */ public com.google.protobuf.ByteString getTransactionIdBytes() { java.lang.Object ref = transactionId_; @@ -9970,54 +10467,59 @@ public final class CanalEntry { public static final int PROPS_FIELD_NUMBER = 3; private java.util.List props_; - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ public java.util.List getPropsList() { return props_; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ public java.util.List getPropsOrBuilderList() { return props_; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ public int getPropsCount() { return props_.size(); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair getProps(int index) { return props_.get(index); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder getPropsOrBuilder( int index) { return props_.get(index); @@ -10025,23 +10527,25 @@ public final class CanalEntry { public static final int THREADID_FIELD_NUMBER = 4; private long threadId_; - /** - * optional int64 threadId = 4; - * - *
-     **执行的thread Id*
-     * 
- */ + + /** + * optional int64 threadId = 4; + * + *
+         * *执行的thread Id*
+         * 
+ */ public boolean hasThreadId() { return ((bitField0_ & 0x00000004) == 0x00000004); } - /** - * optional int64 threadId = 4; - * - *
-     **执行的thread Id*
-     * 
- */ + + /** + * optional int64 threadId = 4; + * + *
+         * *执行的thread Id*
+         * 
+ */ public long getThreadId() { return threadId_; } @@ -10180,13 +10684,15 @@ public final class CanalEntry { Builder builder = new Builder(parent); return builder; } - /** - * Protobuf type {@code com.alibaba.otter.canal.protocol.TransactionBegin} - * - *
-     **开始事务的一些信息*
-     * 
- */ + + /** + * Protobuf type + * {@code com.alibaba.otter.canal.protocol.TransactionBegin} + * + *
+         * *开始事务的一些信息*
+         * 
+ */ public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.TransactionBegin) @@ -10366,46 +10872,50 @@ public final class CanalEntry { private int bitField0_; private long executeTime_ ; - /** - * optional int64 executeTime = 1; - * - *
-       **已废弃,请使用header里的executeTime*
-       * 
- */ + + /** + * optional int64 executeTime = 1; + * + *
+             * *已废弃,请使用header里的executeTime*
+             * 
+ */ public boolean hasExecuteTime() { return ((bitField0_ & 0x00000001) == 0x00000001); } - /** - * optional int64 executeTime = 1; - * - *
-       **已废弃,请使用header里的executeTime*
-       * 
- */ + + /** + * optional int64 executeTime = 1; + * + *
+             * *已废弃,请使用header里的executeTime*
+             * 
+ */ public long getExecuteTime() { return executeTime_; } - /** - * optional int64 executeTime = 1; - * - *
-       **已废弃,请使用header里的executeTime*
-       * 
- */ + + /** + * optional int64 executeTime = 1; + * + *
+             * *已废弃,请使用header里的executeTime*
+             * 
+ */ public Builder setExecuteTime(long value) { bitField0_ |= 0x00000001; executeTime_ = value; onChanged(); return this; } - /** - * optional int64 executeTime = 1; - * - *
-       **已废弃,请使用header里的executeTime*
-       * 
- */ + + /** + * optional int64 executeTime = 1; + * + *
+             * *已废弃,请使用header里的executeTime*
+             * 
+ */ public Builder clearExecuteTime() { bitField0_ = (bitField0_ & ~0x00000001); executeTime_ = 0L; @@ -10414,23 +10924,25 @@ public final class CanalEntry { } private java.lang.Object transactionId_ = ""; - /** - * optional string transactionId = 2; - * - *
-       **已废弃,Begin里不提供事务id*
-       * 
- */ + + /** + * optional string transactionId = 2; + * + *
+             * *已废弃,Begin里不提供事务id*
+             * 
+ */ public boolean hasTransactionId() { return ((bitField0_ & 0x00000002) == 0x00000002); } - /** - * optional string transactionId = 2; - * - *
-       **已废弃,Begin里不提供事务id*
-       * 
- */ + + /** + * optional string transactionId = 2; + * + *
+             * *已废弃,Begin里不提供事务id*
+             * 
+ */ public java.lang.String getTransactionId() { java.lang.Object ref = transactionId_; if (!(ref instanceof java.lang.String)) { @@ -10445,13 +10957,14 @@ public final class CanalEntry { return (java.lang.String) ref; } } - /** - * optional string transactionId = 2; - * - *
-       **已废弃,Begin里不提供事务id*
-       * 
- */ + + /** + * optional string transactionId = 2; + * + *
+             * *已废弃,Begin里不提供事务id*
+             * 
+ */ public com.google.protobuf.ByteString getTransactionIdBytes() { java.lang.Object ref = transactionId_; @@ -10465,13 +10978,14 @@ public final class CanalEntry { return (com.google.protobuf.ByteString) ref; } } - /** - * optional string transactionId = 2; - * - *
-       **已废弃,Begin里不提供事务id*
-       * 
- */ + + /** + * optional string transactionId = 2; + * + *
+             * *已废弃,Begin里不提供事务id*
+             * 
+ */ public Builder setTransactionId( java.lang.String value) { if (value == null) { @@ -10482,26 +10996,28 @@ public final class CanalEntry { onChanged(); return this; } - /** - * optional string transactionId = 2; - * - *
-       **已废弃,Begin里不提供事务id*
-       * 
- */ + + /** + * optional string transactionId = 2; + * + *
+             * *已废弃,Begin里不提供事务id*
+             * 
+ */ public Builder clearTransactionId() { bitField0_ = (bitField0_ & ~0x00000002); transactionId_ = getDefaultInstance().getTransactionId(); onChanged(); return this; } - /** - * optional string transactionId = 2; - * - *
-       **已废弃,Begin里不提供事务id*
-       * 
- */ + + /** + * optional string transactionId = 2; + * + *
+             * *已废弃,Begin里不提供事务id*
+             * 
+ */ public Builder setTransactionIdBytes( com.google.protobuf.ByteString value) { if (value == null) { @@ -10525,13 +11041,13 @@ public final class CanalEntry { private com.google.protobuf.RepeatedFieldBuilder< com.alibaba.otter.canal.protocol.CanalEntry.Pair, com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder, com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder> propsBuilder_; - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public java.util.List getPropsList() { if (propsBuilder_ == null) { return java.util.Collections.unmodifiableList(props_); @@ -10539,13 +11055,14 @@ public final class CanalEntry { return propsBuilder_.getMessageList(); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public int getPropsCount() { if (propsBuilder_ == null) { return props_.size(); @@ -10553,13 +11070,14 @@ public final class CanalEntry { return propsBuilder_.getCount(); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair getProps(int index) { if (propsBuilder_ == null) { return props_.get(index); @@ -10567,13 +11085,14 @@ public final class CanalEntry { return propsBuilder_.getMessage(index); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder setProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair value) { if (propsBuilder_ == null) { @@ -10588,13 +11107,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder setProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder builderForValue) { if (propsBuilder_ == null) { @@ -10606,13 +11126,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps(com.alibaba.otter.canal.protocol.CanalEntry.Pair value) { if (propsBuilder_ == null) { if (value == null) { @@ -10626,13 +11147,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair value) { if (propsBuilder_ == null) { @@ -10647,13 +11169,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps( com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder builderForValue) { if (propsBuilder_ == null) { @@ -10665,13 +11188,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder builderForValue) { if (propsBuilder_ == null) { @@ -10683,13 +11207,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addAllProps( java.lang.Iterable values) { if (propsBuilder_ == null) { @@ -10702,13 +11227,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder clearProps() { if (propsBuilder_ == null) { props_ = java.util.Collections.emptyList(); @@ -10719,13 +11245,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder removeProps(int index) { if (propsBuilder_ == null) { ensurePropsIsMutable(); @@ -10736,24 +11263,26 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder getPropsBuilder( int index) { return getPropsFieldBuilder().getBuilder(index); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder getPropsOrBuilder( int index) { if (propsBuilder_ == null) { @@ -10761,13 +11290,14 @@ public final class CanalEntry { return propsBuilder_.getMessageOrBuilder(index); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public java.util.List getPropsOrBuilderList() { if (propsBuilder_ != null) { @@ -10776,36 +11306,39 @@ public final class CanalEntry { return java.util.Collections.unmodifiableList(props_); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder addPropsBuilder() { return getPropsFieldBuilder().addBuilder( com.alibaba.otter.canal.protocol.CanalEntry.Pair.getDefaultInstance()); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder addPropsBuilder( int index) { return getPropsFieldBuilder().addBuilder( index, com.alibaba.otter.canal.protocol.CanalEntry.Pair.getDefaultInstance()); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public java.util.List getPropsBuilderList() { return getPropsFieldBuilder().getBuilderList(); @@ -10826,46 +11359,50 @@ public final class CanalEntry { } private long threadId_ ; - /** - * optional int64 threadId = 4; - * - *
-       **执行的thread Id*
-       * 
- */ + + /** + * optional int64 threadId = 4; + * + *
+             * *执行的thread Id*
+             * 
+ */ public boolean hasThreadId() { return ((bitField0_ & 0x00000008) == 0x00000008); } - /** - * optional int64 threadId = 4; - * - *
-       **执行的thread Id*
-       * 
- */ + + /** + * optional int64 threadId = 4; + * + *
+             * *执行的thread Id*
+             * 
+ */ public long getThreadId() { return threadId_; } - /** - * optional int64 threadId = 4; - * - *
-       **执行的thread Id*
-       * 
- */ + + /** + * optional int64 threadId = 4; + * + *
+             * *执行的thread Id*
+             * 
+ */ public Builder setThreadId(long value) { bitField0_ |= 0x00000008; threadId_ = value; onChanged(); return this; } - /** - * optional int64 threadId = 4; - * - *
-       **执行的thread Id*
-       * 
- */ + + /** + * optional int64 threadId = 4; + * + *
+             * *执行的thread Id*
+             * 
+ */ public Builder clearThreadId() { bitField0_ = (bitField0_ & ~0x00000008); threadId_ = 0L; @@ -10888,100 +11425,108 @@ public final class CanalEntry { // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.TransactionEnd) com.google.protobuf.MessageOrBuilder { - /** - * optional int64 executeTime = 1; - * - *
-     **已废弃,请使用header里的executeTime*
-     * 
- */ + /** + * optional int64 executeTime = 1; + * + *
+         * *已废弃,请使用header里的executeTime*
+         * 
+ */ boolean hasExecuteTime(); - /** - * optional int64 executeTime = 1; - * - *
-     **已废弃,请使用header里的executeTime*
-     * 
- */ + + /** + * optional int64 executeTime = 1; + * + *
+         * *已废弃,请使用header里的executeTime*
+         * 
+ */ long getExecuteTime(); - /** - * optional string transactionId = 2; - * - *
-     **事务号*
-     * 
- */ + /** + * optional string transactionId = 2; + * + *
+         * *事务号*
+         * 
+ */ boolean hasTransactionId(); - /** - * optional string transactionId = 2; - * - *
-     **事务号*
-     * 
- */ + + /** + * optional string transactionId = 2; + * + *
+         * *事务号*
+         * 
+ */ java.lang.String getTransactionId(); - /** - * optional string transactionId = 2; - * - *
-     **事务号*
-     * 
- */ + + /** + * optional string transactionId = 2; + * + *
+         * *事务号*
+         * 
+ */ com.google.protobuf.ByteString getTransactionIdBytes(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ java.util.List getPropsList(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.Pair getProps(int index); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ int getPropsCount(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ java.util.List getPropsOrBuilderList(); - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder getPropsOrBuilder( int index); } - /** - * Protobuf type {@code com.alibaba.otter.canal.protocol.TransactionEnd} - * - *
-   **结束事务的一些信息*
-   * 
- */ + + /** + * Protobuf type {@code com.alibaba.otter.canal.protocol.TransactionEnd} + * + *
+     * *结束事务的一些信息*
+     * 
+ */ public static final class TransactionEnd extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.TransactionEnd) @@ -11095,46 +11640,50 @@ public final class CanalEntry { private int bitField0_; public static final int EXECUTETIME_FIELD_NUMBER = 1; private long executeTime_; - /** - * optional int64 executeTime = 1; - * - *
-     **已废弃,请使用header里的executeTime*
-     * 
- */ + + /** + * optional int64 executeTime = 1; + * + *
+         * *已废弃,请使用header里的executeTime*
+         * 
+ */ public boolean hasExecuteTime() { return ((bitField0_ & 0x00000001) == 0x00000001); } - /** - * optional int64 executeTime = 1; - * - *
-     **已废弃,请使用header里的executeTime*
-     * 
- */ + + /** + * optional int64 executeTime = 1; + * + *
+         * *已废弃,请使用header里的executeTime*
+         * 
+ */ public long getExecuteTime() { return executeTime_; } public static final int TRANSACTIONID_FIELD_NUMBER = 2; private java.lang.Object transactionId_; - /** - * optional string transactionId = 2; - * - *
-     **事务号*
-     * 
- */ + + /** + * optional string transactionId = 2; + * + *
+         * *事务号*
+         * 
+ */ public boolean hasTransactionId() { return ((bitField0_ & 0x00000002) == 0x00000002); } - /** - * optional string transactionId = 2; - * - *
-     **事务号*
-     * 
- */ + + /** + * optional string transactionId = 2; + * + *
+         * *事务号*
+         * 
+ */ public java.lang.String getTransactionId() { java.lang.Object ref = transactionId_; if (ref instanceof java.lang.String) { @@ -11149,13 +11698,14 @@ public final class CanalEntry { return s; } } - /** - * optional string transactionId = 2; - * - *
-     **事务号*
-     * 
- */ + + /** + * optional string transactionId = 2; + * + *
+         * *事务号*
+         * 
+ */ public com.google.protobuf.ByteString getTransactionIdBytes() { java.lang.Object ref = transactionId_; @@ -11172,54 +11722,59 @@ public final class CanalEntry { public static final int PROPS_FIELD_NUMBER = 3; private java.util.List props_; - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ public java.util.List getPropsList() { return props_; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ public java.util.List getPropsOrBuilderList() { return props_; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ public int getPropsCount() { return props_.size(); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair getProps(int index) { return props_.get(index); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-     **预留扩展*
-     * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+         * *预留扩展*
+         * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder getPropsOrBuilder( int index) { return props_.get(index); @@ -11351,13 +11906,14 @@ public final class CanalEntry { Builder builder = new Builder(parent); return builder; } - /** - * Protobuf type {@code com.alibaba.otter.canal.protocol.TransactionEnd} - * - *
-     **结束事务的一些信息*
-     * 
- */ + + /** + * Protobuf type {@code com.alibaba.otter.canal.protocol.TransactionEnd} + * + *
+         * *结束事务的一些信息*
+         * 
+ */ public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.TransactionEnd) @@ -11528,46 +12084,50 @@ public final class CanalEntry { private int bitField0_; private long executeTime_ ; - /** - * optional int64 executeTime = 1; - * - *
-       **已废弃,请使用header里的executeTime*
-       * 
- */ + + /** + * optional int64 executeTime = 1; + * + *
+             * *已废弃,请使用header里的executeTime*
+             * 
+ */ public boolean hasExecuteTime() { return ((bitField0_ & 0x00000001) == 0x00000001); } - /** - * optional int64 executeTime = 1; - * - *
-       **已废弃,请使用header里的executeTime*
-       * 
- */ + + /** + * optional int64 executeTime = 1; + * + *
+             * *已废弃,请使用header里的executeTime*
+             * 
+ */ public long getExecuteTime() { return executeTime_; } - /** - * optional int64 executeTime = 1; - * - *
-       **已废弃,请使用header里的executeTime*
-       * 
- */ + + /** + * optional int64 executeTime = 1; + * + *
+             * *已废弃,请使用header里的executeTime*
+             * 
+ */ public Builder setExecuteTime(long value) { bitField0_ |= 0x00000001; executeTime_ = value; onChanged(); return this; } - /** - * optional int64 executeTime = 1; - * - *
-       **已废弃,请使用header里的executeTime*
-       * 
- */ + + /** + * optional int64 executeTime = 1; + * + *
+             * *已废弃,请使用header里的executeTime*
+             * 
+ */ public Builder clearExecuteTime() { bitField0_ = (bitField0_ & ~0x00000001); executeTime_ = 0L; @@ -11576,23 +12136,25 @@ public final class CanalEntry { } private java.lang.Object transactionId_ = ""; - /** - * optional string transactionId = 2; - * - *
-       **事务号*
-       * 
- */ + + /** + * optional string transactionId = 2; + * + *
+             * *事务号*
+             * 
+ */ public boolean hasTransactionId() { return ((bitField0_ & 0x00000002) == 0x00000002); } - /** - * optional string transactionId = 2; - * - *
-       **事务号*
-       * 
- */ + + /** + * optional string transactionId = 2; + * + *
+             * *事务号*
+             * 
+ */ public java.lang.String getTransactionId() { java.lang.Object ref = transactionId_; if (!(ref instanceof java.lang.String)) { @@ -11607,13 +12169,14 @@ public final class CanalEntry { return (java.lang.String) ref; } } - /** - * optional string transactionId = 2; - * - *
-       **事务号*
-       * 
- */ + + /** + * optional string transactionId = 2; + * + *
+             * *事务号*
+             * 
+ */ public com.google.protobuf.ByteString getTransactionIdBytes() { java.lang.Object ref = transactionId_; @@ -11627,13 +12190,14 @@ public final class CanalEntry { return (com.google.protobuf.ByteString) ref; } } - /** - * optional string transactionId = 2; - * - *
-       **事务号*
-       * 
- */ + + /** + * optional string transactionId = 2; + * + *
+             * *事务号*
+             * 
+ */ public Builder setTransactionId( java.lang.String value) { if (value == null) { @@ -11644,26 +12208,28 @@ public final class CanalEntry { onChanged(); return this; } - /** - * optional string transactionId = 2; - * - *
-       **事务号*
-       * 
- */ + + /** + * optional string transactionId = 2; + * + *
+             * *事务号*
+             * 
+ */ public Builder clearTransactionId() { bitField0_ = (bitField0_ & ~0x00000002); transactionId_ = getDefaultInstance().getTransactionId(); onChanged(); return this; } - /** - * optional string transactionId = 2; - * - *
-       **事务号*
-       * 
- */ + + /** + * optional string transactionId = 2; + * + *
+             * *事务号*
+             * 
+ */ public Builder setTransactionIdBytes( com.google.protobuf.ByteString value) { if (value == null) { @@ -11687,13 +12253,13 @@ public final class CanalEntry { private com.google.protobuf.RepeatedFieldBuilder< com.alibaba.otter.canal.protocol.CanalEntry.Pair, com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder, com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder> propsBuilder_; - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public java.util.List getPropsList() { if (propsBuilder_ == null) { return java.util.Collections.unmodifiableList(props_); @@ -11701,13 +12267,14 @@ public final class CanalEntry { return propsBuilder_.getMessageList(); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public int getPropsCount() { if (propsBuilder_ == null) { return props_.size(); @@ -11715,13 +12282,14 @@ public final class CanalEntry { return propsBuilder_.getCount(); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair getProps(int index) { if (propsBuilder_ == null) { return props_.get(index); @@ -11729,13 +12297,14 @@ public final class CanalEntry { return propsBuilder_.getMessage(index); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder setProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair value) { if (propsBuilder_ == null) { @@ -11750,13 +12319,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder setProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder builderForValue) { if (propsBuilder_ == null) { @@ -11768,13 +12338,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps(com.alibaba.otter.canal.protocol.CanalEntry.Pair value) { if (propsBuilder_ == null) { if (value == null) { @@ -11788,13 +12359,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair value) { if (propsBuilder_ == null) { @@ -11809,13 +12381,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps( com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder builderForValue) { if (propsBuilder_ == null) { @@ -11827,13 +12400,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addProps( int index, com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder builderForValue) { if (propsBuilder_ == null) { @@ -11845,13 +12419,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder addAllProps( java.lang.Iterable values) { if (propsBuilder_ == null) { @@ -11864,13 +12439,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder clearProps() { if (propsBuilder_ == null) { props_ = java.util.Collections.emptyList(); @@ -11881,13 +12457,14 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public Builder removeProps(int index) { if (propsBuilder_ == null) { ensurePropsIsMutable(); @@ -11898,24 +12475,26 @@ public final class CanalEntry { } return this; } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder getPropsBuilder( int index) { return getPropsFieldBuilder().getBuilder(index); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.PairOrBuilder getPropsOrBuilder( int index) { if (propsBuilder_ == null) { @@ -11923,13 +12502,14 @@ public final class CanalEntry { return propsBuilder_.getMessageOrBuilder(index); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public java.util.List getPropsOrBuilderList() { if (propsBuilder_ != null) { @@ -11938,36 +12518,39 @@ public final class CanalEntry { return java.util.Collections.unmodifiableList(props_); } } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder addPropsBuilder() { return getPropsFieldBuilder().addBuilder( com.alibaba.otter.canal.protocol.CanalEntry.Pair.getDefaultInstance()); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public com.alibaba.otter.canal.protocol.CanalEntry.Pair.Builder addPropsBuilder( int index) { return getPropsFieldBuilder().addBuilder( index, com.alibaba.otter.canal.protocol.CanalEntry.Pair.getDefaultInstance()); } - /** - * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; - * - *
-       **预留扩展*
-       * 
- */ + + /** + * repeated .com.alibaba.otter.canal.protocol.Pair props = 3; + * + *
+             * *预留扩展*
+             * 
+ */ public java.util.List getPropsBuilderList() { return getPropsFieldBuilder().getBuilderList(); @@ -12030,13 +12613,14 @@ public final class CanalEntry { com.google.protobuf.ByteString getValueBytes(); } - /** - * Protobuf type {@code com.alibaba.otter.canal.protocol.Pair} - * - *
-   **预留扩展*
-   * 
- */ + + /** + * Protobuf type {@code com.alibaba.otter.canal.protocol.Pair} + * + *
+     * *预留扩展*
+     * 
+ */ public static final class Pair extends com.google.protobuf.GeneratedMessage implements // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.Pair) @@ -12340,13 +12924,14 @@ public final class CanalEntry { Builder builder = new Builder(parent); return builder; } - /** - * Protobuf type {@code com.alibaba.otter.canal.protocol.Pair} - * - *
-     **预留扩展*
-     * 
- */ + + /** + * Protobuf type {@code com.alibaba.otter.canal.protocol.Pair} + * + *
+         * *预留扩展*
+         * 
+ */ public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.Pair) @@ -12730,13 +13315,14 @@ public final class CanalEntry { ".Pair\"\"\n\004Pair\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(", "\t*^\n\tEntryType\022\024\n\020TRANSACTIONBEGIN\020\001\022\013\n\007" + "ROWDATA\020\002\022\022\n\016TRANSACTIONEND\020\003\022\r\n\tHEARTBE" + - "AT\020\004\022\013\n\007GTIDLOG\020\005*\230\001\n\tEventType\022\n\n\006INSER" + + "AT\020\004\022\013\n\007GTIDLOG\020\005*\316\001\n\tEventType\022\n\n\006INSER" + "T\020\001\022\n\n\006UPDATE\020\002\022\n\n\006DELETE\020\003\022\n\n\006CREATE\020\004\022" + "\t\n\005ALTER\020\005\022\t\n\005ERASE\020\006\022\t\n\005QUERY\020\007\022\014\n\010TRUN" + "CATE\020\010\022\n\n\006RENAME\020\t\022\n\n\006CINDEX\020\n\022\n\n\006DINDEX" + - "\020\013\022\010\n\004GTID\020\014*(\n\004Type\022\n\n\006ORACLE\020\001\022\t\n\005MYSQ" + - "L\020\002\022\t\n\005PGSQL\020\003B0\n com.alibaba.otter.cana" + - "l.protocolB\nCanalEntryH\001" + "\020\013\022\010\n\004GTID\020\014\022\013\n\007XASTART\020\r\022\t\n\005XAEND\020\016\022\014\n\010" + + "XACOMMIT\020\017\022\016\n\nXAROLLBACK\020\020*(\n\004Type\022\n\n\006OR" + + "ACLE\020\001\022\t\n\005MYSQL\020\002\022\t\n\005PGSQL\020\003B0\n com.alib" + + "aba.otter.canal.protocolB\nCanalEntryH\001" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -12801,4 +13387,4 @@ public final class CanalEntry { } // @@protoc_insertion_point(outer_class_scope) -} +} \ No newline at end of file diff --git a/protocol/src/main/java/com/alibaba/otter/canal/protocol/EntryProtocol.proto b/protocol/src/main/java/com/alibaba/otter/canal/protocol/EntryProtocol.proto index 15ee319a..b6d2ae76 100644 --- a/protocol/src/main/java/com/alibaba/otter/canal/protocol/EntryProtocol.proto +++ b/protocol/src/main/java/com/alibaba/otter/canal/protocol/EntryProtocol.proto @@ -191,6 +191,9 @@ enum EventType { CINDEX = 10; DINDEX = 11; GTID = 12; + /** XA **/ + XACOMMIT = 13; + XAROLLBACK = 14; } /**数据库类型**/