// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: EntryProtocol.proto

package com.alibaba.otter.canal.protocol;

public final class CanalEntry {
  private CanalEntry() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
  }
  /**
   * Protobuf enum {@code com.alibaba.otter.canal.protocol.EntryType}
   *
   * <pre>
   **打散后的事件类型，主要用于标识事务的开始，变更数据，结束*
   * </pre>
   */
  public enum EntryType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>TRANSACTIONBEGIN = 1;</code>
     */
    TRANSACTIONBEGIN(0, 1),
    /**
     * <code>ROWDATA = 2;</code>
     */
    ROWDATA(1, 2),
    /**
     * <code>TRANSACTIONEND = 3;</code>
     */
    TRANSACTIONEND(2, 3),
    /**
     * <code>HEARTBEAT = 4;</code>
     *
     * <pre>
     ** 心跳类型，内部使用，外部暂不可见，可忽略 *
     * </pre>
     */
    HEARTBEAT(3, 4),
    /**
     * <code>GTIDLOG = 5;</code>
     */
    GTIDLOG(4, 5),
    ;

    /**
     * <code>TRANSACTIONBEGIN = 1;</code>
     */
    public static final int TRANSACTIONBEGIN_VALUE = 1;
    /**
     * <code>ROWDATA = 2;</code>
     */
    public static final int ROWDATA_VALUE = 2;
    /**
     * <code>TRANSACTIONEND = 3;</code>
     */
    public static final int TRANSACTIONEND_VALUE = 3;
    /**
     * <code>HEARTBEAT = 4;</code>
     *
     * <pre>
     ** 心跳类型，内部使用，外部暂不可见，可忽略 *
     * </pre>
     */
    public static final int HEARTBEAT_VALUE = 4;
    /**
     * <code>GTIDLOG = 5;</code>
     */
    public static final int GTIDLOG_VALUE = 5;


    public final int getNumber() { return value; }

    public static EntryType valueOf(int value) {
      switch (value) {
        case 1: return TRANSACTIONBEGIN;
        case 2: return ROWDATA;
        case 3: return TRANSACTIONEND;
        case 4: return HEARTBEAT;
        case 5: return GTIDLOG;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<EntryType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<EntryType>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<EntryType>() {
            public EntryType findValueByNumber(int number) {
              return EntryType.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return CanalEntry.getDescriptor().getEnumTypes().get(0);
    }

    private static final EntryType[] VALUES = values();

    public static EntryType valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private EntryType(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:com.alibaba.otter.canal.protocol.EntryType)
  }

  /**
   * Protobuf enum {@code com.alibaba.otter.canal.protocol.EventType}
   *
   * <pre>
   ** 事件类型 *
   * </pre>
   */
  public enum EventType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>INSERT = 1;</code>
     */
    INSERT(0, 1),
    /**
     * <code>UPDATE = 2;</code>
     */
    UPDATE(1, 2),
    /**
     * <code>DELETE = 3;</code>
     */
    DELETE(2, 3),
    /**
     * <code>CREATE = 4;</code>
     */
    CREATE(3, 4),
    /**
     * <code>ALTER = 5;</code>
     */
    ALTER(4, 5),
    /**
     * <code>ERASE = 6;</code>
     */
    ERASE(5, 6),
    /**
     * <code>QUERY = 7;</code>
     */
    QUERY(6, 7),
    /**
     * <code>TRUNCATE = 8;</code>
     */
    TRUNCATE(7, 8),
    /**
     * <code>RENAME = 9;</code>
     */
    RENAME(8, 9),
    /**
     * <code>CINDEX = 10;</code>
     *
     * <pre>
     **CREATE INDEX*
     * </pre>
     */
    CINDEX(9, 10),
    /**
     * <code>DINDEX = 11;</code>
     */
    DINDEX(10, 11),
    /**
     * <code>GTID = 12;</code>
     */
    GTID(11, 12),
    /**
     * <code>XACOMMIT = 13;</code>
     *
     * <pre>
     ** XA *
     * </pre>
     */
    XACOMMIT(12, 13),
    /**
     * <code>XAROLLBACK = 14;</code>
     */
    XAROLLBACK(13, 14),
    /**
     * <code>MHEARTBEAT = 15;</code>
     *
     * <pre>
     ** MASTER HEARTBEAT *
     * </pre>
     */
    MHEARTBEAT(14, 15),
    ;

    /**
     * <code>INSERT = 1;</code>
     */
    public static final int INSERT_VALUE = 1;
    /**
     * <code>UPDATE = 2;</code>
     */
    public static final int UPDATE_VALUE = 2;
    /**
     * <code>DELETE = 3;</code>
     */
    public static final int DELETE_VALUE = 3;
    /**
     * <code>CREATE = 4;</code>
     */
    public static final int CREATE_VALUE = 4;
    /**
     * <code>ALTER = 5;</code>
     */
    public static final int ALTER_VALUE = 5;
    /**
     * <code>ERASE = 6;</code>
     */
    public static final int ERASE_VALUE = 6;
    /**
     * <code>QUERY = 7;</code>
     */
    public static final int QUERY_VALUE = 7;
    /**
     * <code>TRUNCATE = 8;</code>
     */
    public static final int TRUNCATE_VALUE = 8;
    /**
     * <code>RENAME = 9;</code>
     */
    public static final int RENAME_VALUE = 9;
    /**
     * <code>CINDEX = 10;</code>
     *
     * <pre>
     **CREATE INDEX*
     * </pre>
     */
    public static final int CINDEX_VALUE = 10;
    /**
     * <code>DINDEX = 11;</code>
     */
    public static final int DINDEX_VALUE = 11;
    /**
     * <code>GTID = 12;</code>
     */
    public static final int GTID_VALUE = 12;
    /**
     * <code>XACOMMIT = 13;</code>
     *
     * <pre>
     ** XA *
     * </pre>
     */
    public static final int XACOMMIT_VALUE = 13;
    /**
     * <code>XAROLLBACK = 14;</code>
     */
    public static final int XAROLLBACK_VALUE = 14;
    /**
     * <code>MHEARTBEAT = 15;</code>
     *
     * <pre>
     ** MASTER HEARTBEAT *
     * </pre>
     */
    public static final int MHEARTBEAT_VALUE = 15;


    public final int getNumber() { return value; }

    public static EventType valueOf(int value) {
      switch (value) {
        case 1: return INSERT;
        case 2: return UPDATE;
        case 3: return DELETE;
        case 4: return CREATE;
        case 5: return ALTER;
        case 6: return ERASE;
        case 7: return QUERY;
        case 8: return TRUNCATE;
        case 9: return RENAME;
        case 10: return CINDEX;
        case 11: return DINDEX;
        case 12: return GTID;
        case 13: return XACOMMIT;
        case 14: return XAROLLBACK;
        case 15: return MHEARTBEAT;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<EventType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<EventType>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<EventType>() {
            public EventType findValueByNumber(int number) {
              return EventType.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return CanalEntry.getDescriptor().getEnumTypes().get(1);
    }

    private static final EventType[] VALUES = values();

    public static EventType valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private EventType(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:com.alibaba.otter.canal.protocol.EventType)
  }

  /**
   * Protobuf enum {@code com.alibaba.otter.canal.protocol.Type}
   *
   * <pre>
   **数据库类型*
   * </pre>
   */
  public enum Type
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>ORACLE = 1;</code>
     */
    ORACLE(0, 1),
    /**
     * <code>MYSQL = 2;</code>
     */
    MYSQL(1, 2),
    /**
     * <code>PGSQL = 3;</code>
     */
    PGSQL(2, 3),
    ;

    /**
     * <code>ORACLE = 1;</code>
     */
    public static final int ORACLE_VALUE = 1;
    /**
     * <code>MYSQL = 2;</code>
     */
    public static final int MYSQL_VALUE = 2;
    /**
     * <code>PGSQL = 3;</code>
     */
    public static final int PGSQL_VALUE = 3;


    public final int getNumber() { return value; }

    public static Type valueOf(int value) {
      switch (value) {
        case 1: return ORACLE;
        case 2: return MYSQL;
        case 3: return PGSQL;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<Type>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<Type>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<Type>() {
            public Type findValueByNumber(int number) {
              return Type.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return CanalEntry.getDescriptor().getEnumTypes().get(2);
    }

    private static final Type[] VALUES = values();

    public static Type valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private Type(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:com.alibaba.otter.canal.protocol.Type)
  }

  public interface EntryOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.Entry)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .com.alibaba.otter.canal.protocol.Header header = 1;</code>
     *
     * <pre>
     **协议头部信息*
     * </pre>
     */
    boolean hasHeader();
    /**
     * <code>optional .com.alibaba.otter.canal.protocol.Header header = 1;</code>
     *
     * <pre>
     **协议头部信息*
     * </pre>
     */
    Header getHeader();
    /**
     * <code>optional .com.alibaba.otter.canal.protocol.Header header = 1;</code>
     *
     * <pre>
     **协议头部信息*
     * </pre>
     */
    HeaderOrBuilder getHeaderOrBuilder();

    /**
     * <code>optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA];</code>
     *
     * <pre>
     **打散后的事件类型*
     * </pre>
     */
    boolean hasEntryType();
    /**
     * <code>optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA];</code>
     *
     * <pre>
     **打散后的事件类型*
     * </pre>
     */
    EntryType getEntryType();

    /**
     * <code>optional bytes storeValue = 3;</code>
     *
     * <pre>
     **传输的二进制数组*
     * </pre>
     */
    boolean hasStoreValue();
    /**
     * <code>optional bytes storeValue = 3;</code>
     *
     * <pre>
     **传输的二进制数组*
     * </pre>
     */
    com.google.protobuf.ByteString getStoreValue();
  }
  /**
   * Protobuf type {@code com.alibaba.otter.canal.protocol.Entry}
   *
   * <pre>
   ****************************************************************
   * message model
   *如果要在Enum中新增类型，确保以前的类型的下标值不变.
   ***************************************************************
   * </pre>
   */
  public static final class Entry extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.Entry)
      EntryOrBuilder {
    // Use Entry.newBuilder() to construct.
    private Entry(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Entry(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Entry defaultInstance;
    public static Entry getDefaultInstance() {
      return defaultInstance;
    }

    public Entry getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Entry(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              Header.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = header_.toBuilder();
              }
              header_ = input.readMessage(Header.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(header_);
                header_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
              EntryType value = EntryType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                entryType_ = value;
              }
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              storeValue_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_Entry_descriptor;
    }

    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_Entry_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              Entry.class, Builder.class);
    }

    public static com.google.protobuf.Parser<Entry> PARSER =
        new com.google.protobuf.AbstractParser<Entry>() {
      public Entry parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Entry(input, extensionRegistry);
      }
    };

    @Override
    public com.google.protobuf.Parser<Entry> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    public static final int HEADER_FIELD_NUMBER = 1;
    private Header header_;
    /**
     * <code>optional .com.alibaba.otter.canal.protocol.Header header = 1;</code>
     *
     * <pre>
     **协议头部信息*
     * </pre>
     */
    public boolean hasHeader() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .com.alibaba.otter.canal.protocol.Header header = 1;</code>
     *
     * <pre>
     **协议头部信息*
     * </pre>
     */
    public Header getHeader() {
      return header_;
    }
    /**
     * <code>optional .com.alibaba.otter.canal.protocol.Header header = 1;</code>
     *
     * <pre>
     **协议头部信息*
     * </pre>
     */
    public HeaderOrBuilder getHeaderOrBuilder() {
      return header_;
    }

    public static final int ENTRYTYPE_FIELD_NUMBER = 2;
    private EntryType entryType_;
    /**
     * <code>optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA];</code>
     *
     * <pre>
     **打散后的事件类型*
     * </pre>
     */
    public boolean hasEntryType() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA];</code>
     *
     * <pre>
     **打散后的事件类型*
     * </pre>
     */
    public EntryType getEntryType() {
      return entryType_;
    }

    public static final int STOREVALUE_FIELD_NUMBER = 3;
    private com.google.protobuf.ByteString storeValue_;
    /**
     * <code>optional bytes storeValue = 3;</code>
     *
     * <pre>
     **传输的二进制数组*
     * </pre>
     */
    public boolean hasStoreValue() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bytes storeValue = 3;</code>
     *
     * <pre>
     **传输的二进制数组*
     * </pre>
     */
    public com.google.protobuf.ByteString getStoreValue() {
      return storeValue_;
    }

    private void initFields() {
      header_ = Header.getDefaultInstance();
      entryType_ = EntryType.ROWDATA;
      storeValue_ = com.google.protobuf.ByteString.EMPTY;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, header_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(2, entryType_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, storeValue_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, header_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, entryType_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, storeValue_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @Override
    protected Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static Entry parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Entry parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Entry parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Entry parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Entry parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static Entry parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static Entry parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static Entry parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static Entry parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static Entry parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(Entry prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code com.alibaba.otter.canal.protocol.Entry}
     *
     * <pre>
     ****************************************************************
     * message model
     *如果要在Enum中新增类型，确保以前的类型的下标值不变.
     ***************************************************************
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.Entry)
        EntryOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_Entry_descriptor;
      }

      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_Entry_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Entry.class, Builder.class);
      }

      // Construct using com.alibaba.otter.canal.protocol.CanalEntry.Entry.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getHeaderFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (headerBuilder_ == null) {
          header_ = Header.getDefaultInstance();
        } else {
          headerBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        entryType_ = EntryType.ROWDATA;
        bitField0_ = (bitField0_ & ~0x00000002);
        storeValue_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_Entry_descriptor;
      }

      public Entry getDefaultInstanceForType() {
        return Entry.getDefaultInstance();
      }

      public Entry build() {
        Entry result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public Entry buildPartial() {
        Entry result = new Entry(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (headerBuilder_ == null) {
          result.header_ = header_;
        } else {
          result.header_ = headerBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.entryType_ = entryType_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.storeValue_ = storeValue_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof Entry) {
          return mergeFrom((Entry)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(Entry other) {
        if (other == Entry.getDefaultInstance()) return this;
        if (other.hasHeader()) {
          mergeHeader(other.getHeader());
        }
        if (other.hasEntryType()) {
          setEntryType(other.getEntryType());
        }
        if (other.hasStoreValue()) {
          setStoreValue(other.getStoreValue());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Entry parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (Entry) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private Header header_ = Header.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          Header, Header.Builder, HeaderOrBuilder> headerBuilder_;
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.Header header = 1;</code>
       *
       * <pre>
       **协议头部信息*
       * </pre>
       */
      public boolean hasHeader() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.Header header = 1;</code>
       *
       * <pre>
       **协议头部信息*
       * </pre>
       */
      public Header getHeader() {
        if (headerBuilder_ == null) {
          return header_;
        } else {
          return headerBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.Header header = 1;</code>
       *
       * <pre>
       **协议头部信息*
       * </pre>
       */
      public Builder setHeader(Header value) {
        if (headerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          header_ = value;
          onChanged();
        } else {
          headerBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.Header header = 1;</code>
       *
       * <pre>
       **协议头部信息*
       * </pre>
       */
      public Builder setHeader(
          Header.Builder builderForValue) {
        if (headerBuilder_ == null) {
          header_ = builderForValue.build();
          onChanged();
        } else {
          headerBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.Header header = 1;</code>
       *
       * <pre>
       **协议头部信息*
       * </pre>
       */
      public Builder mergeHeader(Header value) {
        if (headerBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              header_ != Header.getDefaultInstance()) {
            header_ =
              Header.newBuilder(header_).mergeFrom(value).buildPartial();
          } else {
            header_ = value;
          }
          onChanged();
        } else {
          headerBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.Header header = 1;</code>
       *
       * <pre>
       **协议头部信息*
       * </pre>
       */
      public Builder clearHeader() {
        if (headerBuilder_ == null) {
          header_ = Header.getDefaultInstance();
          onChanged();
        } else {
          headerBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.Header header = 1;</code>
       *
       * <pre>
       **协议头部信息*
       * </pre>
       */
      public Header.Builder getHeaderBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getHeaderFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.Header header = 1;</code>
       *
       * <pre>
       **协议头部信息*
       * </pre>
       */
      public HeaderOrBuilder getHeaderOrBuilder() {
        if (headerBuilder_ != null) {
          return headerBuilder_.getMessageOrBuilder();
        } else {
          return header_;
        }
      }
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.Header header = 1;</code>
       *
       * <pre>
       **协议头部信息*
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          Header, Header.Builder, HeaderOrBuilder>
          getHeaderFieldBuilder() {
        if (headerBuilder_ == null) {
          headerBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              Header, Header.Builder, HeaderOrBuilder>(
                  getHeader(),
                  getParentForChildren(),
                  isClean());
          header_ = null;
        }
        return headerBuilder_;
      }

      private EntryType entryType_ = EntryType.ROWDATA;
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA];</code>
       *
       * <pre>
       **打散后的事件类型*
       * </pre>
       */
      public boolean hasEntryType() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA];</code>
       *
       * <pre>
       **打散后的事件类型*
       * </pre>
       */
      public EntryType getEntryType() {
        return entryType_;
      }
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA];</code>
       *
       * <pre>
       **打散后的事件类型*
       * </pre>
       */
      public Builder setEntryType(EntryType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        entryType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.EntryType entryType = 2 [default = ROWDATA];</code>
       *
       * <pre>
       **打散后的事件类型*
       * </pre>
       */
      public Builder clearEntryType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        entryType_ = EntryType.ROWDATA;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString storeValue_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes storeValue = 3;</code>
       *
       * <pre>
       **传输的二进制数组*
       * </pre>
       */
      public boolean hasStoreValue() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bytes storeValue = 3;</code>
       *
       * <pre>
       **传输的二进制数组*
       * </pre>
       */
      public com.google.protobuf.ByteString getStoreValue() {
        return storeValue_;
      }
      /**
       * <code>optional bytes storeValue = 3;</code>
       *
       * <pre>
       **传输的二进制数组*
       * </pre>
       */
      public Builder setStoreValue(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        storeValue_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes storeValue = 3;</code>
       *
       * <pre>
       **传输的二进制数组*
       * </pre>
       */
      public Builder clearStoreValue() {
        bitField0_ = (bitField0_ & ~0x00000004);
        storeValue_ = getDefaultInstance().getStoreValue();
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:com.alibaba.otter.canal.protocol.Entry)
    }

    static {
      defaultInstance = new Entry(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:com.alibaba.otter.canal.protocol.Entry)
  }

  public interface HeaderOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.Header)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional int32 version = 1 [default = 1];</code>
     *
     * <pre>
     **协议的版本号*
     * </pre>
     */
    boolean hasVersion();
    /**
     * <code>optional int32 version = 1 [default = 1];</code>
     *
     * <pre>
     **协议的版本号*
     * </pre>
     */
    int getVersion();

    /**
     * <code>optional string logfileName = 2;</code>
     *
     * <pre>
     **binlog/redolog 文件名*
     * </pre>
     */
    boolean hasLogfileName();
    /**
     * <code>optional string logfileName = 2;</code>
     *
     * <pre>
     **binlog/redolog 文件名*
     * </pre>
     */
    String getLogfileName();
    /**
     * <code>optional string logfileName = 2;</code>
     *
     * <pre>
     **binlog/redolog 文件名*
     * </pre>
     */
    com.google.protobuf.ByteString
        getLogfileNameBytes();

    /**
     * <code>optional int64 logfileOffset = 3;</code>
     *
     * <pre>
     **binlog/redolog 文件的偏移位置*
     * </pre>
     */
    boolean hasLogfileOffset();
    /**
     * <code>optional int64 logfileOffset = 3;</code>
     *
     * <pre>
     **binlog/redolog 文件的偏移位置*
     * </pre>
     */
    long getLogfileOffset();

    /**
     * <code>optional int64 serverId = 4;</code>
     *
     * <pre>
     **服务端serverId*
     * </pre>
     */
    boolean hasServerId();
    /**
     * <code>optional int64 serverId = 4;</code>
     *
     * <pre>
     **服务端serverId*
     * </pre>
     */
    long getServerId();

    /**
     * <code>optional string serverenCode = 5;</code>
     *
     * <pre>
     ** 变更数据的编码 *
     * </pre>
     */
    boolean hasServerenCode();
    /**
     * <code>optional string serverenCode = 5;</code>
     *
     * <pre>
     ** 变更数据的编码 *
     * </pre>
     */
    String getServerenCode();
    /**
     * <code>optional string serverenCode = 5;</code>
     *
     * <pre>
     ** 变更数据的编码 *
     * </pre>
     */
    com.google.protobuf.ByteString
        getServerenCodeBytes();

    /**
     * <code>optional int64 executeTime = 6;</code>
     *
     * <pre>
     **变更数据的执行时间 *
     * </pre>
     */
    boolean hasExecuteTime();
    /**
     * <code>optional int64 executeTime = 6;</code>
     *
     * <pre>
     **变更数据的执行时间 *
     * </pre>
     */
    long getExecuteTime();

    /**
     * <code>optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL];</code>
     *
     * <pre>
     ** 变更数据的来源*
     * </pre>
     */
    boolean hasSourceType();
    /**
     * <code>optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL];</code>
     *
     * <pre>
     ** 变更数据的来源*
     * </pre>
     */
    Type getSourceType();

    /**
     * <code>optional string schemaName = 8;</code>
     *
     * <pre>
     ** 变更数据的schemaname*
     * </pre>
     */
    boolean hasSchemaName();
    /**
     * <code>optional string schemaName = 8;</code>
     *
     * <pre>
     ** 变更数据的schemaname*
     * </pre>
     */
    String getSchemaName();
    /**
     * <code>optional string schemaName = 8;</code>
     *
     * <pre>
     ** 变更数据的schemaname*
     * </pre>
     */
    com.google.protobuf.ByteString
        getSchemaNameBytes();

    /**
     * <code>optional string tableName = 9;</code>
     *
     * <pre>
     **变更数据的tablename*
     * </pre>
     */
    boolean hasTableName();
    /**
     * <code>optional string tableName = 9;</code>
     *
     * <pre>
     **变更数据的tablename*
     * </pre>
     */
    String getTableName();
    /**
     * <code>optional string tableName = 9;</code>
     *
     * <pre>
     **变更数据的tablename*
     * </pre>
     */
    com.google.protobuf.ByteString
        getTableNameBytes();

    /**
     * <code>optional int64 eventLength = 10;</code>
     *
     * <pre>
     **每个event的长度*
     * </pre>
     */
    boolean hasEventLength();
    /**
     * <code>optional int64 eventLength = 10;</code>
     *
     * <pre>
     **每个event的长度*
     * </pre>
     */
    long getEventLength();

    /**
     * <code>optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE];</code>
     *
     * <pre>
     **数据变更类型*
     * </pre>
     */
    boolean hasEventType();
    /**
     * <code>optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE];</code>
     *
     * <pre>
     **数据变更类型*
     * </pre>
     */
    EventType getEventType();

    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    java.util.List<Pair>
        getPropsList();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    Pair getProps(int index);
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    int getPropsCount();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    java.util.List<? extends PairOrBuilder>
        getPropsOrBuilderList();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    PairOrBuilder getPropsOrBuilder(int index);

    /**
     * <code>optional string gtid = 13;</code>
     *
     * <pre>
     **当前事务的gitd*
     * </pre>
     */
    boolean hasGtid();
    /**
     * <code>optional string gtid = 13;</code>
     *
     * <pre>
     **当前事务的gitd*
     * </pre>
     */
    String getGtid();
    /**
     * <code>optional string gtid = 13;</code>
     *
     * <pre>
     **当前事务的gitd*
     * </pre>
     */
    com.google.protobuf.ByteString
        getGtidBytes();
  }
  /**
   * Protobuf type {@code com.alibaba.otter.canal.protocol.Header}
   *
   * <pre>
   **message Header*
   * </pre>
   */
  public static final class Header extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.Header)
      HeaderOrBuilder {
    // Use Header.newBuilder() to construct.
    private Header(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Header(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Header defaultInstance;
    public static Header getDefaultInstance() {
      return defaultInstance;
    }

    public Header getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Header(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              version_ = input.readInt32();
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              logfileName_ = bs;
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              logfileOffset_ = input.readInt64();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              serverId_ = input.readInt64();
              break;
            }
            case 42: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000010;
              serverenCode_ = bs;
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              executeTime_ = input.readInt64();
              break;
            }
            case 56: {
              int rawValue = input.readEnum();
              Type value = Type.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(7, rawValue);
              } else {
                bitField0_ |= 0x00000040;
                sourceType_ = value;
              }
              break;
            }
            case 66: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000080;
              schemaName_ = bs;
              break;
            }
            case 74: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000100;
              tableName_ = bs;
              break;
            }
            case 80: {
              bitField0_ |= 0x00000200;
              eventLength_ = input.readInt64();
              break;
            }
            case 88: {
              int rawValue = input.readEnum();
              EventType value = EventType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(11, rawValue);
              } else {
                bitField0_ |= 0x00000400;
                eventType_ = value;
              }
              break;
            }
            case 98: {
              if (!((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
                props_ = new java.util.ArrayList<Pair>();
                mutable_bitField0_ |= 0x00000800;
              }
              props_.add(input.readMessage(Pair.PARSER, extensionRegistry));
              break;
            }
            case 106: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000800;
              gtid_ = bs;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
          props_ = java.util.Collections.unmodifiableList(props_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_Header_descriptor;
    }

    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_Header_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              Header.class, Builder.class);
    }

    public static com.google.protobuf.Parser<Header> PARSER =
        new com.google.protobuf.AbstractParser<Header>() {
      public Header parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Header(input, extensionRegistry);
      }
    };

    @Override
    public com.google.protobuf.Parser<Header> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    public static final int VERSION_FIELD_NUMBER = 1;
    private int version_;
    /**
     * <code>optional int32 version = 1 [default = 1];</code>
     *
     * <pre>
     **协议的版本号*
     * </pre>
     */
    public boolean hasVersion() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 version = 1 [default = 1];</code>
     *
     * <pre>
     **协议的版本号*
     * </pre>
     */
    public int getVersion() {
      return version_;
    }

    public static final int LOGFILENAME_FIELD_NUMBER = 2;
    private Object logfileName_;
    /**
     * <code>optional string logfileName = 2;</code>
     *
     * <pre>
     **binlog/redolog 文件名*
     * </pre>
     */
    public boolean hasLogfileName() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string logfileName = 2;</code>
     *
     * <pre>
     **binlog/redolog 文件名*
     * </pre>
     */
    public String getLogfileName() {
      Object ref = logfileName_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          logfileName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string logfileName = 2;</code>
     *
     * <pre>
     **binlog/redolog 文件名*
     * </pre>
     */
    public com.google.protobuf.ByteString
        getLogfileNameBytes() {
      Object ref = logfileName_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        logfileName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int LOGFILEOFFSET_FIELD_NUMBER = 3;
    private long logfileOffset_;
    /**
     * <code>optional int64 logfileOffset = 3;</code>
     *
     * <pre>
     **binlog/redolog 文件的偏移位置*
     * </pre>
     */
    public boolean hasLogfileOffset() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 logfileOffset = 3;</code>
     *
     * <pre>
     **binlog/redolog 文件的偏移位置*
     * </pre>
     */
    public long getLogfileOffset() {
      return logfileOffset_;
    }

    public static final int SERVERID_FIELD_NUMBER = 4;
    private long serverId_;
    /**
     * <code>optional int64 serverId = 4;</code>
     *
     * <pre>
     **服务端serverId*
     * </pre>
     */
    public boolean hasServerId() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int64 serverId = 4;</code>
     *
     * <pre>
     **服务端serverId*
     * </pre>
     */
    public long getServerId() {
      return serverId_;
    }

    public static final int SERVERENCODE_FIELD_NUMBER = 5;
    private Object serverenCode_;
    /**
     * <code>optional string serverenCode = 5;</code>
     *
     * <pre>
     ** 变更数据的编码 *
     * </pre>
     */
    public boolean hasServerenCode() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string serverenCode = 5;</code>
     *
     * <pre>
     ** 变更数据的编码 *
     * </pre>
     */
    public String getServerenCode() {
      Object ref = serverenCode_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          serverenCode_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string serverenCode = 5;</code>
     *
     * <pre>
     ** 变更数据的编码 *
     * </pre>
     */
    public com.google.protobuf.ByteString
        getServerenCodeBytes() {
      Object ref = serverenCode_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        serverenCode_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int EXECUTETIME_FIELD_NUMBER = 6;
    private long executeTime_;
    /**
     * <code>optional int64 executeTime = 6;</code>
     *
     * <pre>
     **变更数据的执行时间 *
     * </pre>
     */
    public boolean hasExecuteTime() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional int64 executeTime = 6;</code>
     *
     * <pre>
     **变更数据的执行时间 *
     * </pre>
     */
    public long getExecuteTime() {
      return executeTime_;
    }

    public static final int SOURCETYPE_FIELD_NUMBER = 7;
    private Type sourceType_;
    /**
     * <code>optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL];</code>
     *
     * <pre>
     ** 变更数据的来源*
     * </pre>
     */
    public boolean hasSourceType() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL];</code>
     *
     * <pre>
     ** 变更数据的来源*
     * </pre>
     */
    public Type getSourceType() {
      return sourceType_;
    }

    public static final int SCHEMANAME_FIELD_NUMBER = 8;
    private Object schemaName_;
    /**
     * <code>optional string schemaName = 8;</code>
     *
     * <pre>
     ** 变更数据的schemaname*
     * </pre>
     */
    public boolean hasSchemaName() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional string schemaName = 8;</code>
     *
     * <pre>
     ** 变更数据的schemaname*
     * </pre>
     */
    public String getSchemaName() {
      Object ref = schemaName_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          schemaName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string schemaName = 8;</code>
     *
     * <pre>
     ** 变更数据的schemaname*
     * </pre>
     */
    public com.google.protobuf.ByteString
        getSchemaNameBytes() {
      Object ref = schemaName_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        schemaName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TABLENAME_FIELD_NUMBER = 9;
    private Object tableName_;
    /**
     * <code>optional string tableName = 9;</code>
     *
     * <pre>
     **变更数据的tablename*
     * </pre>
     */
    public boolean hasTableName() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional string tableName = 9;</code>
     *
     * <pre>
     **变更数据的tablename*
     * </pre>
     */
    public String getTableName() {
      Object ref = tableName_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          tableName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string tableName = 9;</code>
     *
     * <pre>
     **变更数据的tablename*
     * </pre>
     */
    public com.google.protobuf.ByteString
        getTableNameBytes() {
      Object ref = tableName_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        tableName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int EVENTLENGTH_FIELD_NUMBER = 10;
    private long eventLength_;
    /**
     * <code>optional int64 eventLength = 10;</code>
     *
     * <pre>
     **每个event的长度*
     * </pre>
     */
    public boolean hasEventLength() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional int64 eventLength = 10;</code>
     *
     * <pre>
     **每个event的长度*
     * </pre>
     */
    public long getEventLength() {
      return eventLength_;
    }

    public static final int EVENTTYPE_FIELD_NUMBER = 11;
    private EventType eventType_;
    /**
     * <code>optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE];</code>
     *
     * <pre>
     **数据变更类型*
     * </pre>
     */
    public boolean hasEventType() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE];</code>
     *
     * <pre>
     **数据变更类型*
     * </pre>
     */
    public EventType getEventType() {
      return eventType_;
    }

    public static final int PROPS_FIELD_NUMBER = 12;
    private java.util.List<Pair> props_;
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public java.util.List<Pair> getPropsList() {
      return props_;
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public java.util.List<? extends PairOrBuilder>
        getPropsOrBuilderList() {
      return props_;
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public int getPropsCount() {
      return props_.size();
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public Pair getProps(int index) {
      return props_.get(index);
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public PairOrBuilder getPropsOrBuilder(
        int index) {
      return props_.get(index);
    }

    public static final int GTID_FIELD_NUMBER = 13;
    private Object gtid_;
    /**
     * <code>optional string gtid = 13;</code>
     *
     * <pre>
     **当前事务的gitd*
     * </pre>
     */
    public boolean hasGtid() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <code>optional string gtid = 13;</code>
     *
     * <pre>
     **当前事务的gitd*
     * </pre>
     */
    public String getGtid() {
      Object ref = gtid_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          gtid_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string gtid = 13;</code>
     *
     * <pre>
     **当前事务的gitd*
     * </pre>
     */
    public com.google.protobuf.ByteString
        getGtidBytes() {
      Object ref = gtid_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        gtid_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      version_ = 1;
      logfileName_ = "";
      logfileOffset_ = 0L;
      serverId_ = 0L;
      serverenCode_ = "";
      executeTime_ = 0L;
      sourceType_ = Type.MYSQL;
      schemaName_ = "";
      tableName_ = "";
      eventLength_ = 0L;
      eventType_ = EventType.UPDATE;
      props_ = java.util.Collections.emptyList();
      gtid_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, version_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getLogfileNameBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, logfileOffset_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt64(4, serverId_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, getServerenCodeBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeInt64(6, executeTime_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeEnum(7, sourceType_.getNumber());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeBytes(8, getSchemaNameBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeBytes(9, getTableNameBytes());
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeInt64(10, eventLength_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeEnum(11, eventType_.getNumber());
      }
      for (int i = 0; i < props_.size(); i++) {
        output.writeMessage(12, props_.get(i));
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeBytes(13, getGtidBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, version_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getLogfileNameBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, logfileOffset_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, serverId_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getServerenCodeBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(6, executeTime_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(7, sourceType_.getNumber());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, getSchemaNameBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(9, getTableNameBytes());
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(10, eventLength_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(11, eventType_.getNumber());
      }
      for (int i = 0; i < props_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12, props_.get(i));
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(13, getGtidBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @Override
    protected Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static Header parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Header parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Header parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Header parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Header parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static Header parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static Header parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static Header parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static Header parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static Header parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(Header prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code com.alibaba.otter.canal.protocol.Header}
     *
     * <pre>
     **message Header*
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.Header)
        HeaderOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_Header_descriptor;
      }

      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_Header_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Header.class, Builder.class);
      }

      // Construct using com.alibaba.otter.canal.protocol.CanalEntry.Header.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getPropsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        version_ = 1;
        bitField0_ = (bitField0_ & ~0x00000001);
        logfileName_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        logfileOffset_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        serverId_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        serverenCode_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        executeTime_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000020);
        sourceType_ = Type.MYSQL;
        bitField0_ = (bitField0_ & ~0x00000040);
        schemaName_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        tableName_ = "";
        bitField0_ = (bitField0_ & ~0x00000100);
        eventLength_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000200);
        eventType_ = EventType.UPDATE;
        bitField0_ = (bitField0_ & ~0x00000400);
        if (propsBuilder_ == null) {
          props_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000800);
        } else {
          propsBuilder_.clear();
        }
        gtid_ = "";
        bitField0_ = (bitField0_ & ~0x00001000);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_Header_descriptor;
      }

      public Header getDefaultInstanceForType() {
        return Header.getDefaultInstance();
      }

      public Header build() {
        Header result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public Header buildPartial() {
        Header result = new Header(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.version_ = version_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.logfileName_ = logfileName_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.logfileOffset_ = logfileOffset_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.serverId_ = serverId_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.serverenCode_ = serverenCode_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.executeTime_ = executeTime_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.sourceType_ = sourceType_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.schemaName_ = schemaName_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        result.tableName_ = tableName_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        result.eventLength_ = eventLength_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        result.eventType_ = eventType_;
        if (propsBuilder_ == null) {
          if (((bitField0_ & 0x00000800) == 0x00000800)) {
            props_ = java.util.Collections.unmodifiableList(props_);
            bitField0_ = (bitField0_ & ~0x00000800);
          }
          result.props_ = props_;
        } else {
          result.props_ = propsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00000800;
        }
        result.gtid_ = gtid_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof Header) {
          return mergeFrom((Header)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(Header other) {
        if (other == Header.getDefaultInstance()) return this;
        if (other.hasVersion()) {
          setVersion(other.getVersion());
        }
        if (other.hasLogfileName()) {
          bitField0_ |= 0x00000002;
          logfileName_ = other.logfileName_;
          onChanged();
        }
        if (other.hasLogfileOffset()) {
          setLogfileOffset(other.getLogfileOffset());
        }
        if (other.hasServerId()) {
          setServerId(other.getServerId());
        }
        if (other.hasServerenCode()) {
          bitField0_ |= 0x00000010;
          serverenCode_ = other.serverenCode_;
          onChanged();
        }
        if (other.hasExecuteTime()) {
          setExecuteTime(other.getExecuteTime());
        }
        if (other.hasSourceType()) {
          setSourceType(other.getSourceType());
        }
        if (other.hasSchemaName()) {
          bitField0_ |= 0x00000080;
          schemaName_ = other.schemaName_;
          onChanged();
        }
        if (other.hasTableName()) {
          bitField0_ |= 0x00000100;
          tableName_ = other.tableName_;
          onChanged();
        }
        if (other.hasEventLength()) {
          setEventLength(other.getEventLength());
        }
        if (other.hasEventType()) {
          setEventType(other.getEventType());
        }
        if (propsBuilder_ == null) {
          if (!other.props_.isEmpty()) {
            if (props_.isEmpty()) {
              props_ = other.props_;
              bitField0_ = (bitField0_ & ~0x00000800);
            } else {
              ensurePropsIsMutable();
              props_.addAll(other.props_);
            }
            onChanged();
          }
        } else {
          if (!other.props_.isEmpty()) {
            if (propsBuilder_.isEmpty()) {
              propsBuilder_.dispose();
              propsBuilder_ = null;
              props_ = other.props_;
              bitField0_ = (bitField0_ & ~0x00000800);
              propsBuilder_ =
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getPropsFieldBuilder() : null;
            } else {
              propsBuilder_.addAllMessages(other.props_);
            }
          }
        }
        if (other.hasGtid()) {
          bitField0_ |= 0x00001000;
          gtid_ = other.gtid_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Header parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (Header) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int version_ = 1;
      /**
       * <code>optional int32 version = 1 [default = 1];</code>
       *
       * <pre>
       **协议的版本号*
       * </pre>
       */
      public boolean hasVersion() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 version = 1 [default = 1];</code>
       *
       * <pre>
       **协议的版本号*
       * </pre>
       */
      public int getVersion() {
        return version_;
      }
      /**
       * <code>optional int32 version = 1 [default = 1];</code>
       *
       * <pre>
       **协议的版本号*
       * </pre>
       */
      public Builder setVersion(int value) {
        bitField0_ |= 0x00000001;
        version_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 version = 1 [default = 1];</code>
       *
       * <pre>
       **协议的版本号*
       * </pre>
       */
      public Builder clearVersion() {
        bitField0_ = (bitField0_ & ~0x00000001);
        version_ = 1;
        onChanged();
        return this;
      }

      private Object logfileName_ = "";
      /**
       * <code>optional string logfileName = 2;</code>
       *
       * <pre>
       **binlog/redolog 文件名*
       * </pre>
       */
      public boolean hasLogfileName() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string logfileName = 2;</code>
       *
       * <pre>
       **binlog/redolog 文件名*
       * </pre>
       */
      public String getLogfileName() {
        Object ref = logfileName_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            logfileName_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string logfileName = 2;</code>
       *
       * <pre>
       **binlog/redolog 文件名*
       * </pre>
       */
      public com.google.protobuf.ByteString
          getLogfileNameBytes() {
        Object ref = logfileName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          logfileName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string logfileName = 2;</code>
       *
       * <pre>
       **binlog/redolog 文件名*
       * </pre>
       */
      public Builder setLogfileName(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        logfileName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string logfileName = 2;</code>
       *
       * <pre>
       **binlog/redolog 文件名*
       * </pre>
       */
      public Builder clearLogfileName() {
        bitField0_ = (bitField0_ & ~0x00000002);
        logfileName_ = getDefaultInstance().getLogfileName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string logfileName = 2;</code>
       *
       * <pre>
       **binlog/redolog 文件名*
       * </pre>
       */
      public Builder setLogfileNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        logfileName_ = value;
        onChanged();
        return this;
      }

      private long logfileOffset_ ;
      /**
       * <code>optional int64 logfileOffset = 3;</code>
       *
       * <pre>
       **binlog/redolog 文件的偏移位置*
       * </pre>
       */
      public boolean hasLogfileOffset() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 logfileOffset = 3;</code>
       *
       * <pre>
       **binlog/redolog 文件的偏移位置*
       * </pre>
       */
      public long getLogfileOffset() {
        return logfileOffset_;
      }
      /**
       * <code>optional int64 logfileOffset = 3;</code>
       *
       * <pre>
       **binlog/redolog 文件的偏移位置*
       * </pre>
       */
      public Builder setLogfileOffset(long value) {
        bitField0_ |= 0x00000004;
        logfileOffset_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 logfileOffset = 3;</code>
       *
       * <pre>
       **binlog/redolog 文件的偏移位置*
       * </pre>
       */
      public Builder clearLogfileOffset() {
        bitField0_ = (bitField0_ & ~0x00000004);
        logfileOffset_ = 0L;
        onChanged();
        return this;
      }

      private long serverId_ ;
      /**
       * <code>optional int64 serverId = 4;</code>
       *
       * <pre>
       **服务端serverId*
       * </pre>
       */
      public boolean hasServerId() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int64 serverId = 4;</code>
       *
       * <pre>
       **服务端serverId*
       * </pre>
       */
      public long getServerId() {
        return serverId_;
      }
      /**
       * <code>optional int64 serverId = 4;</code>
       *
       * <pre>
       **服务端serverId*
       * </pre>
       */
      public Builder setServerId(long value) {
        bitField0_ |= 0x00000008;
        serverId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 serverId = 4;</code>
       *
       * <pre>
       **服务端serverId*
       * </pre>
       */
      public Builder clearServerId() {
        bitField0_ = (bitField0_ & ~0x00000008);
        serverId_ = 0L;
        onChanged();
        return this;
      }

      private Object serverenCode_ = "";
      /**
       * <code>optional string serverenCode = 5;</code>
       *
       * <pre>
       ** 变更数据的编码 *
       * </pre>
       */
      public boolean hasServerenCode() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string serverenCode = 5;</code>
       *
       * <pre>
       ** 变更数据的编码 *
       * </pre>
       */
      public String getServerenCode() {
        Object ref = serverenCode_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            serverenCode_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string serverenCode = 5;</code>
       *
       * <pre>
       ** 变更数据的编码 *
       * </pre>
       */
      public com.google.protobuf.ByteString
          getServerenCodeBytes() {
        Object ref = serverenCode_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          serverenCode_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string serverenCode = 5;</code>
       *
       * <pre>
       ** 变更数据的编码 *
       * </pre>
       */
      public Builder setServerenCode(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        serverenCode_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string serverenCode = 5;</code>
       *
       * <pre>
       ** 变更数据的编码 *
       * </pre>
       */
      public Builder clearServerenCode() {
        bitField0_ = (bitField0_ & ~0x00000010);
        serverenCode_ = getDefaultInstance().getServerenCode();
        onChanged();
        return this;
      }
      /**
       * <code>optional string serverenCode = 5;</code>
       *
       * <pre>
       ** 变更数据的编码 *
       * </pre>
       */
      public Builder setServerenCodeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        serverenCode_ = value;
        onChanged();
        return this;
      }

      private long executeTime_ ;
      /**
       * <code>optional int64 executeTime = 6;</code>
       *
       * <pre>
       **变更数据的执行时间 *
       * </pre>
       */
      public boolean hasExecuteTime() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional int64 executeTime = 6;</code>
       *
       * <pre>
       **变更数据的执行时间 *
       * </pre>
       */
      public long getExecuteTime() {
        return executeTime_;
      }
      /**
       * <code>optional int64 executeTime = 6;</code>
       *
       * <pre>
       **变更数据的执行时间 *
       * </pre>
       */
      public Builder setExecuteTime(long value) {
        bitField0_ |= 0x00000020;
        executeTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 executeTime = 6;</code>
       *
       * <pre>
       **变更数据的执行时间 *
       * </pre>
       */
      public Builder clearExecuteTime() {
        bitField0_ = (bitField0_ & ~0x00000020);
        executeTime_ = 0L;
        onChanged();
        return this;
      }

      private Type sourceType_ = Type.MYSQL;
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL];</code>
       *
       * <pre>
       ** 变更数据的来源*
       * </pre>
       */
      public boolean hasSourceType() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL];</code>
       *
       * <pre>
       ** 变更数据的来源*
       * </pre>
       */
      public Type getSourceType() {
        return sourceType_;
      }
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL];</code>
       *
       * <pre>
       ** 变更数据的来源*
       * </pre>
       */
      public Builder setSourceType(Type value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000040;
        sourceType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.Type sourceType = 7 [default = MYSQL];</code>
       *
       * <pre>
       ** 变更数据的来源*
       * </pre>
       */
      public Builder clearSourceType() {
        bitField0_ = (bitField0_ & ~0x00000040);
        sourceType_ = Type.MYSQL;
        onChanged();
        return this;
      }

      private Object schemaName_ = "";
      /**
       * <code>optional string schemaName = 8;</code>
       *
       * <pre>
       ** 变更数据的schemaname*
       * </pre>
       */
      public boolean hasSchemaName() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional string schemaName = 8;</code>
       *
       * <pre>
       ** 变更数据的schemaname*
       * </pre>
       */
      public String getSchemaName() {
        Object ref = schemaName_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            schemaName_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string schemaName = 8;</code>
       *
       * <pre>
       ** 变更数据的schemaname*
       * </pre>
       */
      public com.google.protobuf.ByteString
          getSchemaNameBytes() {
        Object ref = schemaName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          schemaName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string schemaName = 8;</code>
       *
       * <pre>
       ** 变更数据的schemaname*
       * </pre>
       */
      public Builder setSchemaName(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        schemaName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string schemaName = 8;</code>
       *
       * <pre>
       ** 变更数据的schemaname*
       * </pre>
       */
      public Builder clearSchemaName() {
        bitField0_ = (bitField0_ & ~0x00000080);
        schemaName_ = getDefaultInstance().getSchemaName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string schemaName = 8;</code>
       *
       * <pre>
       ** 变更数据的schemaname*
       * </pre>
       */
      public Builder setSchemaNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        schemaName_ = value;
        onChanged();
        return this;
      }

      private Object tableName_ = "";
      /**
       * <code>optional string tableName = 9;</code>
       *
       * <pre>
       **变更数据的tablename*
       * </pre>
       */
      public boolean hasTableName() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional string tableName = 9;</code>
       *
       * <pre>
       **变更数据的tablename*
       * </pre>
       */
      public String getTableName() {
        Object ref = tableName_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            tableName_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string tableName = 9;</code>
       *
       * <pre>
       **变更数据的tablename*
       * </pre>
       */
      public com.google.protobuf.ByteString
          getTableNameBytes() {
        Object ref = tableName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          tableName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string tableName = 9;</code>
       *
       * <pre>
       **变更数据的tablename*
       * </pre>
       */
      public Builder setTableName(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
        tableName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string tableName = 9;</code>
       *
       * <pre>
       **变更数据的tablename*
       * </pre>
       */
      public Builder clearTableName() {
        bitField0_ = (bitField0_ & ~0x00000100);
        tableName_ = getDefaultInstance().getTableName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string tableName = 9;</code>
       *
       * <pre>
       **变更数据的tablename*
       * </pre>
       */
      public Builder setTableNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
        tableName_ = value;
        onChanged();
        return this;
      }

      private long eventLength_ ;
      /**
       * <code>optional int64 eventLength = 10;</code>
       *
       * <pre>
       **每个event的长度*
       * </pre>
       */
      public boolean hasEventLength() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional int64 eventLength = 10;</code>
       *
       * <pre>
       **每个event的长度*
       * </pre>
       */
      public long getEventLength() {
        return eventLength_;
      }
      /**
       * <code>optional int64 eventLength = 10;</code>
       *
       * <pre>
       **每个event的长度*
       * </pre>
       */
      public Builder setEventLength(long value) {
        bitField0_ |= 0x00000200;
        eventLength_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 eventLength = 10;</code>
       *
       * <pre>
       **每个event的长度*
       * </pre>
       */
      public Builder clearEventLength() {
        bitField0_ = (bitField0_ & ~0x00000200);
        eventLength_ = 0L;
        onChanged();
        return this;
      }

      private EventType eventType_ = EventType.UPDATE;
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE];</code>
       *
       * <pre>
       **数据变更类型*
       * </pre>
       */
      public boolean hasEventType() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE];</code>
       *
       * <pre>
       **数据变更类型*
       * </pre>
       */
      public EventType getEventType() {
        return eventType_;
      }
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE];</code>
       *
       * <pre>
       **数据变更类型*
       * </pre>
       */
      public Builder setEventType(EventType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000400;
        eventType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.EventType eventType = 11 [default = UPDATE];</code>
       *
       * <pre>
       **数据变更类型*
       * </pre>
       */
      public Builder clearEventType() {
        bitField0_ = (bitField0_ & ~0x00000400);
        eventType_ = EventType.UPDATE;
        onChanged();
        return this;
      }

      private java.util.List<Pair> props_ =
        java.util.Collections.emptyList();
      private void ensurePropsIsMutable() {
        if (!((bitField0_ & 0x00000800) == 0x00000800)) {
          props_ = new java.util.ArrayList<Pair>(props_);
          bitField0_ |= 0x00000800;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          Pair, Pair.Builder, PairOrBuilder> propsBuilder_;

      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public java.util.List<Pair> getPropsList() {
        if (propsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(props_);
        } else {
          return propsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public int getPropsCount() {
        if (propsBuilder_ == null) {
          return props_.size();
        } else {
          return propsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair getProps(int index) {
        if (propsBuilder_ == null) {
          return props_.get(index);
        } else {
          return propsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder setProps(
          int index, Pair value) {
        if (propsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePropsIsMutable();
          props_.set(index, value);
          onChanged();
        } else {
          propsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder setProps(
          int index, Pair.Builder builderForValue) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.set(index, builderForValue.build());
          onChanged();
        } else {
          propsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(Pair value) {
        if (propsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePropsIsMutable();
          props_.add(value);
          onChanged();
        } else {
          propsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(
          int index, Pair value) {
        if (propsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePropsIsMutable();
          props_.add(index, value);
          onChanged();
        } else {
          propsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(
          Pair.Builder builderForValue) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.add(builderForValue.build());
          onChanged();
        } else {
          propsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(
          int index, Pair.Builder builderForValue) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.add(index, builderForValue.build());
          onChanged();
        } else {
          propsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addAllProps(
          Iterable<? extends Pair> values) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, props_);
          onChanged();
        } else {
          propsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder clearProps() {
        if (propsBuilder_ == null) {
          props_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000800);
          onChanged();
        } else {
          propsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder removeProps(int index) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.remove(index);
          onChanged();
        } else {
          propsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair.Builder getPropsBuilder(
          int index) {
        return getPropsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public PairOrBuilder getPropsOrBuilder(
          int index) {
        if (propsBuilder_ == null) {
          return props_.get(index);  } else {
          return propsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public java.util.List<? extends PairOrBuilder>
           getPropsOrBuilderList() {
        if (propsBuilder_ != null) {
          return propsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(props_);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair.Builder addPropsBuilder() {
        return getPropsFieldBuilder().addBuilder(
            Pair.getDefaultInstance());
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair.Builder addPropsBuilder(
          int index) {
        return getPropsFieldBuilder().addBuilder(
            index, Pair.getDefaultInstance());
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 12;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public java.util.List<Pair.Builder>
           getPropsBuilderList() {
        return getPropsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          Pair, Pair.Builder, PairOrBuilder>
          getPropsFieldBuilder() {
        if (propsBuilder_ == null) {
          propsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              Pair, Pair.Builder, PairOrBuilder>(
                  props_,
                  ((bitField0_ & 0x00000800) == 0x00000800),
                  getParentForChildren(),
                  isClean());
          props_ = null;
        }
        return propsBuilder_;
      }

      private Object gtid_ = "";
      /**
       * <code>optional string gtid = 13;</code>
       *
       * <pre>
       **当前事务的gitd*
       * </pre>
       */
      public boolean hasGtid() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <code>optional string gtid = 13;</code>
       *
       * <pre>
       **当前事务的gitd*
       * </pre>
       */
      public String getGtid() {
        Object ref = gtid_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            gtid_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string gtid = 13;</code>
       *
       * <pre>
       **当前事务的gitd*
       * </pre>
       */
      public com.google.protobuf.ByteString
          getGtidBytes() {
        Object ref = gtid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          gtid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string gtid = 13;</code>
       *
       * <pre>
       **当前事务的gitd*
       * </pre>
       */
      public Builder setGtid(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00001000;
        gtid_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string gtid = 13;</code>
       *
       * <pre>
       **当前事务的gitd*
       * </pre>
       */
      public Builder clearGtid() {
        bitField0_ = (bitField0_ & ~0x00001000);
        gtid_ = getDefaultInstance().getGtid();
        onChanged();
        return this;
      }
      /**
       * <code>optional string gtid = 13;</code>
       *
       * <pre>
       **当前事务的gitd*
       * </pre>
       */
      public Builder setGtidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00001000;
        gtid_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:com.alibaba.otter.canal.protocol.Header)
    }

    static {
      defaultInstance = new Header(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:com.alibaba.otter.canal.protocol.Header)
  }

  public interface ColumnOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.Column)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional int32 index = 1;</code>
     *
     * <pre>
     **字段下标*
     * </pre>
     */
    boolean hasIndex();
    /**
     * <code>optional int32 index = 1;</code>
     *
     * <pre>
     **字段下标*
     * </pre>
     */
    int getIndex();

    /**
     * <code>optional int32 sqlType = 2;</code>
     *
     * <pre>
     **字段java中类型*
     * </pre>
     */
    boolean hasSqlType();
    /**
     * <code>optional int32 sqlType = 2;</code>
     *
     * <pre>
     **字段java中类型*
     * </pre>
     */
    int getSqlType();

    /**
     * <code>optional string name = 3;</code>
     *
     * <pre>
     **字段名称(忽略大小写)，在mysql中是没有的*
     * </pre>
     */
    boolean hasName();
    /**
     * <code>optional string name = 3;</code>
     *
     * <pre>
     **字段名称(忽略大小写)，在mysql中是没有的*
     * </pre>
     */
    String getName();
    /**
     * <code>optional string name = 3;</code>
     *
     * <pre>
     **字段名称(忽略大小写)，在mysql中是没有的*
     * </pre>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <code>optional bool isKey = 4;</code>
     *
     * <pre>
     **是否是主键*
     * </pre>
     */
    boolean hasIsKey();
    /**
     * <code>optional bool isKey = 4;</code>
     *
     * <pre>
     **是否是主键*
     * </pre>
     */
    boolean getIsKey();

    /**
     * <code>optional bool updated = 5;</code>
     *
     * <pre>
     **如果EventType=UPDATE,用于标识这个字段值是否有修改*
     * </pre>
     */
    boolean hasUpdated();
    /**
     * <code>optional bool updated = 5;</code>
     *
     * <pre>
     **如果EventType=UPDATE,用于标识这个字段值是否有修改*
     * </pre>
     */
    boolean getUpdated();

    /**
     * <code>optional bool isNull = 6 [default = false];</code>
     *
     * <pre>
     ** 标识是否为空  *
     * </pre>
     */
    boolean hasIsNull();
    /**
     * <code>optional bool isNull = 6 [default = false];</code>
     *
     * <pre>
     ** 标识是否为空  *
     * </pre>
     */
    boolean getIsNull();

    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    java.util.List<Pair>
        getPropsList();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    Pair getProps(int index);
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    int getPropsCount();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    java.util.List<? extends PairOrBuilder>
        getPropsOrBuilderList();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    PairOrBuilder getPropsOrBuilder(int index);

    /**
     * <code>optional string value = 8;</code>
     *
     * <pre>
     ** 字段值,timestamp,Datetime是一个时间格式的文本 *
     * </pre>
     */
    boolean hasValue();
    /**
     * <code>optional string value = 8;</code>
     *
     * <pre>
     ** 字段值,timestamp,Datetime是一个时间格式的文本 *
     * </pre>
     */
    String getValue();
    /**
     * <code>optional string value = 8;</code>
     *
     * <pre>
     ** 字段值,timestamp,Datetime是一个时间格式的文本 *
     * </pre>
     */
    com.google.protobuf.ByteString
        getValueBytes();

    /**
     * <code>optional int32 length = 9;</code>
     *
     * <pre>
     ** 对应数据对象原始长度 *
     * </pre>
     */
    boolean hasLength();
    /**
     * <code>optional int32 length = 9;</code>
     *
     * <pre>
     ** 对应数据对象原始长度 *
     * </pre>
     */
    int getLength();

    /**
     * <code>optional string mysqlType = 10;</code>
     *
     * <pre>
     **字段mysql类型*
     * </pre>
     */
    boolean hasMysqlType();
    /**
     * <code>optional string mysqlType = 10;</code>
     *
     * <pre>
     **字段mysql类型*
     * </pre>
     */
    String getMysqlType();
    /**
     * <code>optional string mysqlType = 10;</code>
     *
     * <pre>
     **字段mysql类型*
     * </pre>
     */
    com.google.protobuf.ByteString
        getMysqlTypeBytes();
  }
  /**
   * Protobuf type {@code com.alibaba.otter.canal.protocol.Column}
   *
   * <pre>
   **每个字段的数据结构*
   * </pre>
   */
  public static final class Column extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.Column)
      ColumnOrBuilder {
    // Use Column.newBuilder() to construct.
    private Column(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Column(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Column defaultInstance;
    public static Column getDefaultInstance() {
      return defaultInstance;
    }

    public Column getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Column(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              index_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              sqlType_ = input.readInt32();
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000004;
              name_ = bs;
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              isKey_ = input.readBool();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              updated_ = input.readBool();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              isNull_ = input.readBool();
              break;
            }
            case 58: {
              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                props_ = new java.util.ArrayList<Pair>();
                mutable_bitField0_ |= 0x00000040;
              }
              props_.add(input.readMessage(Pair.PARSER, extensionRegistry));
              break;
            }
            case 66: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000040;
              value_ = bs;
              break;
            }
            case 72: {
              bitField0_ |= 0x00000080;
              length_ = input.readInt32();
              break;
            }
            case 82: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000100;
              mysqlType_ = bs;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
          props_ = java.util.Collections.unmodifiableList(props_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_Column_descriptor;
    }

    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_Column_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              Column.class, Builder.class);
    }

    public static com.google.protobuf.Parser<Column> PARSER =
        new com.google.protobuf.AbstractParser<Column>() {
      public Column parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Column(input, extensionRegistry);
      }
    };

    @Override
    public com.google.protobuf.Parser<Column> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    public static final int INDEX_FIELD_NUMBER = 1;
    private int index_;
    /**
     * <code>optional int32 index = 1;</code>
     *
     * <pre>
     **字段下标*
     * </pre>
     */
    public boolean hasIndex() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 index = 1;</code>
     *
     * <pre>
     **字段下标*
     * </pre>
     */
    public int getIndex() {
      return index_;
    }

    public static final int SQLTYPE_FIELD_NUMBER = 2;
    private int sqlType_;
    /**
     * <code>optional int32 sqlType = 2;</code>
     *
     * <pre>
     **字段java中类型*
     * </pre>
     */
    public boolean hasSqlType() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 sqlType = 2;</code>
     *
     * <pre>
     **字段java中类型*
     * </pre>
     */
    public int getSqlType() {
      return sqlType_;
    }

    public static final int NAME_FIELD_NUMBER = 3;
    private Object name_;
    /**
     * <code>optional string name = 3;</code>
     *
     * <pre>
     **字段名称(忽略大小写)，在mysql中是没有的*
     * </pre>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string name = 3;</code>
     *
     * <pre>
     **字段名称(忽略大小写)，在mysql中是没有的*
     * </pre>
     */
    public String getName() {
      Object ref = name_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 3;</code>
     *
     * <pre>
     **字段名称(忽略大小写)，在mysql中是没有的*
     * </pre>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      Object ref = name_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ISKEY_FIELD_NUMBER = 4;
    private boolean isKey_;
    /**
     * <code>optional bool isKey = 4;</code>
     *
     * <pre>
     **是否是主键*
     * </pre>
     */
    public boolean hasIsKey() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional bool isKey = 4;</code>
     *
     * <pre>
     **是否是主键*
     * </pre>
     */
    public boolean getIsKey() {
      return isKey_;
    }

    public static final int UPDATED_FIELD_NUMBER = 5;
    private boolean updated_;
    /**
     * <code>optional bool updated = 5;</code>
     *
     * <pre>
     **如果EventType=UPDATE,用于标识这个字段值是否有修改*
     * </pre>
     */
    public boolean hasUpdated() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional bool updated = 5;</code>
     *
     * <pre>
     **如果EventType=UPDATE,用于标识这个字段值是否有修改*
     * </pre>
     */
    public boolean getUpdated() {
      return updated_;
    }

    public static final int ISNULL_FIELD_NUMBER = 6;
    private boolean isNull_;
    /**
     * <code>optional bool isNull = 6 [default = false];</code>
     *
     * <pre>
     ** 标识是否为空  *
     * </pre>
     */
    public boolean hasIsNull() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional bool isNull = 6 [default = false];</code>
     *
     * <pre>
     ** 标识是否为空  *
     * </pre>
     */
    public boolean getIsNull() {
      return isNull_;
    }

    public static final int PROPS_FIELD_NUMBER = 7;
    private java.util.List<Pair> props_;
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public java.util.List<Pair> getPropsList() {
      return props_;
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public java.util.List<? extends PairOrBuilder>
        getPropsOrBuilderList() {
      return props_;
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public int getPropsCount() {
      return props_.size();
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public Pair getProps(int index) {
      return props_.get(index);
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public PairOrBuilder getPropsOrBuilder(
        int index) {
      return props_.get(index);
    }

    public static final int VALUE_FIELD_NUMBER = 8;
    private Object value_;
    /**
     * <code>optional string value = 8;</code>
     *
     * <pre>
     ** 字段值,timestamp,Datetime是一个时间格式的文本 *
     * </pre>
     */
    public boolean hasValue() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional string value = 8;</code>
     *
     * <pre>
     ** 字段值,timestamp,Datetime是一个时间格式的文本 *
     * </pre>
     */
    public String getValue() {
      Object ref = value_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          value_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string value = 8;</code>
     *
     * <pre>
     ** 字段值,timestamp,Datetime是一个时间格式的文本 *
     * </pre>
     */
    public com.google.protobuf.ByteString
        getValueBytes() {
      Object ref = value_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        value_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int LENGTH_FIELD_NUMBER = 9;
    private int length_;
    /**
     * <code>optional int32 length = 9;</code>
     *
     * <pre>
     ** 对应数据对象原始长度 *
     * </pre>
     */
    public boolean hasLength() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional int32 length = 9;</code>
     *
     * <pre>
     ** 对应数据对象原始长度 *
     * </pre>
     */
    public int getLength() {
      return length_;
    }

    public static final int MYSQLTYPE_FIELD_NUMBER = 10;
    private Object mysqlType_;
    /**
     * <code>optional string mysqlType = 10;</code>
     *
     * <pre>
     **字段mysql类型*
     * </pre>
     */
    public boolean hasMysqlType() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional string mysqlType = 10;</code>
     *
     * <pre>
     **字段mysql类型*
     * </pre>
     */
    public String getMysqlType() {
      Object ref = mysqlType_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          mysqlType_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string mysqlType = 10;</code>
     *
     * <pre>
     **字段mysql类型*
     * </pre>
     */
    public com.google.protobuf.ByteString
        getMysqlTypeBytes() {
      Object ref = mysqlType_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        mysqlType_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      index_ = 0;
      sqlType_ = 0;
      name_ = "";
      isKey_ = false;
      updated_ = false;
      isNull_ = false;
      props_ = java.util.Collections.emptyList();
      value_ = "";
      length_ = 0;
      mysqlType_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, index_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, sqlType_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getNameBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(4, isKey_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBool(5, updated_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBool(6, isNull_);
      }
      for (int i = 0; i < props_.size(); i++) {
        output.writeMessage(7, props_.get(i));
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeBytes(8, getValueBytes());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeInt32(9, length_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeBytes(10, getMysqlTypeBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, index_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, sqlType_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getNameBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, isKey_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, updated_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, isNull_);
      }
      for (int i = 0; i < props_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, props_.get(i));
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, getValueBytes());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(9, length_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(10, getMysqlTypeBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @Override
    protected Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static Column parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Column parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Column parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Column parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Column parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static Column parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static Column parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static Column parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static Column parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static Column parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(Column prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code com.alibaba.otter.canal.protocol.Column}
     *
     * <pre>
     **每个字段的数据结构*
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.Column)
        ColumnOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_Column_descriptor;
      }

      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_Column_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Column.class, Builder.class);
      }

      // Construct using com.alibaba.otter.canal.protocol.CanalEntry.Column.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getPropsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        index_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        sqlType_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        isKey_ = false;
        bitField0_ = (bitField0_ & ~0x00000008);
        updated_ = false;
        bitField0_ = (bitField0_ & ~0x00000010);
        isNull_ = false;
        bitField0_ = (bitField0_ & ~0x00000020);
        if (propsBuilder_ == null) {
          props_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
        } else {
          propsBuilder_.clear();
        }
        value_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        length_ = 0;
        bitField0_ = (bitField0_ & ~0x00000100);
        mysqlType_ = "";
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_Column_descriptor;
      }

      public Column getDefaultInstanceForType() {
        return Column.getDefaultInstance();
      }

      public Column build() {
        Column result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public Column buildPartial() {
        Column result = new Column(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.index_ = index_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.sqlType_ = sqlType_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.isKey_ = isKey_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.updated_ = updated_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.isNull_ = isNull_;
        if (propsBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            props_ = java.util.Collections.unmodifiableList(props_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.props_ = props_;
        } else {
          result.props_ = propsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000040;
        }
        result.value_ = value_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000080;
        }
        result.length_ = length_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000100;
        }
        result.mysqlType_ = mysqlType_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof Column) {
          return mergeFrom((Column)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(Column other) {
        if (other == Column.getDefaultInstance()) return this;
        if (other.hasIndex()) {
          setIndex(other.getIndex());
        }
        if (other.hasSqlType()) {
          setSqlType(other.getSqlType());
        }
        if (other.hasName()) {
          bitField0_ |= 0x00000004;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasIsKey()) {
          setIsKey(other.getIsKey());
        }
        if (other.hasUpdated()) {
          setUpdated(other.getUpdated());
        }
        if (other.hasIsNull()) {
          setIsNull(other.getIsNull());
        }
        if (propsBuilder_ == null) {
          if (!other.props_.isEmpty()) {
            if (props_.isEmpty()) {
              props_ = other.props_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensurePropsIsMutable();
              props_.addAll(other.props_);
            }
            onChanged();
          }
        } else {
          if (!other.props_.isEmpty()) {
            if (propsBuilder_.isEmpty()) {
              propsBuilder_.dispose();
              propsBuilder_ = null;
              props_ = other.props_;
              bitField0_ = (bitField0_ & ~0x00000040);
              propsBuilder_ =
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getPropsFieldBuilder() : null;
            } else {
              propsBuilder_.addAllMessages(other.props_);
            }
          }
        }
        if (other.hasValue()) {
          bitField0_ |= 0x00000080;
          value_ = other.value_;
          onChanged();
        }
        if (other.hasLength()) {
          setLength(other.getLength());
        }
        if (other.hasMysqlType()) {
          bitField0_ |= 0x00000200;
          mysqlType_ = other.mysqlType_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Column parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (Column) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int index_ ;
      /**
       * <code>optional int32 index = 1;</code>
       *
       * <pre>
       **字段下标*
       * </pre>
       */
      public boolean hasIndex() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 index = 1;</code>
       *
       * <pre>
       **字段下标*
       * </pre>
       */
      public int getIndex() {
        return index_;
      }
      /**
       * <code>optional int32 index = 1;</code>
       *
       * <pre>
       **字段下标*
       * </pre>
       */
      public Builder setIndex(int value) {
        bitField0_ |= 0x00000001;
        index_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 index = 1;</code>
       *
       * <pre>
       **字段下标*
       * </pre>
       */
      public Builder clearIndex() {
        bitField0_ = (bitField0_ & ~0x00000001);
        index_ = 0;
        onChanged();
        return this;
      }

      private int sqlType_ ;
      /**
       * <code>optional int32 sqlType = 2;</code>
       *
       * <pre>
       **字段java中类型*
       * </pre>
       */
      public boolean hasSqlType() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 sqlType = 2;</code>
       *
       * <pre>
       **字段java中类型*
       * </pre>
       */
      public int getSqlType() {
        return sqlType_;
      }
      /**
       * <code>optional int32 sqlType = 2;</code>
       *
       * <pre>
       **字段java中类型*
       * </pre>
       */
      public Builder setSqlType(int value) {
        bitField0_ |= 0x00000002;
        sqlType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 sqlType = 2;</code>
       *
       * <pre>
       **字段java中类型*
       * </pre>
       */
      public Builder clearSqlType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        sqlType_ = 0;
        onChanged();
        return this;
      }

      private Object name_ = "";
      /**
       * <code>optional string name = 3;</code>
       *
       * <pre>
       **字段名称(忽略大小写)，在mysql中是没有的*
       * </pre>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string name = 3;</code>
       *
       * <pre>
       **字段名称(忽略大小写)，在mysql中是没有的*
       * </pre>
       */
      public String getName() {
        Object ref = name_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string name = 3;</code>
       *
       * <pre>
       **字段名称(忽略大小写)，在mysql中是没有的*
       * </pre>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 3;</code>
       *
       * <pre>
       **字段名称(忽略大小写)，在mysql中是没有的*
       * </pre>
       */
      public Builder setName(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 3;</code>
       *
       * <pre>
       **字段名称(忽略大小写)，在mysql中是没有的*
       * </pre>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000004);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 3;</code>
       *
       * <pre>
       **字段名称(忽略大小写)，在mysql中是没有的*
       * </pre>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        name_ = value;
        onChanged();
        return this;
      }

      private boolean isKey_ ;
      /**
       * <code>optional bool isKey = 4;</code>
       *
       * <pre>
       **是否是主键*
       * </pre>
       */
      public boolean hasIsKey() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional bool isKey = 4;</code>
       *
       * <pre>
       **是否是主键*
       * </pre>
       */
      public boolean getIsKey() {
        return isKey_;
      }
      /**
       * <code>optional bool isKey = 4;</code>
       *
       * <pre>
       **是否是主键*
       * </pre>
       */
      public Builder setIsKey(boolean value) {
        bitField0_ |= 0x00000008;
        isKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool isKey = 4;</code>
       *
       * <pre>
       **是否是主键*
       * </pre>
       */
      public Builder clearIsKey() {
        bitField0_ = (bitField0_ & ~0x00000008);
        isKey_ = false;
        onChanged();
        return this;
      }

      private boolean updated_ ;
      /**
       * <code>optional bool updated = 5;</code>
       *
       * <pre>
       **如果EventType=UPDATE,用于标识这个字段值是否有修改*
       * </pre>
       */
      public boolean hasUpdated() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional bool updated = 5;</code>
       *
       * <pre>
       **如果EventType=UPDATE,用于标识这个字段值是否有修改*
       * </pre>
       */
      public boolean getUpdated() {
        return updated_;
      }
      /**
       * <code>optional bool updated = 5;</code>
       *
       * <pre>
       **如果EventType=UPDATE,用于标识这个字段值是否有修改*
       * </pre>
       */
      public Builder setUpdated(boolean value) {
        bitField0_ |= 0x00000010;
        updated_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool updated = 5;</code>
       *
       * <pre>
       **如果EventType=UPDATE,用于标识这个字段值是否有修改*
       * </pre>
       */
      public Builder clearUpdated() {
        bitField0_ = (bitField0_ & ~0x00000010);
        updated_ = false;
        onChanged();
        return this;
      }

      private boolean isNull_ ;
      /**
       * <code>optional bool isNull = 6 [default = false];</code>
       *
       * <pre>
       ** 标识是否为空  *
       * </pre>
       */
      public boolean hasIsNull() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional bool isNull = 6 [default = false];</code>
       *
       * <pre>
       ** 标识是否为空  *
       * </pre>
       */
      public boolean getIsNull() {
        return isNull_;
      }
      /**
       * <code>optional bool isNull = 6 [default = false];</code>
       *
       * <pre>
       ** 标识是否为空  *
       * </pre>
       */
      public Builder setIsNull(boolean value) {
        bitField0_ |= 0x00000020;
        isNull_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool isNull = 6 [default = false];</code>
       *
       * <pre>
       ** 标识是否为空  *
       * </pre>
       */
      public Builder clearIsNull() {
        bitField0_ = (bitField0_ & ~0x00000020);
        isNull_ = false;
        onChanged();
        return this;
      }

      private java.util.List<Pair> props_ =
        java.util.Collections.emptyList();
      private void ensurePropsIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          props_ = new java.util.ArrayList<Pair>(props_);
          bitField0_ |= 0x00000040;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          Pair, Pair.Builder, PairOrBuilder> propsBuilder_;

      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public java.util.List<Pair> getPropsList() {
        if (propsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(props_);
        } else {
          return propsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public int getPropsCount() {
        if (propsBuilder_ == null) {
          return props_.size();
        } else {
          return propsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair getProps(int index) {
        if (propsBuilder_ == null) {
          return props_.get(index);
        } else {
          return propsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder setProps(
          int index, Pair value) {
        if (propsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePropsIsMutable();
          props_.set(index, value);
          onChanged();
        } else {
          propsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder setProps(
          int index, Pair.Builder builderForValue) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.set(index, builderForValue.build());
          onChanged();
        } else {
          propsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(Pair value) {
        if (propsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePropsIsMutable();
          props_.add(value);
          onChanged();
        } else {
          propsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(
          int index, Pair value) {
        if (propsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePropsIsMutable();
          props_.add(index, value);
          onChanged();
        } else {
          propsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(
          Pair.Builder builderForValue) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.add(builderForValue.build());
          onChanged();
        } else {
          propsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(
          int index, Pair.Builder builderForValue) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.add(index, builderForValue.build());
          onChanged();
        } else {
          propsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addAllProps(
          Iterable<? extends Pair> values) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, props_);
          onChanged();
        } else {
          propsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder clearProps() {
        if (propsBuilder_ == null) {
          props_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          propsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder removeProps(int index) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.remove(index);
          onChanged();
        } else {
          propsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair.Builder getPropsBuilder(
          int index) {
        return getPropsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public PairOrBuilder getPropsOrBuilder(
          int index) {
        if (propsBuilder_ == null) {
          return props_.get(index);  } else {
          return propsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public java.util.List<? extends PairOrBuilder>
           getPropsOrBuilderList() {
        if (propsBuilder_ != null) {
          return propsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(props_);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair.Builder addPropsBuilder() {
        return getPropsFieldBuilder().addBuilder(
            Pair.getDefaultInstance());
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair.Builder addPropsBuilder(
          int index) {
        return getPropsFieldBuilder().addBuilder(
            index, Pair.getDefaultInstance());
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 7;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public java.util.List<Pair.Builder>
           getPropsBuilderList() {
        return getPropsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          Pair, Pair.Builder, PairOrBuilder>
          getPropsFieldBuilder() {
        if (propsBuilder_ == null) {
          propsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              Pair, Pair.Builder, PairOrBuilder>(
                  props_,
                  ((bitField0_ & 0x00000040) == 0x00000040),
                  getParentForChildren(),
                  isClean());
          props_ = null;
        }
        return propsBuilder_;
      }

      private Object value_ = "";
      /**
       * <code>optional string value = 8;</code>
       *
       * <pre>
       ** 字段值,timestamp,Datetime是一个时间格式的文本 *
       * </pre>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional string value = 8;</code>
       *
       * <pre>
       ** 字段值,timestamp,Datetime是一个时间格式的文本 *
       * </pre>
       */
      public String getValue() {
        Object ref = value_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            value_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string value = 8;</code>
       *
       * <pre>
       ** 字段值,timestamp,Datetime是一个时间格式的文本 *
       * </pre>
       */
      public com.google.protobuf.ByteString
          getValueBytes() {
        Object ref = value_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          value_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string value = 8;</code>
       *
       * <pre>
       ** 字段值,timestamp,Datetime是一个时间格式的文本 *
       * </pre>
       */
      public Builder setValue(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string value = 8;</code>
       *
       * <pre>
       ** 字段值,timestamp,Datetime是一个时间格式的文本 *
       * </pre>
       */
      public Builder clearValue() {
        bitField0_ = (bitField0_ & ~0x00000080);
        value_ = getDefaultInstance().getValue();
        onChanged();
        return this;
      }
      /**
       * <code>optional string value = 8;</code>
       *
       * <pre>
       ** 字段值,timestamp,Datetime是一个时间格式的文本 *
       * </pre>
       */
      public Builder setValueBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        value_ = value;
        onChanged();
        return this;
      }

      private int length_ ;
      /**
       * <code>optional int32 length = 9;</code>
       *
       * <pre>
       ** 对应数据对象原始长度 *
       * </pre>
       */
      public boolean hasLength() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional int32 length = 9;</code>
       *
       * <pre>
       ** 对应数据对象原始长度 *
       * </pre>
       */
      public int getLength() {
        return length_;
      }
      /**
       * <code>optional int32 length = 9;</code>
       *
       * <pre>
       ** 对应数据对象原始长度 *
       * </pre>
       */
      public Builder setLength(int value) {
        bitField0_ |= 0x00000100;
        length_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 length = 9;</code>
       *
       * <pre>
       ** 对应数据对象原始长度 *
       * </pre>
       */
      public Builder clearLength() {
        bitField0_ = (bitField0_ & ~0x00000100);
        length_ = 0;
        onChanged();
        return this;
      }

      private Object mysqlType_ = "";
      /**
       * <code>optional string mysqlType = 10;</code>
       *
       * <pre>
       **字段mysql类型*
       * </pre>
       */
      public boolean hasMysqlType() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional string mysqlType = 10;</code>
       *
       * <pre>
       **字段mysql类型*
       * </pre>
       */
      public String getMysqlType() {
        Object ref = mysqlType_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            mysqlType_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string mysqlType = 10;</code>
       *
       * <pre>
       **字段mysql类型*
       * </pre>
       */
      public com.google.protobuf.ByteString
          getMysqlTypeBytes() {
        Object ref = mysqlType_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          mysqlType_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string mysqlType = 10;</code>
       *
       * <pre>
       **字段mysql类型*
       * </pre>
       */
      public Builder setMysqlType(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        mysqlType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string mysqlType = 10;</code>
       *
       * <pre>
       **字段mysql类型*
       * </pre>
       */
      public Builder clearMysqlType() {
        bitField0_ = (bitField0_ & ~0x00000200);
        mysqlType_ = getDefaultInstance().getMysqlType();
        onChanged();
        return this;
      }
      /**
       * <code>optional string mysqlType = 10;</code>
       *
       * <pre>
       **字段mysql类型*
       * </pre>
       */
      public Builder setMysqlTypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        mysqlType_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:com.alibaba.otter.canal.protocol.Column)
    }

    static {
      defaultInstance = new Column(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:com.alibaba.otter.canal.protocol.Column)
  }

  public interface RowDataOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.RowData)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
     *
     * <pre>
     ** 字段信息，增量数据(修改前,删除前) *
     * </pre>
     */
    java.util.List<Column>
        getBeforeColumnsList();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
     *
     * <pre>
     ** 字段信息，增量数据(修改前,删除前) *
     * </pre>
     */
    Column getBeforeColumns(int index);
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
     *
     * <pre>
     ** 字段信息，增量数据(修改前,删除前) *
     * </pre>
     */
    int getBeforeColumnsCount();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
     *
     * <pre>
     ** 字段信息，增量数据(修改前,删除前) *
     * </pre>
     */
    java.util.List<? extends ColumnOrBuilder>
        getBeforeColumnsOrBuilderList();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
     *
     * <pre>
     ** 字段信息，增量数据(修改前,删除前) *
     * </pre>
     */
    ColumnOrBuilder getBeforeColumnsOrBuilder(int index);

    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
     *
     * <pre>
     ** 字段信息，增量数据(修改后,新增后)  *
     * </pre>
     */
    java.util.List<Column>
        getAfterColumnsList();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
     *
     * <pre>
     ** 字段信息，增量数据(修改后,新增后)  *
     * </pre>
     */
    Column getAfterColumns(int index);
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
     *
     * <pre>
     ** 字段信息，增量数据(修改后,新增后)  *
     * </pre>
     */
    int getAfterColumnsCount();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
     *
     * <pre>
     ** 字段信息，增量数据(修改后,新增后)  *
     * </pre>
     */
    java.util.List<? extends ColumnOrBuilder>
        getAfterColumnsOrBuilderList();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
     *
     * <pre>
     ** 字段信息，增量数据(修改后,新增后)  *
     * </pre>
     */
    ColumnOrBuilder getAfterColumnsOrBuilder(int index);

    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    java.util.List<Pair>
        getPropsList();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    Pair getProps(int index);
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    int getPropsCount();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    java.util.List<? extends PairOrBuilder>
        getPropsOrBuilderList();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    PairOrBuilder getPropsOrBuilder(int index);
  }
  /**
   * Protobuf type {@code com.alibaba.otter.canal.protocol.RowData}
   */
  public static final class RowData extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.RowData)
      RowDataOrBuilder {
    // Use RowData.newBuilder() to construct.
    private RowData(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private RowData(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final RowData defaultInstance;
    public static RowData getDefaultInstance() {
      return defaultInstance;
    }

    public RowData getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private RowData(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                beforeColumns_ = new java.util.ArrayList<Column>();
                mutable_bitField0_ |= 0x00000001;
              }
              beforeColumns_.add(input.readMessage(Column.PARSER, extensionRegistry));
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                afterColumns_ = new java.util.ArrayList<Column>();
                mutable_bitField0_ |= 0x00000002;
              }
              afterColumns_.add(input.readMessage(Column.PARSER, extensionRegistry));
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                props_ = new java.util.ArrayList<Pair>();
                mutable_bitField0_ |= 0x00000004;
              }
              props_.add(input.readMessage(Pair.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          beforeColumns_ = java.util.Collections.unmodifiableList(beforeColumns_);
        }
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          afterColumns_ = java.util.Collections.unmodifiableList(afterColumns_);
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          props_ = java.util.Collections.unmodifiableList(props_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_RowData_descriptor;
    }

    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_RowData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              RowData.class, Builder.class);
    }

    public static com.google.protobuf.Parser<RowData> PARSER =
        new com.google.protobuf.AbstractParser<RowData>() {
      public RowData parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RowData(input, extensionRegistry);
      }
    };

    @Override
    public com.google.protobuf.Parser<RowData> getParserForType() {
      return PARSER;
    }

    public static final int BEFORECOLUMNS_FIELD_NUMBER = 1;
    private java.util.List<Column> beforeColumns_;
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
     *
     * <pre>
     ** 字段信息，增量数据(修改前,删除前) *
     * </pre>
     */
    public java.util.List<Column> getBeforeColumnsList() {
      return beforeColumns_;
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
     *
     * <pre>
     ** 字段信息，增量数据(修改前,删除前) *
     * </pre>
     */
    public java.util.List<? extends ColumnOrBuilder>
        getBeforeColumnsOrBuilderList() {
      return beforeColumns_;
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
     *
     * <pre>
     ** 字段信息，增量数据(修改前,删除前) *
     * </pre>
     */
    public int getBeforeColumnsCount() {
      return beforeColumns_.size();
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
     *
     * <pre>
     ** 字段信息，增量数据(修改前,删除前) *
     * </pre>
     */
    public Column getBeforeColumns(int index) {
      return beforeColumns_.get(index);
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
     *
     * <pre>
     ** 字段信息，增量数据(修改前,删除前) *
     * </pre>
     */
    public ColumnOrBuilder getBeforeColumnsOrBuilder(
        int index) {
      return beforeColumns_.get(index);
    }

    public static final int AFTERCOLUMNS_FIELD_NUMBER = 2;
    private java.util.List<Column> afterColumns_;
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
     *
     * <pre>
     ** 字段信息，增量数据(修改后,新增后)  *
     * </pre>
     */
    public java.util.List<Column> getAfterColumnsList() {
      return afterColumns_;
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
     *
     * <pre>
     ** 字段信息，增量数据(修改后,新增后)  *
     * </pre>
     */
    public java.util.List<? extends ColumnOrBuilder>
        getAfterColumnsOrBuilderList() {
      return afterColumns_;
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
     *
     * <pre>
     ** 字段信息，增量数据(修改后,新增后)  *
     * </pre>
     */
    public int getAfterColumnsCount() {
      return afterColumns_.size();
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
     *
     * <pre>
     ** 字段信息，增量数据(修改后,新增后)  *
     * </pre>
     */
    public Column getAfterColumns(int index) {
      return afterColumns_.get(index);
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
     *
     * <pre>
     ** 字段信息，增量数据(修改后,新增后)  *
     * </pre>
     */
    public ColumnOrBuilder getAfterColumnsOrBuilder(
        int index) {
      return afterColumns_.get(index);
    }

    public static final int PROPS_FIELD_NUMBER = 3;
    private java.util.List<Pair> props_;
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public java.util.List<Pair> getPropsList() {
      return props_;
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public java.util.List<? extends PairOrBuilder>
        getPropsOrBuilderList() {
      return props_;
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public int getPropsCount() {
      return props_.size();
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public Pair getProps(int index) {
      return props_.get(index);
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public PairOrBuilder getPropsOrBuilder(
        int index) {
      return props_.get(index);
    }

    private void initFields() {
      beforeColumns_ = java.util.Collections.emptyList();
      afterColumns_ = java.util.Collections.emptyList();
      props_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < beforeColumns_.size(); i++) {
        output.writeMessage(1, beforeColumns_.get(i));
      }
      for (int i = 0; i < afterColumns_.size(); i++) {
        output.writeMessage(2, afterColumns_.get(i));
      }
      for (int i = 0; i < props_.size(); i++) {
        output.writeMessage(3, props_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < beforeColumns_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, beforeColumns_.get(i));
      }
      for (int i = 0; i < afterColumns_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, afterColumns_.get(i));
      }
      for (int i = 0; i < props_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, props_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @Override
    protected Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static RowData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RowData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RowData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RowData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RowData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static RowData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static RowData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static RowData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static RowData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static RowData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(RowData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code com.alibaba.otter.canal.protocol.RowData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.RowData)
        RowDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_RowData_descriptor;
      }

      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_RowData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                RowData.class, Builder.class);
      }

      // Construct using com.alibaba.otter.canal.protocol.CanalEntry.RowData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getBeforeColumnsFieldBuilder();
          getAfterColumnsFieldBuilder();
          getPropsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (beforeColumnsBuilder_ == null) {
          beforeColumns_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          beforeColumnsBuilder_.clear();
        }
        if (afterColumnsBuilder_ == null) {
          afterColumns_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          afterColumnsBuilder_.clear();
        }
        if (propsBuilder_ == null) {
          props_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          propsBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_RowData_descriptor;
      }

      public RowData getDefaultInstanceForType() {
        return RowData.getDefaultInstance();
      }

      public RowData build() {
        RowData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public RowData buildPartial() {
        RowData result = new RowData(this);
        int from_bitField0_ = bitField0_;
        if (beforeColumnsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            beforeColumns_ = java.util.Collections.unmodifiableList(beforeColumns_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.beforeColumns_ = beforeColumns_;
        } else {
          result.beforeColumns_ = beforeColumnsBuilder_.build();
        }
        if (afterColumnsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            afterColumns_ = java.util.Collections.unmodifiableList(afterColumns_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.afterColumns_ = afterColumns_;
        } else {
          result.afterColumns_ = afterColumnsBuilder_.build();
        }
        if (propsBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            props_ = java.util.Collections.unmodifiableList(props_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.props_ = props_;
        } else {
          result.props_ = propsBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof RowData) {
          return mergeFrom((RowData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(RowData other) {
        if (other == RowData.getDefaultInstance()) return this;
        if (beforeColumnsBuilder_ == null) {
          if (!other.beforeColumns_.isEmpty()) {
            if (beforeColumns_.isEmpty()) {
              beforeColumns_ = other.beforeColumns_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureBeforeColumnsIsMutable();
              beforeColumns_.addAll(other.beforeColumns_);
            }
            onChanged();
          }
        } else {
          if (!other.beforeColumns_.isEmpty()) {
            if (beforeColumnsBuilder_.isEmpty()) {
              beforeColumnsBuilder_.dispose();
              beforeColumnsBuilder_ = null;
              beforeColumns_ = other.beforeColumns_;
              bitField0_ = (bitField0_ & ~0x00000001);
              beforeColumnsBuilder_ =
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getBeforeColumnsFieldBuilder() : null;
            } else {
              beforeColumnsBuilder_.addAllMessages(other.beforeColumns_);
            }
          }
        }
        if (afterColumnsBuilder_ == null) {
          if (!other.afterColumns_.isEmpty()) {
            if (afterColumns_.isEmpty()) {
              afterColumns_ = other.afterColumns_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureAfterColumnsIsMutable();
              afterColumns_.addAll(other.afterColumns_);
            }
            onChanged();
          }
        } else {
          if (!other.afterColumns_.isEmpty()) {
            if (afterColumnsBuilder_.isEmpty()) {
              afterColumnsBuilder_.dispose();
              afterColumnsBuilder_ = null;
              afterColumns_ = other.afterColumns_;
              bitField0_ = (bitField0_ & ~0x00000002);
              afterColumnsBuilder_ =
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getAfterColumnsFieldBuilder() : null;
            } else {
              afterColumnsBuilder_.addAllMessages(other.afterColumns_);
            }
          }
        }
        if (propsBuilder_ == null) {
          if (!other.props_.isEmpty()) {
            if (props_.isEmpty()) {
              props_ = other.props_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensurePropsIsMutable();
              props_.addAll(other.props_);
            }
            onChanged();
          }
        } else {
          if (!other.props_.isEmpty()) {
            if (propsBuilder_.isEmpty()) {
              propsBuilder_.dispose();
              propsBuilder_ = null;
              props_ = other.props_;
              bitField0_ = (bitField0_ & ~0x00000004);
              propsBuilder_ =
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getPropsFieldBuilder() : null;
            } else {
              propsBuilder_.addAllMessages(other.props_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        RowData parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (RowData) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<Column> beforeColumns_ =
        java.util.Collections.emptyList();
      private void ensureBeforeColumnsIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          beforeColumns_ = new java.util.ArrayList<Column>(beforeColumns_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          Column, Column.Builder, ColumnOrBuilder> beforeColumnsBuilder_;

      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改前,删除前) *
       * </pre>
       */
      public java.util.List<Column> getBeforeColumnsList() {
        if (beforeColumnsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(beforeColumns_);
        } else {
          return beforeColumnsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改前,删除前) *
       * </pre>
       */
      public int getBeforeColumnsCount() {
        if (beforeColumnsBuilder_ == null) {
          return beforeColumns_.size();
        } else {
          return beforeColumnsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改前,删除前) *
       * </pre>
       */
      public Column getBeforeColumns(int index) {
        if (beforeColumnsBuilder_ == null) {
          return beforeColumns_.get(index);
        } else {
          return beforeColumnsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改前,删除前) *
       * </pre>
       */
      public Builder setBeforeColumns(
          int index, Column value) {
        if (beforeColumnsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureBeforeColumnsIsMutable();
          beforeColumns_.set(index, value);
          onChanged();
        } else {
          beforeColumnsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改前,删除前) *
       * </pre>
       */
      public Builder setBeforeColumns(
          int index, Column.Builder builderForValue) {
        if (beforeColumnsBuilder_ == null) {
          ensureBeforeColumnsIsMutable();
          beforeColumns_.set(index, builderForValue.build());
          onChanged();
        } else {
          beforeColumnsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改前,删除前) *
       * </pre>
       */
      public Builder addBeforeColumns(Column value) {
        if (beforeColumnsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureBeforeColumnsIsMutable();
          beforeColumns_.add(value);
          onChanged();
        } else {
          beforeColumnsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改前,删除前) *
       * </pre>
       */
      public Builder addBeforeColumns(
          int index, Column value) {
        if (beforeColumnsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureBeforeColumnsIsMutable();
          beforeColumns_.add(index, value);
          onChanged();
        } else {
          beforeColumnsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改前,删除前) *
       * </pre>
       */
      public Builder addBeforeColumns(
          Column.Builder builderForValue) {
        if (beforeColumnsBuilder_ == null) {
          ensureBeforeColumnsIsMutable();
          beforeColumns_.add(builderForValue.build());
          onChanged();
        } else {
          beforeColumnsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改前,删除前) *
       * </pre>
       */
      public Builder addBeforeColumns(
          int index, Column.Builder builderForValue) {
        if (beforeColumnsBuilder_ == null) {
          ensureBeforeColumnsIsMutable();
          beforeColumns_.add(index, builderForValue.build());
          onChanged();
        } else {
          beforeColumnsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改前,删除前) *
       * </pre>
       */
      public Builder addAllBeforeColumns(
          Iterable<? extends Column> values) {
        if (beforeColumnsBuilder_ == null) {
          ensureBeforeColumnsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, beforeColumns_);
          onChanged();
        } else {
          beforeColumnsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改前,删除前) *
       * </pre>
       */
      public Builder clearBeforeColumns() {
        if (beforeColumnsBuilder_ == null) {
          beforeColumns_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          beforeColumnsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改前,删除前) *
       * </pre>
       */
      public Builder removeBeforeColumns(int index) {
        if (beforeColumnsBuilder_ == null) {
          ensureBeforeColumnsIsMutable();
          beforeColumns_.remove(index);
          onChanged();
        } else {
          beforeColumnsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改前,删除前) *
       * </pre>
       */
      public Column.Builder getBeforeColumnsBuilder(
          int index) {
        return getBeforeColumnsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改前,删除前) *
       * </pre>
       */
      public ColumnOrBuilder getBeforeColumnsOrBuilder(
          int index) {
        if (beforeColumnsBuilder_ == null) {
          return beforeColumns_.get(index);  } else {
          return beforeColumnsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改前,删除前) *
       * </pre>
       */
      public java.util.List<? extends ColumnOrBuilder>
           getBeforeColumnsOrBuilderList() {
        if (beforeColumnsBuilder_ != null) {
          return beforeColumnsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(beforeColumns_);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改前,删除前) *
       * </pre>
       */
      public Column.Builder addBeforeColumnsBuilder() {
        return getBeforeColumnsFieldBuilder().addBuilder(
            Column.getDefaultInstance());
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改前,删除前) *
       * </pre>
       */
      public Column.Builder addBeforeColumnsBuilder(
          int index) {
        return getBeforeColumnsFieldBuilder().addBuilder(
            index, Column.getDefaultInstance());
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column beforeColumns = 1;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改前,删除前) *
       * </pre>
       */
      public java.util.List<Column.Builder>
           getBeforeColumnsBuilderList() {
        return getBeforeColumnsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          Column, Column.Builder, ColumnOrBuilder>
          getBeforeColumnsFieldBuilder() {
        if (beforeColumnsBuilder_ == null) {
          beforeColumnsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              Column, Column.Builder, ColumnOrBuilder>(
                  beforeColumns_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          beforeColumns_ = null;
        }
        return beforeColumnsBuilder_;
      }

      private java.util.List<Column> afterColumns_ =
        java.util.Collections.emptyList();
      private void ensureAfterColumnsIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          afterColumns_ = new java.util.ArrayList<Column>(afterColumns_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          Column, Column.Builder, ColumnOrBuilder> afterColumnsBuilder_;

      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改后,新增后)  *
       * </pre>
       */
      public java.util.List<Column> getAfterColumnsList() {
        if (afterColumnsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(afterColumns_);
        } else {
          return afterColumnsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改后,新增后)  *
       * </pre>
       */
      public int getAfterColumnsCount() {
        if (afterColumnsBuilder_ == null) {
          return afterColumns_.size();
        } else {
          return afterColumnsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改后,新增后)  *
       * </pre>
       */
      public Column getAfterColumns(int index) {
        if (afterColumnsBuilder_ == null) {
          return afterColumns_.get(index);
        } else {
          return afterColumnsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改后,新增后)  *
       * </pre>
       */
      public Builder setAfterColumns(
          int index, Column value) {
        if (afterColumnsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAfterColumnsIsMutable();
          afterColumns_.set(index, value);
          onChanged();
        } else {
          afterColumnsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改后,新增后)  *
       * </pre>
       */
      public Builder setAfterColumns(
          int index, Column.Builder builderForValue) {
        if (afterColumnsBuilder_ == null) {
          ensureAfterColumnsIsMutable();
          afterColumns_.set(index, builderForValue.build());
          onChanged();
        } else {
          afterColumnsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改后,新增后)  *
       * </pre>
       */
      public Builder addAfterColumns(Column value) {
        if (afterColumnsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAfterColumnsIsMutable();
          afterColumns_.add(value);
          onChanged();
        } else {
          afterColumnsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改后,新增后)  *
       * </pre>
       */
      public Builder addAfterColumns(
          int index, Column value) {
        if (afterColumnsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAfterColumnsIsMutable();
          afterColumns_.add(index, value);
          onChanged();
        } else {
          afterColumnsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改后,新增后)  *
       * </pre>
       */
      public Builder addAfterColumns(
          Column.Builder builderForValue) {
        if (afterColumnsBuilder_ == null) {
          ensureAfterColumnsIsMutable();
          afterColumns_.add(builderForValue.build());
          onChanged();
        } else {
          afterColumnsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改后,新增后)  *
       * </pre>
       */
      public Builder addAfterColumns(
          int index, Column.Builder builderForValue) {
        if (afterColumnsBuilder_ == null) {
          ensureAfterColumnsIsMutable();
          afterColumns_.add(index, builderForValue.build());
          onChanged();
        } else {
          afterColumnsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改后,新增后)  *
       * </pre>
       */
      public Builder addAllAfterColumns(
          Iterable<? extends Column> values) {
        if (afterColumnsBuilder_ == null) {
          ensureAfterColumnsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, afterColumns_);
          onChanged();
        } else {
          afterColumnsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改后,新增后)  *
       * </pre>
       */
      public Builder clearAfterColumns() {
        if (afterColumnsBuilder_ == null) {
          afterColumns_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          afterColumnsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改后,新增后)  *
       * </pre>
       */
      public Builder removeAfterColumns(int index) {
        if (afterColumnsBuilder_ == null) {
          ensureAfterColumnsIsMutable();
          afterColumns_.remove(index);
          onChanged();
        } else {
          afterColumnsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改后,新增后)  *
       * </pre>
       */
      public Column.Builder getAfterColumnsBuilder(
          int index) {
        return getAfterColumnsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改后,新增后)  *
       * </pre>
       */
      public ColumnOrBuilder getAfterColumnsOrBuilder(
          int index) {
        if (afterColumnsBuilder_ == null) {
          return afterColumns_.get(index);  } else {
          return afterColumnsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改后,新增后)  *
       * </pre>
       */
      public java.util.List<? extends ColumnOrBuilder>
           getAfterColumnsOrBuilderList() {
        if (afterColumnsBuilder_ != null) {
          return afterColumnsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(afterColumns_);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改后,新增后)  *
       * </pre>
       */
      public Column.Builder addAfterColumnsBuilder() {
        return getAfterColumnsFieldBuilder().addBuilder(
            Column.getDefaultInstance());
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改后,新增后)  *
       * </pre>
       */
      public Column.Builder addAfterColumnsBuilder(
          int index) {
        return getAfterColumnsFieldBuilder().addBuilder(
            index, Column.getDefaultInstance());
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Column afterColumns = 2;</code>
       *
       * <pre>
       ** 字段信息，增量数据(修改后,新增后)  *
       * </pre>
       */
      public java.util.List<Column.Builder>
           getAfterColumnsBuilderList() {
        return getAfterColumnsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          Column, Column.Builder, ColumnOrBuilder>
          getAfterColumnsFieldBuilder() {
        if (afterColumnsBuilder_ == null) {
          afterColumnsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              Column, Column.Builder, ColumnOrBuilder>(
                  afterColumns_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          afterColumns_ = null;
        }
        return afterColumnsBuilder_;
      }

      private java.util.List<Pair> props_ =
        java.util.Collections.emptyList();
      private void ensurePropsIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          props_ = new java.util.ArrayList<Pair>(props_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          Pair, Pair.Builder, PairOrBuilder> propsBuilder_;

      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public java.util.List<Pair> getPropsList() {
        if (propsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(props_);
        } else {
          return propsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public int getPropsCount() {
        if (propsBuilder_ == null) {
          return props_.size();
        } else {
          return propsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair getProps(int index) {
        if (propsBuilder_ == null) {
          return props_.get(index);
        } else {
          return propsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder setProps(
          int index, Pair value) {
        if (propsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePropsIsMutable();
          props_.set(index, value);
          onChanged();
        } else {
          propsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder setProps(
          int index, Pair.Builder builderForValue) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.set(index, builderForValue.build());
          onChanged();
        } else {
          propsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(Pair value) {
        if (propsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePropsIsMutable();
          props_.add(value);
          onChanged();
        } else {
          propsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(
          int index, Pair value) {
        if (propsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePropsIsMutable();
          props_.add(index, value);
          onChanged();
        } else {
          propsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(
          Pair.Builder builderForValue) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.add(builderForValue.build());
          onChanged();
        } else {
          propsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(
          int index, Pair.Builder builderForValue) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.add(index, builderForValue.build());
          onChanged();
        } else {
          propsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addAllProps(
          Iterable<? extends Pair> values) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, props_);
          onChanged();
        } else {
          propsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder clearProps() {
        if (propsBuilder_ == null) {
          props_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          propsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder removeProps(int index) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.remove(index);
          onChanged();
        } else {
          propsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair.Builder getPropsBuilder(
          int index) {
        return getPropsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public PairOrBuilder getPropsOrBuilder(
          int index) {
        if (propsBuilder_ == null) {
          return props_.get(index);  } else {
          return propsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public java.util.List<? extends PairOrBuilder>
           getPropsOrBuilderList() {
        if (propsBuilder_ != null) {
          return propsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(props_);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair.Builder addPropsBuilder() {
        return getPropsFieldBuilder().addBuilder(
            Pair.getDefaultInstance());
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair.Builder addPropsBuilder(
          int index) {
        return getPropsFieldBuilder().addBuilder(
            index, Pair.getDefaultInstance());
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public java.util.List<Pair.Builder>
           getPropsBuilderList() {
        return getPropsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          Pair, Pair.Builder, PairOrBuilder>
          getPropsFieldBuilder() {
        if (propsBuilder_ == null) {
          propsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              Pair, Pair.Builder, PairOrBuilder>(
                  props_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          props_ = null;
        }
        return propsBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:com.alibaba.otter.canal.protocol.RowData)
    }

    static {
      defaultInstance = new RowData(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:com.alibaba.otter.canal.protocol.RowData)
  }

  public interface RowChangeOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.RowChange)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional int64 tableId = 1;</code>
     *
     * <pre>
     **tableId,由数据库产生*
     * </pre>
     */
    boolean hasTableId();
    /**
     * <code>optional int64 tableId = 1;</code>
     *
     * <pre>
     **tableId,由数据库产生*
     * </pre>
     */
    long getTableId();

    /**
     * <code>optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE];</code>
     *
     * <pre>
     **数据变更类型*
     * </pre>
     */
    boolean hasEventType();
    /**
     * <code>optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE];</code>
     *
     * <pre>
     **数据变更类型*
     * </pre>
     */
    EventType getEventType();

    /**
     * <code>optional bool isDdl = 10 [default = false];</code>
     *
     * <pre>
     ** 标识是否是ddl语句  *
     * </pre>
     */
    boolean hasIsDdl();
    /**
     * <code>optional bool isDdl = 10 [default = false];</code>
     *
     * <pre>
     ** 标识是否是ddl语句  *
     * </pre>
     */
    boolean getIsDdl();

    /**
     * <code>optional string sql = 11;</code>
     *
     * <pre>
     ** ddl/query的sql语句  *
     * </pre>
     */
    boolean hasSql();
    /**
     * <code>optional string sql = 11;</code>
     *
     * <pre>
     ** ddl/query的sql语句  *
     * </pre>
     */
    String getSql();
    /**
     * <code>optional string sql = 11;</code>
     *
     * <pre>
     ** ddl/query的sql语句  *
     * </pre>
     */
    com.google.protobuf.ByteString
        getSqlBytes();

    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
     *
     * <pre>
     ** 一次数据库变更可能存在多行  *
     * </pre>
     */
    java.util.List<RowData>
        getRowDatasList();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
     *
     * <pre>
     ** 一次数据库变更可能存在多行  *
     * </pre>
     */
    RowData getRowDatas(int index);
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
     *
     * <pre>
     ** 一次数据库变更可能存在多行  *
     * </pre>
     */
    int getRowDatasCount();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
     *
     * <pre>
     ** 一次数据库变更可能存在多行  *
     * </pre>
     */
    java.util.List<? extends RowDataOrBuilder>
        getRowDatasOrBuilderList();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
     *
     * <pre>
     ** 一次数据库变更可能存在多行  *
     * </pre>
     */
    RowDataOrBuilder getRowDatasOrBuilder(int index);

    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    java.util.List<Pair>
        getPropsList();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    Pair getProps(int index);
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    int getPropsCount();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    java.util.List<? extends PairOrBuilder>
        getPropsOrBuilderList();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    PairOrBuilder getPropsOrBuilder(int index);

    /**
     * <code>optional string ddlSchemaName = 14;</code>
     *
     * <pre>
     ** ddl/query的schemaName，会存在跨库ddl，需要保留执行ddl的当前schemaName  *
     * </pre>
     */
    boolean hasDdlSchemaName();
    /**
     * <code>optional string ddlSchemaName = 14;</code>
     *
     * <pre>
     ** ddl/query的schemaName，会存在跨库ddl，需要保留执行ddl的当前schemaName  *
     * </pre>
     */
    String getDdlSchemaName();
    /**
     * <code>optional string ddlSchemaName = 14;</code>
     *
     * <pre>
     ** ddl/query的schemaName，会存在跨库ddl，需要保留执行ddl的当前schemaName  *
     * </pre>
     */
    com.google.protobuf.ByteString
        getDdlSchemaNameBytes();
  }
  /**
   * Protobuf type {@code com.alibaba.otter.canal.protocol.RowChange}
   *
   * <pre>
   **message row 每行变更数据的数据结构*
   * </pre>
   */
  public static final class RowChange extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.RowChange)
      RowChangeOrBuilder {
    // Use RowChange.newBuilder() to construct.
    private RowChange(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private RowChange(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final RowChange defaultInstance;
    public static RowChange getDefaultInstance() {
      return defaultInstance;
    }

    public RowChange getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private RowChange(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              tableId_ = input.readInt64();
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
              EventType value = EventType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                eventType_ = value;
              }
              break;
            }
            case 80: {
              bitField0_ |= 0x00000004;
              isDdl_ = input.readBool();
              break;
            }
            case 90: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000008;
              sql_ = bs;
              break;
            }
            case 98: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                rowDatas_ = new java.util.ArrayList<RowData>();
                mutable_bitField0_ |= 0x00000010;
              }
              rowDatas_.add(input.readMessage(RowData.PARSER, extensionRegistry));
              break;
            }
            case 106: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                props_ = new java.util.ArrayList<Pair>();
                mutable_bitField0_ |= 0x00000020;
              }
              props_.add(input.readMessage(Pair.PARSER, extensionRegistry));
              break;
            }
            case 114: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000010;
              ddlSchemaName_ = bs;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          rowDatas_ = java.util.Collections.unmodifiableList(rowDatas_);
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          props_ = java.util.Collections.unmodifiableList(props_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_RowChange_descriptor;
    }

    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_RowChange_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              RowChange.class, Builder.class);
    }

    public static com.google.protobuf.Parser<RowChange> PARSER =
        new com.google.protobuf.AbstractParser<RowChange>() {
      public RowChange parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RowChange(input, extensionRegistry);
      }
    };

    @Override
    public com.google.protobuf.Parser<RowChange> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    public static final int TABLEID_FIELD_NUMBER = 1;
    private long tableId_;
    /**
     * <code>optional int64 tableId = 1;</code>
     *
     * <pre>
     **tableId,由数据库产生*
     * </pre>
     */
    public boolean hasTableId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 tableId = 1;</code>
     *
     * <pre>
     **tableId,由数据库产生*
     * </pre>
     */
    public long getTableId() {
      return tableId_;
    }

    public static final int EVENTTYPE_FIELD_NUMBER = 2;
    private EventType eventType_;
    /**
     * <code>optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE];</code>
     *
     * <pre>
     **数据变更类型*
     * </pre>
     */
    public boolean hasEventType() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE];</code>
     *
     * <pre>
     **数据变更类型*
     * </pre>
     */
    public EventType getEventType() {
      return eventType_;
    }

    public static final int ISDDL_FIELD_NUMBER = 10;
    private boolean isDdl_;
    /**
     * <code>optional bool isDdl = 10 [default = false];</code>
     *
     * <pre>
     ** 标识是否是ddl语句  *
     * </pre>
     */
    public boolean hasIsDdl() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bool isDdl = 10 [default = false];</code>
     *
     * <pre>
     ** 标识是否是ddl语句  *
     * </pre>
     */
    public boolean getIsDdl() {
      return isDdl_;
    }

    public static final int SQL_FIELD_NUMBER = 11;
    private Object sql_;
    /**
     * <code>optional string sql = 11;</code>
     *
     * <pre>
     ** ddl/query的sql语句  *
     * </pre>
     */
    public boolean hasSql() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string sql = 11;</code>
     *
     * <pre>
     ** ddl/query的sql语句  *
     * </pre>
     */
    public String getSql() {
      Object ref = sql_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          sql_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string sql = 11;</code>
     *
     * <pre>
     ** ddl/query的sql语句  *
     * </pre>
     */
    public com.google.protobuf.ByteString
        getSqlBytes() {
      Object ref = sql_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        sql_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ROWDATAS_FIELD_NUMBER = 12;
    private java.util.List<RowData> rowDatas_;
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
     *
     * <pre>
     ** 一次数据库变更可能存在多行  *
     * </pre>
     */
    public java.util.List<RowData> getRowDatasList() {
      return rowDatas_;
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
     *
     * <pre>
     ** 一次数据库变更可能存在多行  *
     * </pre>
     */
    public java.util.List<? extends RowDataOrBuilder>
        getRowDatasOrBuilderList() {
      return rowDatas_;
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
     *
     * <pre>
     ** 一次数据库变更可能存在多行  *
     * </pre>
     */
    public int getRowDatasCount() {
      return rowDatas_.size();
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
     *
     * <pre>
     ** 一次数据库变更可能存在多行  *
     * </pre>
     */
    public RowData getRowDatas(int index) {
      return rowDatas_.get(index);
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
     *
     * <pre>
     ** 一次数据库变更可能存在多行  *
     * </pre>
     */
    public RowDataOrBuilder getRowDatasOrBuilder(
        int index) {
      return rowDatas_.get(index);
    }

    public static final int PROPS_FIELD_NUMBER = 13;
    private java.util.List<Pair> props_;
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public java.util.List<Pair> getPropsList() {
      return props_;
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public java.util.List<? extends PairOrBuilder>
        getPropsOrBuilderList() {
      return props_;
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public int getPropsCount() {
      return props_.size();
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public Pair getProps(int index) {
      return props_.get(index);
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public PairOrBuilder getPropsOrBuilder(
        int index) {
      return props_.get(index);
    }

    public static final int DDLSCHEMANAME_FIELD_NUMBER = 14;
    private Object ddlSchemaName_;
    /**
     * <code>optional string ddlSchemaName = 14;</code>
     *
     * <pre>
     ** ddl/query的schemaName，会存在跨库ddl，需要保留执行ddl的当前schemaName  *
     * </pre>
     */
    public boolean hasDdlSchemaName() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string ddlSchemaName = 14;</code>
     *
     * <pre>
     ** ddl/query的schemaName，会存在跨库ddl，需要保留执行ddl的当前schemaName  *
     * </pre>
     */
    public String getDdlSchemaName() {
      Object ref = ddlSchemaName_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          ddlSchemaName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string ddlSchemaName = 14;</code>
     *
     * <pre>
     ** ddl/query的schemaName，会存在跨库ddl，需要保留执行ddl的当前schemaName  *
     * </pre>
     */
    public com.google.protobuf.ByteString
        getDdlSchemaNameBytes() {
      Object ref = ddlSchemaName_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        ddlSchemaName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      tableId_ = 0L;
      eventType_ = EventType.UPDATE;
      isDdl_ = false;
      sql_ = "";
      rowDatas_ = java.util.Collections.emptyList();
      props_ = java.util.Collections.emptyList();
      ddlSchemaName_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, tableId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(2, eventType_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(10, isDdl_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(11, getSqlBytes());
      }
      for (int i = 0; i < rowDatas_.size(); i++) {
        output.writeMessage(12, rowDatas_.get(i));
      }
      for (int i = 0; i < props_.size(); i++) {
        output.writeMessage(13, props_.get(i));
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(14, getDdlSchemaNameBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, tableId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, eventType_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(10, isDdl_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(11, getSqlBytes());
      }
      for (int i = 0; i < rowDatas_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12, rowDatas_.get(i));
      }
      for (int i = 0; i < props_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(13, props_.get(i));
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(14, getDdlSchemaNameBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @Override
    protected Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static RowChange parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RowChange parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RowChange parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RowChange parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RowChange parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static RowChange parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static RowChange parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static RowChange parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static RowChange parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static RowChange parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(RowChange prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code com.alibaba.otter.canal.protocol.RowChange}
     *
     * <pre>
     **message row 每行变更数据的数据结构*
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.RowChange)
        RowChangeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_RowChange_descriptor;
      }

      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_RowChange_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                RowChange.class, Builder.class);
      }

      // Construct using com.alibaba.otter.canal.protocol.CanalEntry.RowChange.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getRowDatasFieldBuilder();
          getPropsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        tableId_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        eventType_ = EventType.UPDATE;
        bitField0_ = (bitField0_ & ~0x00000002);
        isDdl_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        sql_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        if (rowDatasBuilder_ == null) {
          rowDatas_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          rowDatasBuilder_.clear();
        }
        if (propsBuilder_ == null) {
          props_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          propsBuilder_.clear();
        }
        ddlSchemaName_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_RowChange_descriptor;
      }

      public RowChange getDefaultInstanceForType() {
        return RowChange.getDefaultInstance();
      }

      public RowChange build() {
        RowChange result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public RowChange buildPartial() {
        RowChange result = new RowChange(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.tableId_ = tableId_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.eventType_ = eventType_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.isDdl_ = isDdl_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.sql_ = sql_;
        if (rowDatasBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            rowDatas_ = java.util.Collections.unmodifiableList(rowDatas_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.rowDatas_ = rowDatas_;
        } else {
          result.rowDatas_ = rowDatasBuilder_.build();
        }
        if (propsBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            props_ = java.util.Collections.unmodifiableList(props_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.props_ = props_;
        } else {
          result.props_ = propsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000010;
        }
        result.ddlSchemaName_ = ddlSchemaName_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof RowChange) {
          return mergeFrom((RowChange)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(RowChange other) {
        if (other == RowChange.getDefaultInstance()) return this;
        if (other.hasTableId()) {
          setTableId(other.getTableId());
        }
        if (other.hasEventType()) {
          setEventType(other.getEventType());
        }
        if (other.hasIsDdl()) {
          setIsDdl(other.getIsDdl());
        }
        if (other.hasSql()) {
          bitField0_ |= 0x00000008;
          sql_ = other.sql_;
          onChanged();
        }
        if (rowDatasBuilder_ == null) {
          if (!other.rowDatas_.isEmpty()) {
            if (rowDatas_.isEmpty()) {
              rowDatas_ = other.rowDatas_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureRowDatasIsMutable();
              rowDatas_.addAll(other.rowDatas_);
            }
            onChanged();
          }
        } else {
          if (!other.rowDatas_.isEmpty()) {
            if (rowDatasBuilder_.isEmpty()) {
              rowDatasBuilder_.dispose();
              rowDatasBuilder_ = null;
              rowDatas_ = other.rowDatas_;
              bitField0_ = (bitField0_ & ~0x00000010);
              rowDatasBuilder_ =
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getRowDatasFieldBuilder() : null;
            } else {
              rowDatasBuilder_.addAllMessages(other.rowDatas_);
            }
          }
        }
        if (propsBuilder_ == null) {
          if (!other.props_.isEmpty()) {
            if (props_.isEmpty()) {
              props_ = other.props_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensurePropsIsMutable();
              props_.addAll(other.props_);
            }
            onChanged();
          }
        } else {
          if (!other.props_.isEmpty()) {
            if (propsBuilder_.isEmpty()) {
              propsBuilder_.dispose();
              propsBuilder_ = null;
              props_ = other.props_;
              bitField0_ = (bitField0_ & ~0x00000020);
              propsBuilder_ =
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getPropsFieldBuilder() : null;
            } else {
              propsBuilder_.addAllMessages(other.props_);
            }
          }
        }
        if (other.hasDdlSchemaName()) {
          bitField0_ |= 0x00000040;
          ddlSchemaName_ = other.ddlSchemaName_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        RowChange parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (RowChange) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private long tableId_ ;
      /**
       * <code>optional int64 tableId = 1;</code>
       *
       * <pre>
       **tableId,由数据库产生*
       * </pre>
       */
      public boolean hasTableId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 tableId = 1;</code>
       *
       * <pre>
       **tableId,由数据库产生*
       * </pre>
       */
      public long getTableId() {
        return tableId_;
      }
      /**
       * <code>optional int64 tableId = 1;</code>
       *
       * <pre>
       **tableId,由数据库产生*
       * </pre>
       */
      public Builder setTableId(long value) {
        bitField0_ |= 0x00000001;
        tableId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 tableId = 1;</code>
       *
       * <pre>
       **tableId,由数据库产生*
       * </pre>
       */
      public Builder clearTableId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        tableId_ = 0L;
        onChanged();
        return this;
      }

      private EventType eventType_ = EventType.UPDATE;
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE];</code>
       *
       * <pre>
       **数据变更类型*
       * </pre>
       */
      public boolean hasEventType() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE];</code>
       *
       * <pre>
       **数据变更类型*
       * </pre>
       */
      public EventType getEventType() {
        return eventType_;
      }
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE];</code>
       *
       * <pre>
       **数据变更类型*
       * </pre>
       */
      public Builder setEventType(EventType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        eventType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .com.alibaba.otter.canal.protocol.EventType eventType = 2 [default = UPDATE];</code>
       *
       * <pre>
       **数据变更类型*
       * </pre>
       */
      public Builder clearEventType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        eventType_ = EventType.UPDATE;
        onChanged();
        return this;
      }

      private boolean isDdl_ ;
      /**
       * <code>optional bool isDdl = 10 [default = false];</code>
       *
       * <pre>
       ** 标识是否是ddl语句  *
       * </pre>
       */
      public boolean hasIsDdl() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bool isDdl = 10 [default = false];</code>
       *
       * <pre>
       ** 标识是否是ddl语句  *
       * </pre>
       */
      public boolean getIsDdl() {
        return isDdl_;
      }
      /**
       * <code>optional bool isDdl = 10 [default = false];</code>
       *
       * <pre>
       ** 标识是否是ddl语句  *
       * </pre>
       */
      public Builder setIsDdl(boolean value) {
        bitField0_ |= 0x00000004;
        isDdl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool isDdl = 10 [default = false];</code>
       *
       * <pre>
       ** 标识是否是ddl语句  *
       * </pre>
       */
      public Builder clearIsDdl() {
        bitField0_ = (bitField0_ & ~0x00000004);
        isDdl_ = false;
        onChanged();
        return this;
      }

      private Object sql_ = "";
      /**
       * <code>optional string sql = 11;</code>
       *
       * <pre>
       ** ddl/query的sql语句  *
       * </pre>
       */
      public boolean hasSql() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string sql = 11;</code>
       *
       * <pre>
       ** ddl/query的sql语句  *
       * </pre>
       */
      public String getSql() {
        Object ref = sql_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            sql_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string sql = 11;</code>
       *
       * <pre>
       ** ddl/query的sql语句  *
       * </pre>
       */
      public com.google.protobuf.ByteString
          getSqlBytes() {
        Object ref = sql_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          sql_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string sql = 11;</code>
       *
       * <pre>
       ** ddl/query的sql语句  *
       * </pre>
       */
      public Builder setSql(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        sql_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string sql = 11;</code>
       *
       * <pre>
       ** ddl/query的sql语句  *
       * </pre>
       */
      public Builder clearSql() {
        bitField0_ = (bitField0_ & ~0x00000008);
        sql_ = getDefaultInstance().getSql();
        onChanged();
        return this;
      }
      /**
       * <code>optional string sql = 11;</code>
       *
       * <pre>
       ** ddl/query的sql语句  *
       * </pre>
       */
      public Builder setSqlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        sql_ = value;
        onChanged();
        return this;
      }

      private java.util.List<RowData> rowDatas_ =
        java.util.Collections.emptyList();
      private void ensureRowDatasIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          rowDatas_ = new java.util.ArrayList<RowData>(rowDatas_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          RowData, RowData.Builder, RowDataOrBuilder> rowDatasBuilder_;

      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
       *
       * <pre>
       ** 一次数据库变更可能存在多行  *
       * </pre>
       */
      public java.util.List<RowData> getRowDatasList() {
        if (rowDatasBuilder_ == null) {
          return java.util.Collections.unmodifiableList(rowDatas_);
        } else {
          return rowDatasBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
       *
       * <pre>
       ** 一次数据库变更可能存在多行  *
       * </pre>
       */
      public int getRowDatasCount() {
        if (rowDatasBuilder_ == null) {
          return rowDatas_.size();
        } else {
          return rowDatasBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
       *
       * <pre>
       ** 一次数据库变更可能存在多行  *
       * </pre>
       */
      public RowData getRowDatas(int index) {
        if (rowDatasBuilder_ == null) {
          return rowDatas_.get(index);
        } else {
          return rowDatasBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
       *
       * <pre>
       ** 一次数据库变更可能存在多行  *
       * </pre>
       */
      public Builder setRowDatas(
          int index, RowData value) {
        if (rowDatasBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRowDatasIsMutable();
          rowDatas_.set(index, value);
          onChanged();
        } else {
          rowDatasBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
       *
       * <pre>
       ** 一次数据库变更可能存在多行  *
       * </pre>
       */
      public Builder setRowDatas(
          int index, RowData.Builder builderForValue) {
        if (rowDatasBuilder_ == null) {
          ensureRowDatasIsMutable();
          rowDatas_.set(index, builderForValue.build());
          onChanged();
        } else {
          rowDatasBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
       *
       * <pre>
       ** 一次数据库变更可能存在多行  *
       * </pre>
       */
      public Builder addRowDatas(RowData value) {
        if (rowDatasBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRowDatasIsMutable();
          rowDatas_.add(value);
          onChanged();
        } else {
          rowDatasBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
       *
       * <pre>
       ** 一次数据库变更可能存在多行  *
       * </pre>
       */
      public Builder addRowDatas(
          int index, RowData value) {
        if (rowDatasBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRowDatasIsMutable();
          rowDatas_.add(index, value);
          onChanged();
        } else {
          rowDatasBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
       *
       * <pre>
       ** 一次数据库变更可能存在多行  *
       * </pre>
       */
      public Builder addRowDatas(
          RowData.Builder builderForValue) {
        if (rowDatasBuilder_ == null) {
          ensureRowDatasIsMutable();
          rowDatas_.add(builderForValue.build());
          onChanged();
        } else {
          rowDatasBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
       *
       * <pre>
       ** 一次数据库变更可能存在多行  *
       * </pre>
       */
      public Builder addRowDatas(
          int index, RowData.Builder builderForValue) {
        if (rowDatasBuilder_ == null) {
          ensureRowDatasIsMutable();
          rowDatas_.add(index, builderForValue.build());
          onChanged();
        } else {
          rowDatasBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
       *
       * <pre>
       ** 一次数据库变更可能存在多行  *
       * </pre>
       */
      public Builder addAllRowDatas(
          Iterable<? extends RowData> values) {
        if (rowDatasBuilder_ == null) {
          ensureRowDatasIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, rowDatas_);
          onChanged();
        } else {
          rowDatasBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
       *
       * <pre>
       ** 一次数据库变更可能存在多行  *
       * </pre>
       */
      public Builder clearRowDatas() {
        if (rowDatasBuilder_ == null) {
          rowDatas_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          rowDatasBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
       *
       * <pre>
       ** 一次数据库变更可能存在多行  *
       * </pre>
       */
      public Builder removeRowDatas(int index) {
        if (rowDatasBuilder_ == null) {
          ensureRowDatasIsMutable();
          rowDatas_.remove(index);
          onChanged();
        } else {
          rowDatasBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
       *
       * <pre>
       ** 一次数据库变更可能存在多行  *
       * </pre>
       */
      public RowData.Builder getRowDatasBuilder(
          int index) {
        return getRowDatasFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
       *
       * <pre>
       ** 一次数据库变更可能存在多行  *
       * </pre>
       */
      public RowDataOrBuilder getRowDatasOrBuilder(
          int index) {
        if (rowDatasBuilder_ == null) {
          return rowDatas_.get(index);  } else {
          return rowDatasBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
       *
       * <pre>
       ** 一次数据库变更可能存在多行  *
       * </pre>
       */
      public java.util.List<? extends RowDataOrBuilder>
           getRowDatasOrBuilderList() {
        if (rowDatasBuilder_ != null) {
          return rowDatasBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(rowDatas_);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
       *
       * <pre>
       ** 一次数据库变更可能存在多行  *
       * </pre>
       */
      public RowData.Builder addRowDatasBuilder() {
        return getRowDatasFieldBuilder().addBuilder(
            RowData.getDefaultInstance());
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
       *
       * <pre>
       ** 一次数据库变更可能存在多行  *
       * </pre>
       */
      public RowData.Builder addRowDatasBuilder(
          int index) {
        return getRowDatasFieldBuilder().addBuilder(
            index, RowData.getDefaultInstance());
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.RowData rowDatas = 12;</code>
       *
       * <pre>
       ** 一次数据库变更可能存在多行  *
       * </pre>
       */
      public java.util.List<RowData.Builder>
           getRowDatasBuilderList() {
        return getRowDatasFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          RowData, RowData.Builder, RowDataOrBuilder>
          getRowDatasFieldBuilder() {
        if (rowDatasBuilder_ == null) {
          rowDatasBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              RowData, RowData.Builder, RowDataOrBuilder>(
                  rowDatas_,
                  ((bitField0_ & 0x00000010) == 0x00000010),
                  getParentForChildren(),
                  isClean());
          rowDatas_ = null;
        }
        return rowDatasBuilder_;
      }

      private java.util.List<Pair> props_ =
        java.util.Collections.emptyList();
      private void ensurePropsIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          props_ = new java.util.ArrayList<Pair>(props_);
          bitField0_ |= 0x00000020;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          Pair, Pair.Builder, PairOrBuilder> propsBuilder_;

      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public java.util.List<Pair> getPropsList() {
        if (propsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(props_);
        } else {
          return propsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public int getPropsCount() {
        if (propsBuilder_ == null) {
          return props_.size();
        } else {
          return propsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair getProps(int index) {
        if (propsBuilder_ == null) {
          return props_.get(index);
        } else {
          return propsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder setProps(
          int index, Pair value) {
        if (propsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePropsIsMutable();
          props_.set(index, value);
          onChanged();
        } else {
          propsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder setProps(
          int index, Pair.Builder builderForValue) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.set(index, builderForValue.build());
          onChanged();
        } else {
          propsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(Pair value) {
        if (propsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePropsIsMutable();
          props_.add(value);
          onChanged();
        } else {
          propsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(
          int index, Pair value) {
        if (propsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePropsIsMutable();
          props_.add(index, value);
          onChanged();
        } else {
          propsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(
          Pair.Builder builderForValue) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.add(builderForValue.build());
          onChanged();
        } else {
          propsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(
          int index, Pair.Builder builderForValue) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.add(index, builderForValue.build());
          onChanged();
        } else {
          propsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addAllProps(
          Iterable<? extends Pair> values) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, props_);
          onChanged();
        } else {
          propsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder clearProps() {
        if (propsBuilder_ == null) {
          props_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          propsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder removeProps(int index) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.remove(index);
          onChanged();
        } else {
          propsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair.Builder getPropsBuilder(
          int index) {
        return getPropsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public PairOrBuilder getPropsOrBuilder(
          int index) {
        if (propsBuilder_ == null) {
          return props_.get(index);  } else {
          return propsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public java.util.List<? extends PairOrBuilder>
           getPropsOrBuilderList() {
        if (propsBuilder_ != null) {
          return propsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(props_);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair.Builder addPropsBuilder() {
        return getPropsFieldBuilder().addBuilder(
            Pair.getDefaultInstance());
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair.Builder addPropsBuilder(
          int index) {
        return getPropsFieldBuilder().addBuilder(
            index, Pair.getDefaultInstance());
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 13;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public java.util.List<Pair.Builder>
           getPropsBuilderList() {
        return getPropsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          Pair, Pair.Builder, PairOrBuilder>
          getPropsFieldBuilder() {
        if (propsBuilder_ == null) {
          propsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              Pair, Pair.Builder, PairOrBuilder>(
                  props_,
                  ((bitField0_ & 0x00000020) == 0x00000020),
                  getParentForChildren(),
                  isClean());
          props_ = null;
        }
        return propsBuilder_;
      }

      private Object ddlSchemaName_ = "";
      /**
       * <code>optional string ddlSchemaName = 14;</code>
       *
       * <pre>
       ** ddl/query的schemaName，会存在跨库ddl，需要保留执行ddl的当前schemaName  *
       * </pre>
       */
      public boolean hasDdlSchemaName() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional string ddlSchemaName = 14;</code>
       *
       * <pre>
       ** ddl/query的schemaName，会存在跨库ddl，需要保留执行ddl的当前schemaName  *
       * </pre>
       */
      public String getDdlSchemaName() {
        Object ref = ddlSchemaName_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            ddlSchemaName_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string ddlSchemaName = 14;</code>
       *
       * <pre>
       ** ddl/query的schemaName，会存在跨库ddl，需要保留执行ddl的当前schemaName  *
       * </pre>
       */
      public com.google.protobuf.ByteString
          getDdlSchemaNameBytes() {
        Object ref = ddlSchemaName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          ddlSchemaName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string ddlSchemaName = 14;</code>
       *
       * <pre>
       ** ddl/query的schemaName，会存在跨库ddl，需要保留执行ddl的当前schemaName  *
       * </pre>
       */
      public Builder setDdlSchemaName(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        ddlSchemaName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string ddlSchemaName = 14;</code>
       *
       * <pre>
       ** ddl/query的schemaName，会存在跨库ddl，需要保留执行ddl的当前schemaName  *
       * </pre>
       */
      public Builder clearDdlSchemaName() {
        bitField0_ = (bitField0_ & ~0x00000040);
        ddlSchemaName_ = getDefaultInstance().getDdlSchemaName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string ddlSchemaName = 14;</code>
       *
       * <pre>
       ** ddl/query的schemaName，会存在跨库ddl，需要保留执行ddl的当前schemaName  *
       * </pre>
       */
      public Builder setDdlSchemaNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        ddlSchemaName_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:com.alibaba.otter.canal.protocol.RowChange)
    }

    static {
      defaultInstance = new RowChange(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:com.alibaba.otter.canal.protocol.RowChange)
  }

  public interface TransactionBeginOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.TransactionBegin)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional int64 executeTime = 1;</code>
     *
     * <pre>
     **已废弃，请使用header里的executeTime*
     * </pre>
     */
    boolean hasExecuteTime();
    /**
     * <code>optional int64 executeTime = 1;</code>
     *
     * <pre>
     **已废弃，请使用header里的executeTime*
     * </pre>
     */
    long getExecuteTime();

    /**
     * <code>optional string transactionId = 2;</code>
     *
     * <pre>
     **已废弃，Begin里不提供事务id*
     * </pre>
     */
    boolean hasTransactionId();
    /**
     * <code>optional string transactionId = 2;</code>
     *
     * <pre>
     **已废弃，Begin里不提供事务id*
     * </pre>
     */
    String getTransactionId();
    /**
     * <code>optional string transactionId = 2;</code>
     *
     * <pre>
     **已废弃，Begin里不提供事务id*
     * </pre>
     */
    com.google.protobuf.ByteString
        getTransactionIdBytes();

    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    java.util.List<Pair>
        getPropsList();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    Pair getProps(int index);
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    int getPropsCount();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    java.util.List<? extends PairOrBuilder>
        getPropsOrBuilderList();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    PairOrBuilder getPropsOrBuilder(int index);

    /**
     * <code>optional int64 threadId = 4;</code>
     *
     * <pre>
     **执行的thread Id*
     * </pre>
     */
    boolean hasThreadId();
    /**
     * <code>optional int64 threadId = 4;</code>
     *
     * <pre>
     **执行的thread Id*
     * </pre>
     */
    long getThreadId();
  }
  /**
   * Protobuf type {@code com.alibaba.otter.canal.protocol.TransactionBegin}
   *
   * <pre>
   **开始事务的一些信息*
   * </pre>
   */
  public static final class TransactionBegin extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.TransactionBegin)
      TransactionBeginOrBuilder {
    // Use TransactionBegin.newBuilder() to construct.
    private TransactionBegin(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private TransactionBegin(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final TransactionBegin defaultInstance;
    public static TransactionBegin getDefaultInstance() {
      return defaultInstance;
    }

    public TransactionBegin getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private TransactionBegin(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              executeTime_ = input.readInt64();
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              transactionId_ = bs;
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                props_ = new java.util.ArrayList<Pair>();
                mutable_bitField0_ |= 0x00000004;
              }
              props_.add(input.readMessage(Pair.PARSER, extensionRegistry));
              break;
            }
            case 32: {
              bitField0_ |= 0x00000004;
              threadId_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          props_ = java.util.Collections.unmodifiableList(props_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_TransactionBegin_descriptor;
    }

    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_TransactionBegin_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              TransactionBegin.class, Builder.class);
    }

    public static com.google.protobuf.Parser<TransactionBegin> PARSER =
        new com.google.protobuf.AbstractParser<TransactionBegin>() {
      public TransactionBegin parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new TransactionBegin(input, extensionRegistry);
      }
    };

    @Override
    public com.google.protobuf.Parser<TransactionBegin> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    public static final int EXECUTETIME_FIELD_NUMBER = 1;
    private long executeTime_;
    /**
     * <code>optional int64 executeTime = 1;</code>
     *
     * <pre>
     **已废弃，请使用header里的executeTime*
     * </pre>
     */
    public boolean hasExecuteTime() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 executeTime = 1;</code>
     *
     * <pre>
     **已废弃，请使用header里的executeTime*
     * </pre>
     */
    public long getExecuteTime() {
      return executeTime_;
    }

    public static final int TRANSACTIONID_FIELD_NUMBER = 2;
    private Object transactionId_;
    /**
     * <code>optional string transactionId = 2;</code>
     *
     * <pre>
     **已废弃，Begin里不提供事务id*
     * </pre>
     */
    public boolean hasTransactionId() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string transactionId = 2;</code>
     *
     * <pre>
     **已废弃，Begin里不提供事务id*
     * </pre>
     */
    public String getTransactionId() {
      Object ref = transactionId_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          transactionId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string transactionId = 2;</code>
     *
     * <pre>
     **已废弃，Begin里不提供事务id*
     * </pre>
     */
    public com.google.protobuf.ByteString
        getTransactionIdBytes() {
      Object ref = transactionId_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        transactionId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PROPS_FIELD_NUMBER = 3;
    private java.util.List<Pair> props_;
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public java.util.List<Pair> getPropsList() {
      return props_;
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public java.util.List<? extends PairOrBuilder>
        getPropsOrBuilderList() {
      return props_;
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public int getPropsCount() {
      return props_.size();
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public Pair getProps(int index) {
      return props_.get(index);
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public PairOrBuilder getPropsOrBuilder(
        int index) {
      return props_.get(index);
    }

    public static final int THREADID_FIELD_NUMBER = 4;
    private long threadId_;
    /**
     * <code>optional int64 threadId = 4;</code>
     *
     * <pre>
     **执行的thread Id*
     * </pre>
     */
    public boolean hasThreadId() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 threadId = 4;</code>
     *
     * <pre>
     **执行的thread Id*
     * </pre>
     */
    public long getThreadId() {
      return threadId_;
    }

    private void initFields() {
      executeTime_ = 0L;
      transactionId_ = "";
      props_ = java.util.Collections.emptyList();
      threadId_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, executeTime_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getTransactionIdBytes());
      }
      for (int i = 0; i < props_.size(); i++) {
        output.writeMessage(3, props_.get(i));
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(4, threadId_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, executeTime_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getTransactionIdBytes());
      }
      for (int i = 0; i < props_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, props_.get(i));
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, threadId_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @Override
    protected Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static TransactionBegin parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static TransactionBegin parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static TransactionBegin parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static TransactionBegin parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static TransactionBegin parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static TransactionBegin parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static TransactionBegin parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static TransactionBegin parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static TransactionBegin parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static TransactionBegin parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(TransactionBegin prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code com.alibaba.otter.canal.protocol.TransactionBegin}
     *
     * <pre>
     **开始事务的一些信息*
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.TransactionBegin)
        TransactionBeginOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_TransactionBegin_descriptor;
      }

      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_TransactionBegin_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                TransactionBegin.class, Builder.class);
      }

      // Construct using com.alibaba.otter.canal.protocol.CanalEntry.TransactionBegin.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getPropsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        executeTime_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        transactionId_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        if (propsBuilder_ == null) {
          props_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          propsBuilder_.clear();
        }
        threadId_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_TransactionBegin_descriptor;
      }

      public TransactionBegin getDefaultInstanceForType() {
        return TransactionBegin.getDefaultInstance();
      }

      public TransactionBegin build() {
        TransactionBegin result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public TransactionBegin buildPartial() {
        TransactionBegin result = new TransactionBegin(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.executeTime_ = executeTime_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.transactionId_ = transactionId_;
        if (propsBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            props_ = java.util.Collections.unmodifiableList(props_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.props_ = props_;
        } else {
          result.props_ = propsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000004;
        }
        result.threadId_ = threadId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof TransactionBegin) {
          return mergeFrom((TransactionBegin)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(TransactionBegin other) {
        if (other == TransactionBegin.getDefaultInstance()) return this;
        if (other.hasExecuteTime()) {
          setExecuteTime(other.getExecuteTime());
        }
        if (other.hasTransactionId()) {
          bitField0_ |= 0x00000002;
          transactionId_ = other.transactionId_;
          onChanged();
        }
        if (propsBuilder_ == null) {
          if (!other.props_.isEmpty()) {
            if (props_.isEmpty()) {
              props_ = other.props_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensurePropsIsMutable();
              props_.addAll(other.props_);
            }
            onChanged();
          }
        } else {
          if (!other.props_.isEmpty()) {
            if (propsBuilder_.isEmpty()) {
              propsBuilder_.dispose();
              propsBuilder_ = null;
              props_ = other.props_;
              bitField0_ = (bitField0_ & ~0x00000004);
              propsBuilder_ =
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getPropsFieldBuilder() : null;
            } else {
              propsBuilder_.addAllMessages(other.props_);
            }
          }
        }
        if (other.hasThreadId()) {
          setThreadId(other.getThreadId());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        TransactionBegin parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (TransactionBegin) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private long executeTime_ ;
      /**
       * <code>optional int64 executeTime = 1;</code>
       *
       * <pre>
       **已废弃，请使用header里的executeTime*
       * </pre>
       */
      public boolean hasExecuteTime() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 executeTime = 1;</code>
       *
       * <pre>
       **已废弃，请使用header里的executeTime*
       * </pre>
       */
      public long getExecuteTime() {
        return executeTime_;
      }
      /**
       * <code>optional int64 executeTime = 1;</code>
       *
       * <pre>
       **已废弃，请使用header里的executeTime*
       * </pre>
       */
      public Builder setExecuteTime(long value) {
        bitField0_ |= 0x00000001;
        executeTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 executeTime = 1;</code>
       *
       * <pre>
       **已废弃，请使用header里的executeTime*
       * </pre>
       */
      public Builder clearExecuteTime() {
        bitField0_ = (bitField0_ & ~0x00000001);
        executeTime_ = 0L;
        onChanged();
        return this;
      }

      private Object transactionId_ = "";
      /**
       * <code>optional string transactionId = 2;</code>
       *
       * <pre>
       **已废弃，Begin里不提供事务id*
       * </pre>
       */
      public boolean hasTransactionId() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string transactionId = 2;</code>
       *
       * <pre>
       **已废弃，Begin里不提供事务id*
       * </pre>
       */
      public String getTransactionId() {
        Object ref = transactionId_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            transactionId_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string transactionId = 2;</code>
       *
       * <pre>
       **已废弃，Begin里不提供事务id*
       * </pre>
       */
      public com.google.protobuf.ByteString
          getTransactionIdBytes() {
        Object ref = transactionId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          transactionId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string transactionId = 2;</code>
       *
       * <pre>
       **已废弃，Begin里不提供事务id*
       * </pre>
       */
      public Builder setTransactionId(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        transactionId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string transactionId = 2;</code>
       *
       * <pre>
       **已废弃，Begin里不提供事务id*
       * </pre>
       */
      public Builder clearTransactionId() {
        bitField0_ = (bitField0_ & ~0x00000002);
        transactionId_ = getDefaultInstance().getTransactionId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string transactionId = 2;</code>
       *
       * <pre>
       **已废弃，Begin里不提供事务id*
       * </pre>
       */
      public Builder setTransactionIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        transactionId_ = value;
        onChanged();
        return this;
      }

      private java.util.List<Pair> props_ =
        java.util.Collections.emptyList();
      private void ensurePropsIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          props_ = new java.util.ArrayList<Pair>(props_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          Pair, Pair.Builder, PairOrBuilder> propsBuilder_;

      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public java.util.List<Pair> getPropsList() {
        if (propsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(props_);
        } else {
          return propsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public int getPropsCount() {
        if (propsBuilder_ == null) {
          return props_.size();
        } else {
          return propsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair getProps(int index) {
        if (propsBuilder_ == null) {
          return props_.get(index);
        } else {
          return propsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder setProps(
          int index, Pair value) {
        if (propsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePropsIsMutable();
          props_.set(index, value);
          onChanged();
        } else {
          propsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder setProps(
          int index, Pair.Builder builderForValue) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.set(index, builderForValue.build());
          onChanged();
        } else {
          propsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(Pair value) {
        if (propsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePropsIsMutable();
          props_.add(value);
          onChanged();
        } else {
          propsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(
          int index, Pair value) {
        if (propsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePropsIsMutable();
          props_.add(index, value);
          onChanged();
        } else {
          propsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(
          Pair.Builder builderForValue) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.add(builderForValue.build());
          onChanged();
        } else {
          propsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(
          int index, Pair.Builder builderForValue) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.add(index, builderForValue.build());
          onChanged();
        } else {
          propsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addAllProps(
          Iterable<? extends Pair> values) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, props_);
          onChanged();
        } else {
          propsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder clearProps() {
        if (propsBuilder_ == null) {
          props_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          propsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder removeProps(int index) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.remove(index);
          onChanged();
        } else {
          propsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair.Builder getPropsBuilder(
          int index) {
        return getPropsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public PairOrBuilder getPropsOrBuilder(
          int index) {
        if (propsBuilder_ == null) {
          return props_.get(index);  } else {
          return propsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public java.util.List<? extends PairOrBuilder>
           getPropsOrBuilderList() {
        if (propsBuilder_ != null) {
          return propsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(props_);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair.Builder addPropsBuilder() {
        return getPropsFieldBuilder().addBuilder(
            Pair.getDefaultInstance());
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair.Builder addPropsBuilder(
          int index) {
        return getPropsFieldBuilder().addBuilder(
            index, Pair.getDefaultInstance());
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public java.util.List<Pair.Builder>
           getPropsBuilderList() {
        return getPropsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          Pair, Pair.Builder, PairOrBuilder>
          getPropsFieldBuilder() {
        if (propsBuilder_ == null) {
          propsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              Pair, Pair.Builder, PairOrBuilder>(
                  props_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          props_ = null;
        }
        return propsBuilder_;
      }

      private long threadId_ ;
      /**
       * <code>optional int64 threadId = 4;</code>
       *
       * <pre>
       **执行的thread Id*
       * </pre>
       */
      public boolean hasThreadId() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int64 threadId = 4;</code>
       *
       * <pre>
       **执行的thread Id*
       * </pre>
       */
      public long getThreadId() {
        return threadId_;
      }
      /**
       * <code>optional int64 threadId = 4;</code>
       *
       * <pre>
       **执行的thread Id*
       * </pre>
       */
      public Builder setThreadId(long value) {
        bitField0_ |= 0x00000008;
        threadId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 threadId = 4;</code>
       *
       * <pre>
       **执行的thread Id*
       * </pre>
       */
      public Builder clearThreadId() {
        bitField0_ = (bitField0_ & ~0x00000008);
        threadId_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:com.alibaba.otter.canal.protocol.TransactionBegin)
    }

    static {
      defaultInstance = new TransactionBegin(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:com.alibaba.otter.canal.protocol.TransactionBegin)
  }

  public interface TransactionEndOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.TransactionEnd)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional int64 executeTime = 1;</code>
     *
     * <pre>
     **已废弃，请使用header里的executeTime*
     * </pre>
     */
    boolean hasExecuteTime();
    /**
     * <code>optional int64 executeTime = 1;</code>
     *
     * <pre>
     **已废弃，请使用header里的executeTime*
     * </pre>
     */
    long getExecuteTime();

    /**
     * <code>optional string transactionId = 2;</code>
     *
     * <pre>
     **事务号*
     * </pre>
     */
    boolean hasTransactionId();
    /**
     * <code>optional string transactionId = 2;</code>
     *
     * <pre>
     **事务号*
     * </pre>
     */
    String getTransactionId();
    /**
     * <code>optional string transactionId = 2;</code>
     *
     * <pre>
     **事务号*
     * </pre>
     */
    com.google.protobuf.ByteString
        getTransactionIdBytes();

    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    java.util.List<Pair>
        getPropsList();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    Pair getProps(int index);
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    int getPropsCount();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    java.util.List<? extends PairOrBuilder>
        getPropsOrBuilderList();
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    PairOrBuilder getPropsOrBuilder(int index);
  }
  /**
   * Protobuf type {@code com.alibaba.otter.canal.protocol.TransactionEnd}
   *
   * <pre>
   **结束事务的一些信息*
   * </pre>
   */
  public static final class TransactionEnd extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.TransactionEnd)
      TransactionEndOrBuilder {
    // Use TransactionEnd.newBuilder() to construct.
    private TransactionEnd(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private TransactionEnd(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final TransactionEnd defaultInstance;
    public static TransactionEnd getDefaultInstance() {
      return defaultInstance;
    }

    public TransactionEnd getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private TransactionEnd(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              executeTime_ = input.readInt64();
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              transactionId_ = bs;
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                props_ = new java.util.ArrayList<Pair>();
                mutable_bitField0_ |= 0x00000004;
              }
              props_.add(input.readMessage(Pair.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          props_ = java.util.Collections.unmodifiableList(props_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_TransactionEnd_descriptor;
    }

    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_TransactionEnd_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              TransactionEnd.class, Builder.class);
    }

    public static com.google.protobuf.Parser<TransactionEnd> PARSER =
        new com.google.protobuf.AbstractParser<TransactionEnd>() {
      public TransactionEnd parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new TransactionEnd(input, extensionRegistry);
      }
    };

    @Override
    public com.google.protobuf.Parser<TransactionEnd> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    public static final int EXECUTETIME_FIELD_NUMBER = 1;
    private long executeTime_;
    /**
     * <code>optional int64 executeTime = 1;</code>
     *
     * <pre>
     **已废弃，请使用header里的executeTime*
     * </pre>
     */
    public boolean hasExecuteTime() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 executeTime = 1;</code>
     *
     * <pre>
     **已废弃，请使用header里的executeTime*
     * </pre>
     */
    public long getExecuteTime() {
      return executeTime_;
    }

    public static final int TRANSACTIONID_FIELD_NUMBER = 2;
    private Object transactionId_;
    /**
     * <code>optional string transactionId = 2;</code>
     *
     * <pre>
     **事务号*
     * </pre>
     */
    public boolean hasTransactionId() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string transactionId = 2;</code>
     *
     * <pre>
     **事务号*
     * </pre>
     */
    public String getTransactionId() {
      Object ref = transactionId_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          transactionId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string transactionId = 2;</code>
     *
     * <pre>
     **事务号*
     * </pre>
     */
    public com.google.protobuf.ByteString
        getTransactionIdBytes() {
      Object ref = transactionId_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        transactionId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PROPS_FIELD_NUMBER = 3;
    private java.util.List<Pair> props_;
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public java.util.List<Pair> getPropsList() {
      return props_;
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public java.util.List<? extends PairOrBuilder>
        getPropsOrBuilderList() {
      return props_;
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public int getPropsCount() {
      return props_.size();
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public Pair getProps(int index) {
      return props_.get(index);
    }
    /**
     * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public PairOrBuilder getPropsOrBuilder(
        int index) {
      return props_.get(index);
    }

    private void initFields() {
      executeTime_ = 0L;
      transactionId_ = "";
      props_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, executeTime_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getTransactionIdBytes());
      }
      for (int i = 0; i < props_.size(); i++) {
        output.writeMessage(3, props_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, executeTime_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getTransactionIdBytes());
      }
      for (int i = 0; i < props_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, props_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @Override
    protected Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static TransactionEnd parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static TransactionEnd parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static TransactionEnd parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static TransactionEnd parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static TransactionEnd parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static TransactionEnd parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static TransactionEnd parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static TransactionEnd parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static TransactionEnd parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static TransactionEnd parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(TransactionEnd prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code com.alibaba.otter.canal.protocol.TransactionEnd}
     *
     * <pre>
     **结束事务的一些信息*
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.TransactionEnd)
        TransactionEndOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_TransactionEnd_descriptor;
      }

      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_TransactionEnd_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                TransactionEnd.class, Builder.class);
      }

      // Construct using com.alibaba.otter.canal.protocol.CanalEntry.TransactionEnd.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getPropsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        executeTime_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        transactionId_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        if (propsBuilder_ == null) {
          props_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          propsBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_TransactionEnd_descriptor;
      }

      public TransactionEnd getDefaultInstanceForType() {
        return TransactionEnd.getDefaultInstance();
      }

      public TransactionEnd build() {
        TransactionEnd result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public TransactionEnd buildPartial() {
        TransactionEnd result = new TransactionEnd(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.executeTime_ = executeTime_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.transactionId_ = transactionId_;
        if (propsBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            props_ = java.util.Collections.unmodifiableList(props_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.props_ = props_;
        } else {
          result.props_ = propsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof TransactionEnd) {
          return mergeFrom((TransactionEnd)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(TransactionEnd other) {
        if (other == TransactionEnd.getDefaultInstance()) return this;
        if (other.hasExecuteTime()) {
          setExecuteTime(other.getExecuteTime());
        }
        if (other.hasTransactionId()) {
          bitField0_ |= 0x00000002;
          transactionId_ = other.transactionId_;
          onChanged();
        }
        if (propsBuilder_ == null) {
          if (!other.props_.isEmpty()) {
            if (props_.isEmpty()) {
              props_ = other.props_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensurePropsIsMutable();
              props_.addAll(other.props_);
            }
            onChanged();
          }
        } else {
          if (!other.props_.isEmpty()) {
            if (propsBuilder_.isEmpty()) {
              propsBuilder_.dispose();
              propsBuilder_ = null;
              props_ = other.props_;
              bitField0_ = (bitField0_ & ~0x00000004);
              propsBuilder_ =
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getPropsFieldBuilder() : null;
            } else {
              propsBuilder_.addAllMessages(other.props_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        TransactionEnd parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (TransactionEnd) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private long executeTime_ ;
      /**
       * <code>optional int64 executeTime = 1;</code>
       *
       * <pre>
       **已废弃，请使用header里的executeTime*
       * </pre>
       */
      public boolean hasExecuteTime() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 executeTime = 1;</code>
       *
       * <pre>
       **已废弃，请使用header里的executeTime*
       * </pre>
       */
      public long getExecuteTime() {
        return executeTime_;
      }
      /**
       * <code>optional int64 executeTime = 1;</code>
       *
       * <pre>
       **已废弃，请使用header里的executeTime*
       * </pre>
       */
      public Builder setExecuteTime(long value) {
        bitField0_ |= 0x00000001;
        executeTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 executeTime = 1;</code>
       *
       * <pre>
       **已废弃，请使用header里的executeTime*
       * </pre>
       */
      public Builder clearExecuteTime() {
        bitField0_ = (bitField0_ & ~0x00000001);
        executeTime_ = 0L;
        onChanged();
        return this;
      }

      private Object transactionId_ = "";
      /**
       * <code>optional string transactionId = 2;</code>
       *
       * <pre>
       **事务号*
       * </pre>
       */
      public boolean hasTransactionId() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string transactionId = 2;</code>
       *
       * <pre>
       **事务号*
       * </pre>
       */
      public String getTransactionId() {
        Object ref = transactionId_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            transactionId_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string transactionId = 2;</code>
       *
       * <pre>
       **事务号*
       * </pre>
       */
      public com.google.protobuf.ByteString
          getTransactionIdBytes() {
        Object ref = transactionId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          transactionId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string transactionId = 2;</code>
       *
       * <pre>
       **事务号*
       * </pre>
       */
      public Builder setTransactionId(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        transactionId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string transactionId = 2;</code>
       *
       * <pre>
       **事务号*
       * </pre>
       */
      public Builder clearTransactionId() {
        bitField0_ = (bitField0_ & ~0x00000002);
        transactionId_ = getDefaultInstance().getTransactionId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string transactionId = 2;</code>
       *
       * <pre>
       **事务号*
       * </pre>
       */
      public Builder setTransactionIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        transactionId_ = value;
        onChanged();
        return this;
      }

      private java.util.List<Pair> props_ =
        java.util.Collections.emptyList();
      private void ensurePropsIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          props_ = new java.util.ArrayList<Pair>(props_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          Pair, Pair.Builder, PairOrBuilder> propsBuilder_;

      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public java.util.List<Pair> getPropsList() {
        if (propsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(props_);
        } else {
          return propsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public int getPropsCount() {
        if (propsBuilder_ == null) {
          return props_.size();
        } else {
          return propsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair getProps(int index) {
        if (propsBuilder_ == null) {
          return props_.get(index);
        } else {
          return propsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder setProps(
          int index, Pair value) {
        if (propsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePropsIsMutable();
          props_.set(index, value);
          onChanged();
        } else {
          propsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder setProps(
          int index, Pair.Builder builderForValue) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.set(index, builderForValue.build());
          onChanged();
        } else {
          propsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(Pair value) {
        if (propsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePropsIsMutable();
          props_.add(value);
          onChanged();
        } else {
          propsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(
          int index, Pair value) {
        if (propsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePropsIsMutable();
          props_.add(index, value);
          onChanged();
        } else {
          propsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(
          Pair.Builder builderForValue) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.add(builderForValue.build());
          onChanged();
        } else {
          propsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addProps(
          int index, Pair.Builder builderForValue) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.add(index, builderForValue.build());
          onChanged();
        } else {
          propsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder addAllProps(
          Iterable<? extends Pair> values) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, props_);
          onChanged();
        } else {
          propsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder clearProps() {
        if (propsBuilder_ == null) {
          props_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          propsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Builder removeProps(int index) {
        if (propsBuilder_ == null) {
          ensurePropsIsMutable();
          props_.remove(index);
          onChanged();
        } else {
          propsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair.Builder getPropsBuilder(
          int index) {
        return getPropsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public PairOrBuilder getPropsOrBuilder(
          int index) {
        if (propsBuilder_ == null) {
          return props_.get(index);  } else {
          return propsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public java.util.List<? extends PairOrBuilder>
           getPropsOrBuilderList() {
        if (propsBuilder_ != null) {
          return propsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(props_);
        }
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair.Builder addPropsBuilder() {
        return getPropsFieldBuilder().addBuilder(
            Pair.getDefaultInstance());
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public Pair.Builder addPropsBuilder(
          int index) {
        return getPropsFieldBuilder().addBuilder(
            index, Pair.getDefaultInstance());
      }
      /**
       * <code>repeated .com.alibaba.otter.canal.protocol.Pair props = 3;</code>
       *
       * <pre>
       **预留扩展*
       * </pre>
       */
      public java.util.List<Pair.Builder>
           getPropsBuilderList() {
        return getPropsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          Pair, Pair.Builder, PairOrBuilder>
          getPropsFieldBuilder() {
        if (propsBuilder_ == null) {
          propsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              Pair, Pair.Builder, PairOrBuilder>(
                  props_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          props_ = null;
        }
        return propsBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:com.alibaba.otter.canal.protocol.TransactionEnd)
    }

    static {
      defaultInstance = new TransactionEnd(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:com.alibaba.otter.canal.protocol.TransactionEnd)
  }

  public interface PairOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.Pair)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string key = 1;</code>
     */
    boolean hasKey();
    /**
     * <code>optional string key = 1;</code>
     */
    String getKey();
    /**
     * <code>optional string key = 1;</code>
     */
    com.google.protobuf.ByteString
        getKeyBytes();

    /**
     * <code>optional string value = 2;</code>
     */
    boolean hasValue();
    /**
     * <code>optional string value = 2;</code>
     */
    String getValue();
    /**
     * <code>optional string value = 2;</code>
     */
    com.google.protobuf.ByteString
        getValueBytes();
  }
  /**
   * Protobuf type {@code com.alibaba.otter.canal.protocol.Pair}
   *
   * <pre>
   **预留扩展*
   * </pre>
   */
  public static final class Pair extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.Pair)
      PairOrBuilder {
    // Use Pair.newBuilder() to construct.
    private Pair(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Pair(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Pair defaultInstance;
    public static Pair getDefaultInstance() {
      return defaultInstance;
    }

    public Pair getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Pair(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              key_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              value_ = bs;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_Pair_descriptor;
    }

    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_Pair_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              Pair.class, Builder.class);
    }

    public static com.google.protobuf.Parser<Pair> PARSER =
        new com.google.protobuf.AbstractParser<Pair>() {
      public Pair parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Pair(input, extensionRegistry);
      }
    };

    @Override
    public com.google.protobuf.Parser<Pair> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    public static final int KEY_FIELD_NUMBER = 1;
    private Object key_;
    /**
     * <code>optional string key = 1;</code>
     */
    public boolean hasKey() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string key = 1;</code>
     */
    public String getKey() {
      Object ref = key_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          key_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string key = 1;</code>
     */
    public com.google.protobuf.ByteString
        getKeyBytes() {
      Object ref = key_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        key_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VALUE_FIELD_NUMBER = 2;
    private Object value_;
    /**
     * <code>optional string value = 2;</code>
     */
    public boolean hasValue() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string value = 2;</code>
     */
    public String getValue() {
      Object ref = value_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          value_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string value = 2;</code>
     */
    public com.google.protobuf.ByteString
        getValueBytes() {
      Object ref = value_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        value_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      key_ = "";
      value_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getKeyBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getValueBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getKeyBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getValueBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @Override
    protected Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static Pair parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Pair parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Pair parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Pair parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Pair parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static Pair parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static Pair parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static Pair parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static Pair parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static Pair parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(Pair prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code com.alibaba.otter.canal.protocol.Pair}
     *
     * <pre>
     **预留扩展*
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.Pair)
        PairOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_Pair_descriptor;
      }

      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_Pair_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Pair.class, Builder.class);
      }

      // Construct using com.alibaba.otter.canal.protocol.CanalEntry.Pair.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        key_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        value_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return CanalEntry.internal_static_com_alibaba_otter_canal_protocol_Pair_descriptor;
      }

      public Pair getDefaultInstanceForType() {
        return Pair.getDefaultInstance();
      }

      public Pair build() {
        Pair result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public Pair buildPartial() {
        Pair result = new Pair(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.key_ = key_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.value_ = value_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof Pair) {
          return mergeFrom((Pair)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(Pair other) {
        if (other == Pair.getDefaultInstance()) return this;
        if (other.hasKey()) {
          bitField0_ |= 0x00000001;
          key_ = other.key_;
          onChanged();
        }
        if (other.hasValue()) {
          bitField0_ |= 0x00000002;
          value_ = other.value_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Pair parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (Pair) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private Object key_ = "";
      /**
       * <code>optional string key = 1;</code>
       */
      public boolean hasKey() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string key = 1;</code>
       */
      public String getKey() {
        Object ref = key_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            key_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string key = 1;</code>
       */
      public com.google.protobuf.ByteString
          getKeyBytes() {
        Object ref = key_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          key_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string key = 1;</code>
       */
      public Builder setKey(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        key_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string key = 1;</code>
       */
      public Builder clearKey() {
        bitField0_ = (bitField0_ & ~0x00000001);
        key_ = getDefaultInstance().getKey();
        onChanged();
        return this;
      }
      /**
       * <code>optional string key = 1;</code>
       */
      public Builder setKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        key_ = value;
        onChanged();
        return this;
      }

      private Object value_ = "";
      /**
       * <code>optional string value = 2;</code>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public String getValue() {
        Object ref = value_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            value_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public com.google.protobuf.ByteString
          getValueBytes() {
        Object ref = value_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          value_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public Builder setValue(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public Builder clearValue() {
        bitField0_ = (bitField0_ & ~0x00000002);
        value_ = getDefaultInstance().getValue();
        onChanged();
        return this;
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public Builder setValueBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        value_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:com.alibaba.otter.canal.protocol.Pair)
    }

    static {
      defaultInstance = new Pair(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:com.alibaba.otter.canal.protocol.Pair)
  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_alibaba_otter_canal_protocol_Entry_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_com_alibaba_otter_canal_protocol_Entry_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_alibaba_otter_canal_protocol_Header_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_com_alibaba_otter_canal_protocol_Header_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_alibaba_otter_canal_protocol_Column_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_com_alibaba_otter_canal_protocol_Column_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_alibaba_otter_canal_protocol_RowData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_com_alibaba_otter_canal_protocol_RowData_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_alibaba_otter_canal_protocol_RowChange_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_com_alibaba_otter_canal_protocol_RowChange_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_alibaba_otter_canal_protocol_TransactionBegin_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_com_alibaba_otter_canal_protocol_TransactionBegin_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_alibaba_otter_canal_protocol_TransactionEnd_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_com_alibaba_otter_canal_protocol_TransactionEnd_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_alibaba_otter_canal_protocol_Pair_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_com_alibaba_otter_canal_protocol_Pair_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    String[] descriptorData = {
      "\n\023EntryProtocol.proto\022 com.alibaba.otter" +
      ".canal.protocol\"\236\001\n\005Entry\0228\n\006header\030\001 \001(" +
      "\0132(.com.alibaba.otter.canal.protocol.Hea" +
      "der\022G\n\tentryType\030\002 \001(\0162+.com.alibaba.ott" +
      "er.canal.protocol.EntryType:\007ROWDATA\022\022\n\n" +
      "storeValue\030\003 \001(\014\"\221\003\n\006Header\022\022\n\007version\030\001" +
      " \001(\005:\0011\022\023\n\013logfileName\030\002 \001(\t\022\025\n\rlogfileO" +
      "ffset\030\003 \001(\003\022\020\n\010serverId\030\004 \001(\003\022\024\n\014servere" +
      "nCode\030\005 \001(\t\022\023\n\013executeTime\030\006 \001(\003\022A\n\nsour" +
      "ceType\030\007 \001(\0162&.com.alibaba.otter.canal.p",
      "rotocol.Type:\005MYSQL\022\022\n\nschemaName\030\010 \001(\t\022" +
      "\021\n\ttableName\030\t \001(\t\022\023\n\013eventLength\030\n \001(\003\022" +
      "F\n\teventType\030\013 \001(\0162+.com.alibaba.otter.c" +
      "anal.protocol.EventType:\006UPDATE\0225\n\005props" +
      "\030\014 \003(\0132&.com.alibaba.otter.canal.protoco" +
      "l.Pair\022\014\n\004gtid\030\r \001(\t\"\326\001\n\006Column\022\r\n\005index" +
      "\030\001 \001(\005\022\017\n\007sqlType\030\002 \001(\005\022\014\n\004name\030\003 \001(\t\022\r\n" +
      "\005isKey\030\004 \001(\010\022\017\n\007updated\030\005 \001(\010\022\025\n\006isNull\030" +
      "\006 \001(\010:\005false\0225\n\005props\030\007 \003(\0132&.com.alibab" +
      "a.otter.canal.protocol.Pair\022\r\n\005value\030\010 \001",
      "(\t\022\016\n\006length\030\t \001(\005\022\021\n\tmysqlType\030\n \001(\t\"\301\001" +
      "\n\007RowData\022?\n\rbeforeColumns\030\001 \003(\0132(.com.a" +
      "libaba.otter.canal.protocol.Column\022>\n\014af" +
      "terColumns\030\002 \003(\0132(.com.alibaba.otter.can" +
      "al.protocol.Column\0225\n\005props\030\003 \003(\0132&.com." +
      "alibaba.otter.canal.protocol.Pair\"\222\002\n\tRo" +
      "wChange\022\017\n\007tableId\030\001 \001(\003\022F\n\teventType\030\002 " +
      "\001(\0162+.com.alibaba.otter.canal.protocol.E" +
      "ventType:\006UPDATE\022\024\n\005isDdl\030\n \001(\010:\005false\022\013" +
      "\n\003sql\030\013 \001(\t\022;\n\010rowDatas\030\014 \003(\0132).com.alib",
      "aba.otter.canal.protocol.RowData\0225\n\005prop" +
      "s\030\r \003(\0132&.com.alibaba.otter.canal.protoc" +
      "ol.Pair\022\025\n\rddlSchemaName\030\016 \001(\t\"\207\001\n\020Trans" +
      "actionBegin\022\023\n\013executeTime\030\001 \001(\003\022\025\n\rtran" +
      "sactionId\030\002 \001(\t\0225\n\005props\030\003 \003(\0132&.com.ali" +
      "baba.otter.canal.protocol.Pair\022\020\n\010thread" +
      "Id\030\004 \001(\003\"s\n\016TransactionEnd\022\023\n\013executeTim" +
      "e\030\001 \001(\003\022\025\n\rtransactionId\030\002 \001(\t\0225\n\005props\030" +
      "\003 \003(\0132&.com.alibaba.otter.canal.protocol" +
      ".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*\306\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\022\014\n\010XACOMMIT\020\r\022\016\n\nXAROLLBACK" +
      "\020\016\022\016\n\nMHEARTBEAT\020\017*(\n\004Type\022\n\n\006ORACLE\020\001\022\t" +
      "\n\005MYSQL\020\002\022\t\n\005PGSQL\020\003B0\n com.alibaba.otte" +
      "r.canal.protocolB\nCanalEntryH\001"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
        new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
          public com.google.protobuf.ExtensionRegistry assignDescriptors(
              com.google.protobuf.Descriptors.FileDescriptor root) {
            descriptor = root;
            return null;
          }
        };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        }, assigner);
    internal_static_com_alibaba_otter_canal_protocol_Entry_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_com_alibaba_otter_canal_protocol_Entry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_com_alibaba_otter_canal_protocol_Entry_descriptor,
        new String[] { "Header", "EntryType", "StoreValue", });
    internal_static_com_alibaba_otter_canal_protocol_Header_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_com_alibaba_otter_canal_protocol_Header_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_com_alibaba_otter_canal_protocol_Header_descriptor,
        new String[] { "Version", "LogfileName", "LogfileOffset", "ServerId", "ServerenCode", "ExecuteTime", "SourceType", "SchemaName", "TableName", "EventLength", "EventType", "Props", "Gtid", });
    internal_static_com_alibaba_otter_canal_protocol_Column_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_com_alibaba_otter_canal_protocol_Column_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_com_alibaba_otter_canal_protocol_Column_descriptor,
        new String[] { "Index", "SqlType", "Name", "IsKey", "Updated", "IsNull", "Props", "Value", "Length", "MysqlType", });
    internal_static_com_alibaba_otter_canal_protocol_RowData_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_com_alibaba_otter_canal_protocol_RowData_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_com_alibaba_otter_canal_protocol_RowData_descriptor,
        new String[] { "BeforeColumns", "AfterColumns", "Props", });
    internal_static_com_alibaba_otter_canal_protocol_RowChange_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_com_alibaba_otter_canal_protocol_RowChange_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_com_alibaba_otter_canal_protocol_RowChange_descriptor,
        new String[] { "TableId", "EventType", "IsDdl", "Sql", "RowDatas", "Props", "DdlSchemaName", });
    internal_static_com_alibaba_otter_canal_protocol_TransactionBegin_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_com_alibaba_otter_canal_protocol_TransactionBegin_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_com_alibaba_otter_canal_protocol_TransactionBegin_descriptor,
        new String[] { "ExecuteTime", "TransactionId", "Props", "ThreadId", });
    internal_static_com_alibaba_otter_canal_protocol_TransactionEnd_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_com_alibaba_otter_canal_protocol_TransactionEnd_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_com_alibaba_otter_canal_protocol_TransactionEnd_descriptor,
        new String[] { "ExecuteTime", "TransactionId", "Props", });
    internal_static_com_alibaba_otter_canal_protocol_Pair_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_com_alibaba_otter_canal_protocol_Pair_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_com_alibaba_otter_canal_protocol_Pair_descriptor,
        new String[] { "Key", "Value", });
  }

  // @@protoc_insertion_point(outer_class_scope)
}
