You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@seata.apache.org by lu...@apache.org on 2024/12/07 11:56:15 UTC
(incubator-seata-go) branch master updated: feature:add undo protobuf parser (#691)
This is an automated email from the ASF dual-hosted git repository.
luky116 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-seata-go.git
The following commit(s) were added to refs/heads/master by this push:
new 0fa02721 feature:add undo protobuf parser (#691)
0fa02721 is described below
commit 0fa027211a175adae2b3902ceaeeaa99074546de
Author: marsevilspirit <ma...@gmail.com>
AuthorDate: Sat Dec 7 19:56:11 2024 +0800
feature:add undo protobuf parser (#691)
* feature:add undo protobuf parser
* fix apache header
---
.../sql/undo/parser/branch_undo_log.pb.go | 1445 ++++++++++++++++++++
.../sql/undo/parser/branch_undo_log.proto | 165 +++
pkg/datasource/sql/undo/parser/parser_cache.go | 1 +
pkg/datasource/sql/undo/parser/parser_json_test.go | 8 +-
pkg/datasource/sql/undo/parser/parser_protobuf.go | 248 ++++
.../sql/undo/parser/parser_protobuf_test.go | 91 ++
6 files changed, 1954 insertions(+), 4 deletions(-)
diff --git a/pkg/datasource/sql/undo/parser/branch_undo_log.pb.go b/pkg/datasource/sql/undo/parser/branch_undo_log.pb.go
new file mode 100644
index 00000000..4bdce65f
--- /dev/null
+++ b/pkg/datasource/sql/undo/parser/branch_undo_log.pb.go
@@ -0,0 +1,1445 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.34.2
+// protoc v5.28.3
+// source: branch_undo_log.proto
+
+package parser
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ anypb "google.golang.org/protobuf/types/known/anypb"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type IndexType int32
+
+const (
+ IndexType_IndexTypeNull IndexType = 0
+ IndexType_IndexTypePrimaryKey IndexType = 1
+)
+
+// Enum value maps for IndexType.
+var (
+ IndexType_name = map[int32]string{
+ 0: "IndexTypeNull",
+ 1: "IndexTypePrimaryKey",
+ }
+ IndexType_value = map[string]int32{
+ "IndexTypeNull": 0,
+ "IndexTypePrimaryKey": 1,
+ }
+)
+
+func (x IndexType) Enum() *IndexType {
+ p := new(IndexType)
+ *p = x
+ return p
+}
+
+func (x IndexType) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (IndexType) Descriptor() protoreflect.EnumDescriptor {
+ return file_branch_undo_log_proto_enumTypes[0].Descriptor()
+}
+
+func (IndexType) Type() protoreflect.EnumType {
+ return &file_branch_undo_log_proto_enumTypes[0]
+}
+
+func (x IndexType) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use IndexType.Descriptor instead.
+func (IndexType) EnumDescriptor() ([]byte, []int) {
+ return file_branch_undo_log_proto_rawDescGZIP(), []int{0}
+}
+
+type JDBCType int32
+
+const (
+ JDBCType_JDBCTypeNull JDBCType = 0
+ JDBCType_JDBCTypeBit JDBCType = -7
+ JDBCType_JDBCTypeTinyInt JDBCType = -6
+ JDBCType_JDBCTypeSmallInt JDBCType = 5
+ JDBCType_JDBCTypeInteger JDBCType = 4
+ JDBCType_JDBCTypeBigInt JDBCType = -5
+ JDBCType_JDBCTypeFloat JDBCType = 6
+ JDBCType_JDBCTypeReal JDBCType = 7
+ JDBCType_JDBCTypeDouble JDBCType = 8
+ JDBCType_JDBCTypeNumberic JDBCType = 2
+ JDBCType_JDBCTypeDecimal JDBCType = 3
+ JDBCType_JDBCTypeChar JDBCType = 1
+ JDBCType_JDBCTypeVarchar JDBCType = 12
+ JDBCType_JDBCTypeLongVarchar JDBCType = -1
+ JDBCType_JDBCTypeDate JDBCType = 91
+ JDBCType_JDBCTypeTime JDBCType = 92
+ JDBCType_JDBCTypeTimestamp JDBCType = 93
+ JDBCType_JDBCTypeBinary JDBCType = -2
+ JDBCType_JDBCTypeVarBinary JDBCType = -3
+ JDBCType_JDBCTypeLongVarBinary JDBCType = -4
+ JDBCType_JDBCTypeOther JDBCType = 1111
+ JDBCType_JDBCTypeJavaObject JDBCType = 2000
+ JDBCType_JDBCTypeDistinct JDBCType = 2001
+ JDBCType_JDBCTypeStruct JDBCType = 2002
+ JDBCType_JDBCTypeArray JDBCType = 2003
+ JDBCType_JDBCTypeBlob JDBCType = 2004
+ JDBCType_JDBCTypeClob JDBCType = 2005
+ JDBCType_JDBCTypeRef JDBCType = 2006
+ JDBCType_JDBCTypeDateLink JDBCType = 70
+ JDBCType_JDBCTypeBoolean JDBCType = 16
+ JDBCType_JDBCTypeRowID JDBCType = -8
+ JDBCType_JDBCTypeNchar JDBCType = -15
+ JDBCType_JDBCTypeNvarchar JDBCType = -9
+ JDBCType_JDBCTypeLongNvVarchar JDBCType = -16
+ JDBCType_JDBCTypeNclob JDBCType = 2011
+ JDBCType_JDBCTypeSqlXML JDBCType = 2009
+ JDBCType_JDBCTypeRefCursor JDBCType = 2012
+ JDBCType_JDBCTypeTimeWithTimeZone JDBCType = 2013
+ JDBCType_JDBCTypeTimestampWithTimezone JDBCType = 2014
+)
+
+// Enum value maps for JDBCType.
+var (
+ JDBCType_name = map[int32]string{
+ 0: "JDBCTypeNull",
+ -7: "JDBCTypeBit",
+ -6: "JDBCTypeTinyInt",
+ 5: "JDBCTypeSmallInt",
+ 4: "JDBCTypeInteger",
+ -5: "JDBCTypeBigInt",
+ 6: "JDBCTypeFloat",
+ 7: "JDBCTypeReal",
+ 8: "JDBCTypeDouble",
+ 2: "JDBCTypeNumberic",
+ 3: "JDBCTypeDecimal",
+ 1: "JDBCTypeChar",
+ 12: "JDBCTypeVarchar",
+ -1: "JDBCTypeLongVarchar",
+ 91: "JDBCTypeDate",
+ 92: "JDBCTypeTime",
+ 93: "JDBCTypeTimestamp",
+ -2: "JDBCTypeBinary",
+ -3: "JDBCTypeVarBinary",
+ -4: "JDBCTypeLongVarBinary",
+ 1111: "JDBCTypeOther",
+ 2000: "JDBCTypeJavaObject",
+ 2001: "JDBCTypeDistinct",
+ 2002: "JDBCTypeStruct",
+ 2003: "JDBCTypeArray",
+ 2004: "JDBCTypeBlob",
+ 2005: "JDBCTypeClob",
+ 2006: "JDBCTypeRef",
+ 70: "JDBCTypeDateLink",
+ 16: "JDBCTypeBoolean",
+ -8: "JDBCTypeRowID",
+ -15: "JDBCTypeNchar",
+ -9: "JDBCTypeNvarchar",
+ -16: "JDBCTypeLongNvVarchar",
+ 2011: "JDBCTypeNclob",
+ 2009: "JDBCTypeSqlXML",
+ 2012: "JDBCTypeRefCursor",
+ 2013: "JDBCTypeTimeWithTimeZone",
+ 2014: "JDBCTypeTimestampWithTimezone",
+ }
+ JDBCType_value = map[string]int32{
+ "JDBCTypeNull": 0,
+ "JDBCTypeBit": -7,
+ "JDBCTypeTinyInt": -6,
+ "JDBCTypeSmallInt": 5,
+ "JDBCTypeInteger": 4,
+ "JDBCTypeBigInt": -5,
+ "JDBCTypeFloat": 6,
+ "JDBCTypeReal": 7,
+ "JDBCTypeDouble": 8,
+ "JDBCTypeNumberic": 2,
+ "JDBCTypeDecimal": 3,
+ "JDBCTypeChar": 1,
+ "JDBCTypeVarchar": 12,
+ "JDBCTypeLongVarchar": -1,
+ "JDBCTypeDate": 91,
+ "JDBCTypeTime": 92,
+ "JDBCTypeTimestamp": 93,
+ "JDBCTypeBinary": -2,
+ "JDBCTypeVarBinary": -3,
+ "JDBCTypeLongVarBinary": -4,
+ "JDBCTypeOther": 1111,
+ "JDBCTypeJavaObject": 2000,
+ "JDBCTypeDistinct": 2001,
+ "JDBCTypeStruct": 2002,
+ "JDBCTypeArray": 2003,
+ "JDBCTypeBlob": 2004,
+ "JDBCTypeClob": 2005,
+ "JDBCTypeRef": 2006,
+ "JDBCTypeDateLink": 70,
+ "JDBCTypeBoolean": 16,
+ "JDBCTypeRowID": -8,
+ "JDBCTypeNchar": -15,
+ "JDBCTypeNvarchar": -9,
+ "JDBCTypeLongNvVarchar": -16,
+ "JDBCTypeNclob": 2011,
+ "JDBCTypeSqlXML": 2009,
+ "JDBCTypeRefCursor": 2012,
+ "JDBCTypeTimeWithTimeZone": 2013,
+ "JDBCTypeTimestampWithTimezone": 2014,
+ }
+)
+
+func (x JDBCType) Enum() *JDBCType {
+ p := new(JDBCType)
+ *p = x
+ return p
+}
+
+func (x JDBCType) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (JDBCType) Descriptor() protoreflect.EnumDescriptor {
+ return file_branch_undo_log_proto_enumTypes[1].Descriptor()
+}
+
+func (JDBCType) Type() protoreflect.EnumType {
+ return &file_branch_undo_log_proto_enumTypes[1]
+}
+
+func (x JDBCType) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use JDBCType.Descriptor instead.
+func (JDBCType) EnumDescriptor() ([]byte, []int) {
+ return file_branch_undo_log_proto_rawDescGZIP(), []int{1}
+}
+
+type SQLType int32
+
+const (
+ SQLType_SQLTypeSelect SQLType = 0
+ SQLType_SQLTypeInsert SQLType = 1
+ SQLType_SQLTypeUpdate SQLType = 2
+ SQLType_SQLTypeDelete SQLType = 3
+ SQLType_SQLTypeSelectForUpdate SQLType = 4
+ SQLType_SQLTypeReplace SQLType = 5
+ SQLType_SQLTypeTruncate SQLType = 6
+ SQLType_SQLTypeCreate SQLType = 7
+ SQLType_SQLTypeDrop SQLType = 8
+ SQLType_SQLTypeLoad SQLType = 9
+ SQLType_SQLTypeMerge SQLType = 10
+ SQLType_SQLTypeShow SQLType = 11
+ SQLType_SQLTypeAlter SQLType = 12
+ SQLType_SQLTypeRename SQLType = 13
+ SQLType_SQLTypeDump SQLType = 14
+ SQLType_SQLTypeDebug SQLType = 15
+ SQLType_SQLTypeExplain SQLType = 16
+ SQLType_SQLTypeProcedure SQLType = 17
+ SQLType_SQLTypeDesc SQLType = 18
+ SQLType_SQLLastInsertID SQLType = 19
+ SQLType_SQLSelectWithoutTable SQLType = 20
+ SQLType_SQLCreateSequence SQLType = 21
+ SQLType_SQLShowSequence SQLType = 22
+ SQLType_SQLGetSequence SQLType = 23
+ SQLType_SQLAlterSequence SQLType = 24
+ SQLType_SQLDropSequence SQLType = 25
+ SQLType_SQLTddlShow SQLType = 26
+ SQLType_SQLTypeSet SQLType = 27
+ SQLType_SQLTypeReload SQLType = 28
+ SQLType_SQLTypeSelectUnion SQLType = 29
+ SQLType_SQLTypeCreateTable SQLType = 30
+ SQLType_SQLTypeDropTable SQLType = 31
+ SQLType_SQLTypeAlterTable SQLType = 32
+ SQLType_SQLTypeSavePoint SQLType = 33
+ SQLType_SQLTypeSelectFromUpdate SQLType = 34
+ SQLType_SQLTypeMultiDelete SQLType = 35
+ SQLType_SQLTypeMultiUpdate SQLType = 36
+ SQLType_SQLTypeCreateIndex SQLType = 37
+ SQLType_SQLTypeDropIndex SQLType = 38
+ SQLType_SQLTypeKill SQLType = 39
+ SQLType_SQLTypeLockTables SQLType = 40
+ SQLType_SQLTypeUnLockTables SQLType = 41
+ SQLType_SQLTypeCheckTable SQLType = 42
+ SQLType_SQLTypeSelectFoundRows SQLType = 43
+ SQLType_SQLTypeInsertIgnore SQLType = 101 // Adjusted the value to match Go's logic
+ SQLType_SQLTypeInsertOnDuplicateUpdate SQLType = 102
+ SQLType_SQLTypeMulti SQLType = 1044 // Adjusted the value to match Go's logic
+ SQLType_SQLTypeUnknown SQLType = 1045
+)
+
+// Enum value maps for SQLType.
+var (
+ SQLType_name = map[int32]string{
+ 0: "SQLTypeSelect",
+ 1: "SQLTypeInsert",
+ 2: "SQLTypeUpdate",
+ 3: "SQLTypeDelete",
+ 4: "SQLTypeSelectForUpdate",
+ 5: "SQLTypeReplace",
+ 6: "SQLTypeTruncate",
+ 7: "SQLTypeCreate",
+ 8: "SQLTypeDrop",
+ 9: "SQLTypeLoad",
+ 10: "SQLTypeMerge",
+ 11: "SQLTypeShow",
+ 12: "SQLTypeAlter",
+ 13: "SQLTypeRename",
+ 14: "SQLTypeDump",
+ 15: "SQLTypeDebug",
+ 16: "SQLTypeExplain",
+ 17: "SQLTypeProcedure",
+ 18: "SQLTypeDesc",
+ 19: "SQLLastInsertID",
+ 20: "SQLSelectWithoutTable",
+ 21: "SQLCreateSequence",
+ 22: "SQLShowSequence",
+ 23: "SQLGetSequence",
+ 24: "SQLAlterSequence",
+ 25: "SQLDropSequence",
+ 26: "SQLTddlShow",
+ 27: "SQLTypeSet",
+ 28: "SQLTypeReload",
+ 29: "SQLTypeSelectUnion",
+ 30: "SQLTypeCreateTable",
+ 31: "SQLTypeDropTable",
+ 32: "SQLTypeAlterTable",
+ 33: "SQLTypeSavePoint",
+ 34: "SQLTypeSelectFromUpdate",
+ 35: "SQLTypeMultiDelete",
+ 36: "SQLTypeMultiUpdate",
+ 37: "SQLTypeCreateIndex",
+ 38: "SQLTypeDropIndex",
+ 39: "SQLTypeKill",
+ 40: "SQLTypeLockTables",
+ 41: "SQLTypeUnLockTables",
+ 42: "SQLTypeCheckTable",
+ 43: "SQLTypeSelectFoundRows",
+ 101: "SQLTypeInsertIgnore",
+ 102: "SQLTypeInsertOnDuplicateUpdate",
+ 1044: "SQLTypeMulti",
+ 1045: "SQLTypeUnknown",
+ }
+ SQLType_value = map[string]int32{
+ "SQLTypeSelect": 0,
+ "SQLTypeInsert": 1,
+ "SQLTypeUpdate": 2,
+ "SQLTypeDelete": 3,
+ "SQLTypeSelectForUpdate": 4,
+ "SQLTypeReplace": 5,
+ "SQLTypeTruncate": 6,
+ "SQLTypeCreate": 7,
+ "SQLTypeDrop": 8,
+ "SQLTypeLoad": 9,
+ "SQLTypeMerge": 10,
+ "SQLTypeShow": 11,
+ "SQLTypeAlter": 12,
+ "SQLTypeRename": 13,
+ "SQLTypeDump": 14,
+ "SQLTypeDebug": 15,
+ "SQLTypeExplain": 16,
+ "SQLTypeProcedure": 17,
+ "SQLTypeDesc": 18,
+ "SQLLastInsertID": 19,
+ "SQLSelectWithoutTable": 20,
+ "SQLCreateSequence": 21,
+ "SQLShowSequence": 22,
+ "SQLGetSequence": 23,
+ "SQLAlterSequence": 24,
+ "SQLDropSequence": 25,
+ "SQLTddlShow": 26,
+ "SQLTypeSet": 27,
+ "SQLTypeReload": 28,
+ "SQLTypeSelectUnion": 29,
+ "SQLTypeCreateTable": 30,
+ "SQLTypeDropTable": 31,
+ "SQLTypeAlterTable": 32,
+ "SQLTypeSavePoint": 33,
+ "SQLTypeSelectFromUpdate": 34,
+ "SQLTypeMultiDelete": 35,
+ "SQLTypeMultiUpdate": 36,
+ "SQLTypeCreateIndex": 37,
+ "SQLTypeDropIndex": 38,
+ "SQLTypeKill": 39,
+ "SQLTypeLockTables": 40,
+ "SQLTypeUnLockTables": 41,
+ "SQLTypeCheckTable": 42,
+ "SQLTypeSelectFoundRows": 43,
+ "SQLTypeInsertIgnore": 101,
+ "SQLTypeInsertOnDuplicateUpdate": 102,
+ "SQLTypeMulti": 1044,
+ "SQLTypeUnknown": 1045,
+ }
+)
+
+func (x SQLType) Enum() *SQLType {
+ p := new(SQLType)
+ *p = x
+ return p
+}
+
+func (x SQLType) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (SQLType) Descriptor() protoreflect.EnumDescriptor {
+ return file_branch_undo_log_proto_enumTypes[2].Descriptor()
+}
+
+func (SQLType) Type() protoreflect.EnumType {
+ return &file_branch_undo_log_proto_enumTypes[2]
+}
+
+func (x SQLType) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use SQLType.Descriptor instead.
+func (SQLType) EnumDescriptor() ([]byte, []int) {
+ return file_branch_undo_log_proto_rawDescGZIP(), []int{2}
+}
+
+type BranchUndoLog struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Xid string `protobuf:"bytes,1,opt,name=Xid,proto3" json:"Xid,omitempty"`
+ BranchID uint64 `protobuf:"varint,2,opt,name=BranchID,proto3" json:"BranchID,omitempty"`
+ Logs []*SQLUndoLog `protobuf:"bytes,3,rep,name=Logs,proto3" json:"Logs,omitempty"`
+}
+
+func (x *BranchUndoLog) Reset() {
+ *x = BranchUndoLog{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_branch_undo_log_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *BranchUndoLog) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BranchUndoLog) ProtoMessage() {}
+
+func (x *BranchUndoLog) ProtoReflect() protoreflect.Message {
+ mi := &file_branch_undo_log_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use BranchUndoLog.ProtoReflect.Descriptor instead.
+func (*BranchUndoLog) Descriptor() ([]byte, []int) {
+ return file_branch_undo_log_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *BranchUndoLog) GetXid() string {
+ if x != nil {
+ return x.Xid
+ }
+ return ""
+}
+
+func (x *BranchUndoLog) GetBranchID() uint64 {
+ if x != nil {
+ return x.BranchID
+ }
+ return 0
+}
+
+func (x *BranchUndoLog) GetLogs() []*SQLUndoLog {
+ if x != nil {
+ return x.Logs
+ }
+ return nil
+}
+
+type SQLUndoLog struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ SQLType SQLType `protobuf:"varint,1,opt,name=SQLType,proto3,enum=parser.SQLType" json:"SQLType,omitempty"`
+ TableName string `protobuf:"bytes,2,opt,name=TableName,proto3" json:"TableName,omitempty"`
+ BeforeImage *RecordImage `protobuf:"bytes,3,opt,name=BeforeImage,proto3" json:"BeforeImage,omitempty"`
+ AfterImage *RecordImage `protobuf:"bytes,4,opt,name=AfterImage,proto3" json:"AfterImage,omitempty"`
+}
+
+func (x *SQLUndoLog) Reset() {
+ *x = SQLUndoLog{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_branch_undo_log_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SQLUndoLog) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SQLUndoLog) ProtoMessage() {}
+
+func (x *SQLUndoLog) ProtoReflect() protoreflect.Message {
+ mi := &file_branch_undo_log_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SQLUndoLog.ProtoReflect.Descriptor instead.
+func (*SQLUndoLog) Descriptor() ([]byte, []int) {
+ return file_branch_undo_log_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *SQLUndoLog) GetSQLType() SQLType {
+ if x != nil {
+ return x.SQLType
+ }
+ return SQLType_SQLTypeSelect
+}
+
+func (x *SQLUndoLog) GetTableName() string {
+ if x != nil {
+ return x.TableName
+ }
+ return ""
+}
+
+func (x *SQLUndoLog) GetBeforeImage() *RecordImage {
+ if x != nil {
+ return x.BeforeImage
+ }
+ return nil
+}
+
+func (x *SQLUndoLog) GetAfterImage() *RecordImage {
+ if x != nil {
+ return x.AfterImage
+ }
+ return nil
+}
+
+type RecordImage struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Index int32 `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"`
+ TableName string `protobuf:"bytes,2,opt,name=TableName,proto3" json:"TableName,omitempty"`
+ SQLType SQLType `protobuf:"varint,3,opt,name=SQLType,proto3,enum=parser.SQLType" json:"SQLType,omitempty"`
+ Rows []*RowImage `protobuf:"bytes,4,rep,name=Rows,proto3" json:"Rows,omitempty"`
+ TableMeta *TableMeta `protobuf:"bytes,5,opt,name=TableMeta,proto3" json:"TableMeta,omitempty"`
+}
+
+func (x *RecordImage) Reset() {
+ *x = RecordImage{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_branch_undo_log_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *RecordImage) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RecordImage) ProtoMessage() {}
+
+func (x *RecordImage) ProtoReflect() protoreflect.Message {
+ mi := &file_branch_undo_log_proto_msgTypes[2]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use RecordImage.ProtoReflect.Descriptor instead.
+func (*RecordImage) Descriptor() ([]byte, []int) {
+ return file_branch_undo_log_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *RecordImage) GetIndex() int32 {
+ if x != nil {
+ return x.Index
+ }
+ return 0
+}
+
+func (x *RecordImage) GetTableName() string {
+ if x != nil {
+ return x.TableName
+ }
+ return ""
+}
+
+func (x *RecordImage) GetSQLType() SQLType {
+ if x != nil {
+ return x.SQLType
+ }
+ return SQLType_SQLTypeSelect
+}
+
+func (x *RecordImage) GetRows() []*RowImage {
+ if x != nil {
+ return x.Rows
+ }
+ return nil
+}
+
+func (x *RecordImage) GetTableMeta() *TableMeta {
+ if x != nil {
+ return x.TableMeta
+ }
+ return nil
+}
+
+type RowImage struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Columns []*ColumnImage `protobuf:"bytes,1,rep,name=Columns,proto3" json:"Columns,omitempty"`
+}
+
+func (x *RowImage) Reset() {
+ *x = RowImage{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_branch_undo_log_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *RowImage) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RowImage) ProtoMessage() {}
+
+func (x *RowImage) ProtoReflect() protoreflect.Message {
+ mi := &file_branch_undo_log_proto_msgTypes[3]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use RowImage.ProtoReflect.Descriptor instead.
+func (*RowImage) Descriptor() ([]byte, []int) {
+ return file_branch_undo_log_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *RowImage) GetColumns() []*ColumnImage {
+ if x != nil {
+ return x.Columns
+ }
+ return nil
+}
+
+type ColumnImage struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ KeyType IndexType `protobuf:"varint,1,opt,name=KeyType,proto3,enum=parser.IndexType" json:"KeyType,omitempty"`
+ ColumnName string `protobuf:"bytes,2,opt,name=ColumnName,proto3" json:"ColumnName,omitempty"`
+ ColumnType JDBCType `protobuf:"varint,3,opt,name=ColumnType,proto3,enum=parser.JDBCType" json:"ColumnType,omitempty"`
+ Value *anypb.Any `protobuf:"bytes,4,opt,name=Value,proto3" json:"Value,omitempty"`
+}
+
+func (x *ColumnImage) Reset() {
+ *x = ColumnImage{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_branch_undo_log_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ColumnImage) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ColumnImage) ProtoMessage() {}
+
+func (x *ColumnImage) ProtoReflect() protoreflect.Message {
+ mi := &file_branch_undo_log_proto_msgTypes[4]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ColumnImage.ProtoReflect.Descriptor instead.
+func (*ColumnImage) Descriptor() ([]byte, []int) {
+ return file_branch_undo_log_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *ColumnImage) GetKeyType() IndexType {
+ if x != nil {
+ return x.KeyType
+ }
+ return IndexType_IndexTypeNull
+}
+
+func (x *ColumnImage) GetColumnName() string {
+ if x != nil {
+ return x.ColumnName
+ }
+ return ""
+}
+
+func (x *ColumnImage) GetColumnType() JDBCType {
+ if x != nil {
+ return x.ColumnType
+ }
+ return JDBCType_JDBCTypeNull
+}
+
+func (x *ColumnImage) GetValue() *anypb.Any {
+ if x != nil {
+ return x.Value
+ }
+ return nil
+}
+
+type TableMeta struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ TableName string `protobuf:"bytes,1,opt,name=TableName,proto3" json:"TableName,omitempty"`
+ Columns map[string]*ColumnMeta `protobuf:"bytes,2,rep,name=Columns,proto3" json:"Columns,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ Indexs map[string]*IndexMeta `protobuf:"bytes,3,rep,name=Indexs,proto3" json:"Indexs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ ColumnNames []string `protobuf:"bytes,4,rep,name=ColumnNames,proto3" json:"ColumnNames,omitempty"`
+}
+
+func (x *TableMeta) Reset() {
+ *x = TableMeta{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_branch_undo_log_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *TableMeta) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TableMeta) ProtoMessage() {}
+
+func (x *TableMeta) ProtoReflect() protoreflect.Message {
+ mi := &file_branch_undo_log_proto_msgTypes[5]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use TableMeta.ProtoReflect.Descriptor instead.
+func (*TableMeta) Descriptor() ([]byte, []int) {
+ return file_branch_undo_log_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *TableMeta) GetTableName() string {
+ if x != nil {
+ return x.TableName
+ }
+ return ""
+}
+
+func (x *TableMeta) GetColumns() map[string]*ColumnMeta {
+ if x != nil {
+ return x.Columns
+ }
+ return nil
+}
+
+func (x *TableMeta) GetIndexs() map[string]*IndexMeta {
+ if x != nil {
+ return x.Indexs
+ }
+ return nil
+}
+
+func (x *TableMeta) GetColumnNames() []string {
+ if x != nil {
+ return x.ColumnNames
+ }
+ return nil
+}
+
+type ColumnMeta struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Schema string `protobuf:"bytes,1,opt,name=Schema,proto3" json:"Schema,omitempty"`
+ Table string `protobuf:"bytes,2,opt,name=Table,proto3" json:"Table,omitempty"`
+ ColumnDef []byte `protobuf:"bytes,3,opt,name=ColumnDef,proto3" json:"ColumnDef,omitempty"`
+ Autoincrement bool `protobuf:"varint,4,opt,name=Autoincrement,proto3" json:"Autoincrement,omitempty"`
+ ColumnName string `protobuf:"bytes,5,opt,name=ColumnName,proto3" json:"ColumnName,omitempty"`
+ ColumnType string `protobuf:"bytes,6,opt,name=ColumnType,proto3" json:"ColumnType,omitempty"`
+ DatabaseType int32 `protobuf:"varint,7,opt,name=DatabaseType,proto3" json:"DatabaseType,omitempty"`
+ DatabaseTypeString string `protobuf:"bytes,8,opt,name=DatabaseTypeString,proto3" json:"DatabaseTypeString,omitempty"`
+ ColumnKey string `protobuf:"bytes,9,opt,name=ColumnKey,proto3" json:"ColumnKey,omitempty"`
+ IsNullable int32 `protobuf:"varint,10,opt,name=IsNullable,proto3" json:"IsNullable,omitempty"`
+ Extra string `protobuf:"bytes,11,opt,name=Extra,proto3" json:"Extra,omitempty"`
+}
+
+func (x *ColumnMeta) Reset() {
+ *x = ColumnMeta{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_branch_undo_log_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ColumnMeta) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ColumnMeta) ProtoMessage() {}
+
+func (x *ColumnMeta) ProtoReflect() protoreflect.Message {
+ mi := &file_branch_undo_log_proto_msgTypes[6]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ColumnMeta.ProtoReflect.Descriptor instead.
+func (*ColumnMeta) Descriptor() ([]byte, []int) {
+ return file_branch_undo_log_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *ColumnMeta) GetSchema() string {
+ if x != nil {
+ return x.Schema
+ }
+ return ""
+}
+
+func (x *ColumnMeta) GetTable() string {
+ if x != nil {
+ return x.Table
+ }
+ return ""
+}
+
+func (x *ColumnMeta) GetColumnDef() []byte {
+ if x != nil {
+ return x.ColumnDef
+ }
+ return nil
+}
+
+func (x *ColumnMeta) GetAutoincrement() bool {
+ if x != nil {
+ return x.Autoincrement
+ }
+ return false
+}
+
+func (x *ColumnMeta) GetColumnName() string {
+ if x != nil {
+ return x.ColumnName
+ }
+ return ""
+}
+
+func (x *ColumnMeta) GetColumnType() string {
+ if x != nil {
+ return x.ColumnType
+ }
+ return ""
+}
+
+func (x *ColumnMeta) GetDatabaseType() int32 {
+ if x != nil {
+ return x.DatabaseType
+ }
+ return 0
+}
+
+func (x *ColumnMeta) GetDatabaseTypeString() string {
+ if x != nil {
+ return x.DatabaseTypeString
+ }
+ return ""
+}
+
+func (x *ColumnMeta) GetColumnKey() string {
+ if x != nil {
+ return x.ColumnKey
+ }
+ return ""
+}
+
+func (x *ColumnMeta) GetIsNullable() int32 {
+ if x != nil {
+ return x.IsNullable
+ }
+ return 0
+}
+
+func (x *ColumnMeta) GetExtra() string {
+ if x != nil {
+ return x.Extra
+ }
+ return ""
+}
+
+type IndexMeta struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Schema string `protobuf:"bytes,1,opt,name=Schema,proto3" json:"Schema,omitempty"`
+ Table string `protobuf:"bytes,2,opt,name=Table,proto3" json:"Table,omitempty"`
+ Name string `protobuf:"bytes,3,opt,name=Name,proto3" json:"Name,omitempty"`
+ ColumnName string `protobuf:"bytes,4,opt,name=ColumnName,proto3" json:"ColumnName,omitempty"`
+ IType IndexType `protobuf:"varint,5,opt,name=IType,proto3,enum=parser.IndexType" json:"IType,omitempty"`
+ Columns []*ColumnMeta `protobuf:"bytes,6,rep,name=Columns,proto3" json:"Columns,omitempty"`
+}
+
+func (x *IndexMeta) Reset() {
+ *x = IndexMeta{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_branch_undo_log_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IndexMeta) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexMeta) ProtoMessage() {}
+
+func (x *IndexMeta) ProtoReflect() protoreflect.Message {
+ mi := &file_branch_undo_log_proto_msgTypes[7]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use IndexMeta.ProtoReflect.Descriptor instead.
+func (*IndexMeta) Descriptor() ([]byte, []int) {
+ return file_branch_undo_log_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *IndexMeta) GetSchema() string {
+ if x != nil {
+ return x.Schema
+ }
+ return ""
+}
+
+func (x *IndexMeta) GetTable() string {
+ if x != nil {
+ return x.Table
+ }
+ return ""
+}
+
+func (x *IndexMeta) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *IndexMeta) GetColumnName() string {
+ if x != nil {
+ return x.ColumnName
+ }
+ return ""
+}
+
+func (x *IndexMeta) GetIType() IndexType {
+ if x != nil {
+ return x.IType
+ }
+ return IndexType_IndexTypeNull
+}
+
+func (x *IndexMeta) GetColumns() []*ColumnMeta {
+ if x != nil {
+ return x.Columns
+ }
+ return nil
+}
+
+var File_branch_undo_log_proto protoreflect.FileDescriptor
+
+var file_branch_undo_log_proto_rawDesc = []byte{
+ 0x0a, 0x15, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x5f, 0x75, 0x6e, 0x64, 0x6f, 0x5f, 0x6c, 0x6f,
+ 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x1a,
+ 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+ 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x65, 0x0a, 0x0d, 0x42, 0x72,
+ 0x61, 0x6e, 0x63, 0x68, 0x55, 0x6e, 0x64, 0x6f, 0x4c, 0x6f, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x58,
+ 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x58, 0x69, 0x64, 0x12, 0x1a, 0x0a,
+ 0x08, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52,
+ 0x08, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x04, 0x4c, 0x6f, 0x67,
+ 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72,
+ 0x2e, 0x53, 0x51, 0x4c, 0x55, 0x6e, 0x64, 0x6f, 0x4c, 0x6f, 0x67, 0x52, 0x04, 0x4c, 0x6f, 0x67,
+ 0x73, 0x22, 0xc1, 0x01, 0x0a, 0x0a, 0x53, 0x51, 0x4c, 0x55, 0x6e, 0x64, 0x6f, 0x4c, 0x6f, 0x67,
+ 0x12, 0x29, 0x0a, 0x07, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x51, 0x4c, 0x54, 0x79,
+ 0x70, 0x65, 0x52, 0x07, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
+ 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x0b, 0x42, 0x65, 0x66,
+ 0x6f, 0x72, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13,
+ 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, 0x6d,
+ 0x61, 0x67, 0x65, 0x52, 0x0b, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65,
+ 0x12, 0x33, 0x0a, 0x0a, 0x41, 0x66, 0x74, 0x65, 0x72, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x52, 0x65,
+ 0x63, 0x6f, 0x72, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x0a, 0x41, 0x66, 0x74, 0x65, 0x72,
+ 0x49, 0x6d, 0x61, 0x67, 0x65, 0x22, 0xc3, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64,
+ 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
+ 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x53, 0x51, 0x4c,
+ 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x61, 0x72,
+ 0x73, 0x65, 0x72, 0x2e, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x53, 0x51, 0x4c,
+ 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x04, 0x52, 0x6f, 0x77, 0x73, 0x18, 0x04, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x52, 0x6f, 0x77, 0x49,
+ 0x6d, 0x61, 0x67, 0x65, 0x52, 0x04, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x2f, 0x0a, 0x09, 0x54, 0x61,
+ 0x62, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e,
+ 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61,
+ 0x52, 0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x22, 0x39, 0x0a, 0x08, 0x52,
+ 0x6f, 0x77, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x2d, 0x0a, 0x07, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
+ 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65,
+ 0x72, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x07, 0x43,
+ 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0xb8, 0x01, 0x0a, 0x0b, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
+ 0x6e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70,
+ 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72,
+ 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x4b, 0x65, 0x79, 0x54,
+ 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d,
+ 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e,
+ 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x0a, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70,
+ 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72,
+ 0x2e, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
+ 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75,
+ 0x65, 0x22, 0xda, 0x02, 0x0a, 0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12,
+ 0x1c, 0x0a, 0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a,
+ 0x07, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e,
+ 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x65, 0x74,
+ 0x61, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07,
+ 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x35, 0x0a, 0x06, 0x49, 0x6e, 0x64, 0x65, 0x78,
+ 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72,
+ 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78,
+ 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x73, 0x12, 0x20,
+ 0x0a, 0x0b, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x04, 0x20,
+ 0x03, 0x28, 0x09, 0x52, 0x0b, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73,
+ 0x1a, 0x4e, 0x0a, 0x0c, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
+ 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
+ 0x65, 0x79, 0x12, 0x28, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
+ 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
+ 0x1a, 0x4c, 0x0a, 0x0b, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
+ 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
+ 0x79, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x11, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4d,
+ 0x65, 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe6,
+ 0x02, 0x0a, 0x0a, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x16, 0x0a,
+ 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53,
+ 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x43,
+ 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09,
+ 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x66, 0x12, 0x24, 0x0a, 0x0d, 0x41, 0x75, 0x74,
+ 0x6f, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08,
+ 0x52, 0x0d, 0x41, 0x75, 0x74, 0x6f, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12,
+ 0x1e, 0x0a, 0x0a, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x0a, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12,
+ 0x1e, 0x0a, 0x0a, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x0a, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12,
+ 0x22, 0x0a, 0x0c, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18,
+ 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x54,
+ 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x54,
+ 0x79, 0x70, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x12, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x53, 0x74, 0x72,
+ 0x69, 0x6e, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4b, 0x65, 0x79,
+ 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4b, 0x65,
+ 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x49, 0x73, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18,
+ 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x49, 0x73, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c,
+ 0x65, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x78, 0x74, 0x72, 0x61, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x05, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0xc4, 0x01, 0x0a, 0x09, 0x49, 0x6e, 0x64, 0x65,
+ 0x78, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x14, 0x0a,
+ 0x05, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x61,
+ 0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
+ 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x43, 0x6f, 0x6c,
+ 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x05, 0x49, 0x54, 0x79, 0x70, 0x65,
+ 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x2e,
+ 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x49, 0x54, 0x79, 0x70, 0x65,
+ 0x12, 0x2c, 0x0a, 0x07, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28,
+ 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
+ 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x07, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x2a, 0x37,
+ 0x0a, 0x09, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x49,
+ 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x75, 0x6c, 0x6c, 0x10, 0x00, 0x12, 0x17,
+ 0x0a, 0x13, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61,
+ 0x72, 0x79, 0x4b, 0x65, 0x79, 0x10, 0x01, 0x2a, 0xb4, 0x07, 0x0a, 0x08, 0x4a, 0x44, 0x42, 0x43,
+ 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65,
+ 0x4e, 0x75, 0x6c, 0x6c, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x0b, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79,
+ 0x70, 0x65, 0x42, 0x69, 0x74, 0x10, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
+ 0x12, 0x1c, 0x0a, 0x0f, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x54, 0x69, 0x6e, 0x79,
+ 0x49, 0x6e, 0x74, 0x10, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x14,
+ 0x0a, 0x10, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x49,
+ 0x6e, 0x74, 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65,
+ 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x10, 0x04, 0x12, 0x1b, 0x0a, 0x0e, 0x4a, 0x44, 0x42,
+ 0x43, 0x54, 0x79, 0x70, 0x65, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x10, 0xfb, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79,
+ 0x70, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x4a, 0x44, 0x42,
+ 0x43, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x61, 0x6c, 0x10, 0x07, 0x12, 0x12, 0x0a, 0x0e, 0x4a,
+ 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x10, 0x08, 0x12,
+ 0x14, 0x0a, 0x10, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65,
+ 0x72, 0x69, 0x63, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70,
+ 0x65, 0x44, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x4a, 0x44,
+ 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x43, 0x68, 0x61, 0x72, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f,
+ 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x56, 0x61, 0x72, 0x63, 0x68, 0x61, 0x72, 0x10,
+ 0x0c, 0x12, 0x20, 0x0a, 0x13, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x4c, 0x6f, 0x6e,
+ 0x67, 0x56, 0x61, 0x72, 0x63, 0x68, 0x61, 0x72, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x44,
+ 0x61, 0x74, 0x65, 0x10, 0x5b, 0x12, 0x10, 0x0a, 0x0c, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70,
+ 0x65, 0x54, 0x69, 0x6d, 0x65, 0x10, 0x5c, 0x12, 0x15, 0x0a, 0x11, 0x4a, 0x44, 0x42, 0x43, 0x54,
+ 0x79, 0x70, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x10, 0x5d, 0x12, 0x1b,
+ 0x0a, 0x0e, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79,
+ 0x10, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x1e, 0x0a, 0x11, 0x4a,
+ 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x56, 0x61, 0x72, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79,
+ 0x10, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x22, 0x0a, 0x15, 0x4a,
+ 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x4c, 0x6f, 0x6e, 0x67, 0x56, 0x61, 0x72, 0x42, 0x69,
+ 0x6e, 0x61, 0x72, 0x79, 0x10, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12,
+ 0x12, 0x0a, 0x0d, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x4f, 0x74, 0x68, 0x65, 0x72,
+ 0x10, 0xd7, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x4a,
+ 0x61, 0x76, 0x61, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x10, 0xd0, 0x0f, 0x12, 0x15, 0x0a, 0x10,
+ 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74,
+ 0x10, 0xd1, 0x0f, 0x12, 0x13, 0x0a, 0x0e, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x53,
+ 0x74, 0x72, 0x75, 0x63, 0x74, 0x10, 0xd2, 0x0f, 0x12, 0x12, 0x0a, 0x0d, 0x4a, 0x44, 0x42, 0x43,
+ 0x54, 0x79, 0x70, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x10, 0xd3, 0x0f, 0x12, 0x11, 0x0a, 0x0c,
+ 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x10, 0xd4, 0x0f, 0x12,
+ 0x11, 0x0a, 0x0c, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6c, 0x6f, 0x62, 0x10,
+ 0xd5, 0x0f, 0x12, 0x10, 0x0a, 0x0b, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65,
+ 0x66, 0x10, 0xd6, 0x0f, 0x12, 0x14, 0x0a, 0x10, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65,
+ 0x44, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x10, 0x46, 0x12, 0x13, 0x0a, 0x0f, 0x4a, 0x44,
+ 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x10, 0x10, 0x12,
+ 0x1a, 0x0a, 0x0d, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x52, 0x6f, 0x77, 0x49, 0x44,
+ 0x10, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x1a, 0x0a, 0x0d, 0x4a,
+ 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x63, 0x68, 0x61, 0x72, 0x10, 0xf1, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x1d, 0x0a, 0x10, 0x4a, 0x44, 0x42, 0x43, 0x54,
+ 0x79, 0x70, 0x65, 0x4e, 0x76, 0x61, 0x72, 0x63, 0x68, 0x61, 0x72, 0x10, 0xf7, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x22, 0x0a, 0x15, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79,
+ 0x70, 0x65, 0x4c, 0x6f, 0x6e, 0x67, 0x4e, 0x76, 0x56, 0x61, 0x72, 0x63, 0x68, 0x61, 0x72, 0x10,
+ 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x12, 0x0a, 0x0d, 0x4a, 0x44,
+ 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x63, 0x6c, 0x6f, 0x62, 0x10, 0xdb, 0x0f, 0x12, 0x13,
+ 0x0a, 0x0e, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x53, 0x71, 0x6c, 0x58, 0x4d, 0x4c,
+ 0x10, 0xd9, 0x0f, 0x12, 0x16, 0x0a, 0x11, 0x4a, 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x52,
+ 0x65, 0x66, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x10, 0xdc, 0x0f, 0x12, 0x1d, 0x0a, 0x18, 0x4a,
+ 0x44, 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x74, 0x68, 0x54,
+ 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x10, 0xdd, 0x0f, 0x12, 0x22, 0x0a, 0x1d, 0x4a, 0x44,
+ 0x42, 0x43, 0x54, 0x79, 0x70, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x57,
+ 0x69, 0x74, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x10, 0xde, 0x0f, 0x2a, 0x8b,
+ 0x08, 0x0a, 0x07, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x51,
+ 0x4c, 0x54, 0x79, 0x70, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x10, 0x00, 0x12, 0x11, 0x0a,
+ 0x0d, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x10, 0x01,
+ 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74,
+ 0x65, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x44, 0x65,
+ 0x6c, 0x65, 0x74, 0x65, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70,
+ 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x46, 0x6f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+ 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x70,
+ 0x6c, 0x61, 0x63, 0x65, 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70,
+ 0x65, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x53,
+ 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x10, 0x07, 0x12, 0x0f,
+ 0x0a, 0x0b, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x44, 0x72, 0x6f, 0x70, 0x10, 0x08, 0x12,
+ 0x0f, 0x0a, 0x0b, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x10, 0x09,
+ 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65,
+ 0x10, 0x0a, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x53, 0x68, 0x6f,
+ 0x77, 0x10, 0x0b, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x41, 0x6c,
+ 0x74, 0x65, 0x72, 0x10, 0x0c, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65,
+ 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x10, 0x0d, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x51, 0x4c, 0x54,
+ 0x79, 0x70, 0x65, 0x44, 0x75, 0x6d, 0x70, 0x10, 0x0e, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x51, 0x4c,
+ 0x54, 0x79, 0x70, 0x65, 0x44, 0x65, 0x62, 0x75, 0x67, 0x10, 0x0f, 0x12, 0x12, 0x0a, 0x0e, 0x53,
+ 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x10, 0x10, 0x12,
+ 0x14, 0x0a, 0x10, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x64,
+ 0x75, 0x72, 0x65, 0x10, 0x11, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65,
+ 0x44, 0x65, 0x73, 0x63, 0x10, 0x12, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x51, 0x4c, 0x4c, 0x61, 0x73,
+ 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x49, 0x44, 0x10, 0x13, 0x12, 0x19, 0x0a, 0x15, 0x53,
+ 0x51, 0x4c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x10, 0x14, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x51, 0x4c, 0x43, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x10, 0x15, 0x12, 0x13, 0x0a,
+ 0x0f, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65,
+ 0x10, 0x16, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x51, 0x4c, 0x47, 0x65, 0x74, 0x53, 0x65, 0x71, 0x75,
+ 0x65, 0x6e, 0x63, 0x65, 0x10, 0x17, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x51, 0x4c, 0x41, 0x6c, 0x74,
+ 0x65, 0x72, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x10, 0x18, 0x12, 0x13, 0x0a, 0x0f,
+ 0x53, 0x51, 0x4c, 0x44, 0x72, 0x6f, 0x70, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x10,
+ 0x19, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x51, 0x4c, 0x54, 0x64, 0x64, 0x6c, 0x53, 0x68, 0x6f, 0x77,
+ 0x10, 0x1a, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x53, 0x65, 0x74,
+ 0x10, 0x1b, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x6c,
+ 0x6f, 0x61, 0x64, 0x10, 0x1c, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65,
+ 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x10, 0x1d, 0x12, 0x16, 0x0a,
+ 0x12, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61,
+ 0x62, 0x6c, 0x65, 0x10, 0x1e, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65,
+ 0x44, 0x72, 0x6f, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x10, 0x1f, 0x12, 0x15, 0x0a, 0x11, 0x53,
+ 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x61, 0x62, 0x6c, 0x65,
+ 0x10, 0x20, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x53, 0x61, 0x76,
+ 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x10, 0x21, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x51, 0x4c, 0x54,
+ 0x79, 0x70, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x10, 0x22, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65,
+ 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x10, 0x23, 0x12, 0x16, 0x0a,
+ 0x12, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x55, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x10, 0x24, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65,
+ 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x10, 0x25, 0x12, 0x14, 0x0a,
+ 0x10, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x44, 0x72, 0x6f, 0x70, 0x49, 0x6e, 0x64, 0x65,
+ 0x78, 0x10, 0x26, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x4b, 0x69,
+ 0x6c, 0x6c, 0x10, 0x27, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x4c,
+ 0x6f, 0x63, 0x6b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x10, 0x28, 0x12, 0x17, 0x0a, 0x13, 0x53,
+ 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x55, 0x6e, 0x4c, 0x6f, 0x63, 0x6b, 0x54, 0x61, 0x62, 0x6c,
+ 0x65, 0x73, 0x10, 0x29, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x43,
+ 0x68, 0x65, 0x63, 0x6b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x10, 0x2a, 0x12, 0x1a, 0x0a, 0x16, 0x53,
+ 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x46, 0x6f, 0x75, 0x6e,
+ 0x64, 0x52, 0x6f, 0x77, 0x73, 0x10, 0x2b, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x51, 0x4c, 0x54, 0x79,
+ 0x70, 0x65, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x10, 0x65,
+ 0x12, 0x22, 0x0a, 0x1e, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x73, 0x65, 0x72,
+ 0x74, 0x4f, 0x6e, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x55, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x10, 0x66, 0x12, 0x11, 0x0a, 0x0c, 0x53, 0x51, 0x4c, 0x54, 0x79, 0x70, 0x65, 0x4d,
+ 0x75, 0x6c, 0x74, 0x69, 0x10, 0x94, 0x08, 0x12, 0x13, 0x0a, 0x0e, 0x53, 0x51, 0x4c, 0x54, 0x79,
+ 0x70, 0x65, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x95, 0x08, 0x42, 0x0a, 0x5a, 0x08,
+ 0x2e, 0x3b, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_branch_undo_log_proto_rawDescOnce sync.Once
+ file_branch_undo_log_proto_rawDescData = file_branch_undo_log_proto_rawDesc
+)
+
+func file_branch_undo_log_proto_rawDescGZIP() []byte {
+ file_branch_undo_log_proto_rawDescOnce.Do(func() {
+ file_branch_undo_log_proto_rawDescData = protoimpl.X.CompressGZIP(file_branch_undo_log_proto_rawDescData)
+ })
+ return file_branch_undo_log_proto_rawDescData
+}
+
+var file_branch_undo_log_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
+var file_branch_undo_log_proto_msgTypes = make([]protoimpl.MessageInfo, 10)
+var file_branch_undo_log_proto_goTypes = []any{
+ (IndexType)(0), // 0: parser.IndexType
+ (JDBCType)(0), // 1: parser.JDBCType
+ (SQLType)(0), // 2: parser.SQLType
+ (*BranchUndoLog)(nil), // 3: parser.BranchUndoLog
+ (*SQLUndoLog)(nil), // 4: parser.SQLUndoLog
+ (*RecordImage)(nil), // 5: parser.RecordImage
+ (*RowImage)(nil), // 6: parser.RowImage
+ (*ColumnImage)(nil), // 7: parser.ColumnImage
+ (*TableMeta)(nil), // 8: parser.TableMeta
+ (*ColumnMeta)(nil), // 9: parser.ColumnMeta
+ (*IndexMeta)(nil), // 10: parser.IndexMeta
+ nil, // 11: parser.TableMeta.ColumnsEntry
+ nil, // 12: parser.TableMeta.IndexsEntry
+ (*anypb.Any)(nil), // 13: google.protobuf.Any
+}
+var file_branch_undo_log_proto_depIdxs = []int32{
+ 4, // 0: parser.BranchUndoLog.Logs:type_name -> parser.SQLUndoLog
+ 2, // 1: parser.SQLUndoLog.SQLType:type_name -> parser.SQLType
+ 5, // 2: parser.SQLUndoLog.BeforeImage:type_name -> parser.RecordImage
+ 5, // 3: parser.SQLUndoLog.AfterImage:type_name -> parser.RecordImage
+ 2, // 4: parser.RecordImage.SQLType:type_name -> parser.SQLType
+ 6, // 5: parser.RecordImage.Rows:type_name -> parser.RowImage
+ 8, // 6: parser.RecordImage.TableMeta:type_name -> parser.TableMeta
+ 7, // 7: parser.RowImage.Columns:type_name -> parser.ColumnImage
+ 0, // 8: parser.ColumnImage.KeyType:type_name -> parser.IndexType
+ 1, // 9: parser.ColumnImage.ColumnType:type_name -> parser.JDBCType
+ 13, // 10: parser.ColumnImage.Value:type_name -> google.protobuf.Any
+ 11, // 11: parser.TableMeta.Columns:type_name -> parser.TableMeta.ColumnsEntry
+ 12, // 12: parser.TableMeta.Indexs:type_name -> parser.TableMeta.IndexsEntry
+ 0, // 13: parser.IndexMeta.IType:type_name -> parser.IndexType
+ 9, // 14: parser.IndexMeta.Columns:type_name -> parser.ColumnMeta
+ 9, // 15: parser.TableMeta.ColumnsEntry.value:type_name -> parser.ColumnMeta
+ 10, // 16: parser.TableMeta.IndexsEntry.value:type_name -> parser.IndexMeta
+ 17, // [17:17] is the sub-list for method output_type
+ 17, // [17:17] is the sub-list for method input_type
+ 17, // [17:17] is the sub-list for extension type_name
+ 17, // [17:17] is the sub-list for extension extendee
+ 0, // [0:17] is the sub-list for field type_name
+}
+
+func init() { file_branch_undo_log_proto_init() }
+func file_branch_undo_log_proto_init() {
+ if File_branch_undo_log_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_branch_undo_log_proto_msgTypes[0].Exporter = func(v any, i int) any {
+ switch v := v.(*BranchUndoLog); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_branch_undo_log_proto_msgTypes[1].Exporter = func(v any, i int) any {
+ switch v := v.(*SQLUndoLog); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_branch_undo_log_proto_msgTypes[2].Exporter = func(v any, i int) any {
+ switch v := v.(*RecordImage); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_branch_undo_log_proto_msgTypes[3].Exporter = func(v any, i int) any {
+ switch v := v.(*RowImage); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_branch_undo_log_proto_msgTypes[4].Exporter = func(v any, i int) any {
+ switch v := v.(*ColumnImage); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_branch_undo_log_proto_msgTypes[5].Exporter = func(v any, i int) any {
+ switch v := v.(*TableMeta); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_branch_undo_log_proto_msgTypes[6].Exporter = func(v any, i int) any {
+ switch v := v.(*ColumnMeta); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_branch_undo_log_proto_msgTypes[7].Exporter = func(v any, i int) any {
+ switch v := v.(*IndexMeta); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_branch_undo_log_proto_rawDesc,
+ NumEnums: 3,
+ NumMessages: 10,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_branch_undo_log_proto_goTypes,
+ DependencyIndexes: file_branch_undo_log_proto_depIdxs,
+ EnumInfos: file_branch_undo_log_proto_enumTypes,
+ MessageInfos: file_branch_undo_log_proto_msgTypes,
+ }.Build()
+ File_branch_undo_log_proto = out.File
+ file_branch_undo_log_proto_rawDesc = nil
+ file_branch_undo_log_proto_goTypes = nil
+ file_branch_undo_log_proto_depIdxs = nil
+}
diff --git a/pkg/datasource/sql/undo/parser/branch_undo_log.proto b/pkg/datasource/sql/undo/parser/branch_undo_log.proto
new file mode 100644
index 00000000..9055ea10
--- /dev/null
+++ b/pkg/datasource/sql/undo/parser/branch_undo_log.proto
@@ -0,0 +1,165 @@
+syntax = "proto3";
+package parser;
+import "google/protobuf/any.proto";
+
+option go_package=".;parser";
+
+message BranchUndoLog {
+ string Xid = 1;
+ uint64 BranchID = 2;
+ repeated SQLUndoLog Logs = 3;
+}
+
+message SQLUndoLog {
+ SQLType SQLType = 1;
+ string TableName = 2;
+ RecordImage BeforeImage = 3;
+ RecordImage AfterImage = 4;
+}
+
+message RecordImage {
+ int32 index = 1;
+ string TableName = 2;
+ SQLType SQLType = 3;
+ repeated RowImage Rows = 4;
+ TableMeta TableMeta = 5;
+}
+
+message RowImage {
+ repeated ColumnImage Columns = 1;
+}
+
+message ColumnImage {
+ IndexType KeyType = 1;
+ string ColumnName = 2;
+ JDBCType ColumnType = 3;
+ google.protobuf.Any Value = 4;
+}
+
+message TableMeta {
+ string TableName = 1;
+ map<string, ColumnMeta> Columns = 2;
+ map<string, IndexMeta> Indexs = 3;
+ repeated string ColumnNames = 4;
+}
+
+message ColumnMeta {
+ string Schema = 1;
+ string Table = 2;
+ bytes ColumnDef = 3;
+ bool Autoincrement = 4;
+ string ColumnName = 5;
+ string ColumnType = 6;
+ int32 DatabaseType = 7;
+ string DatabaseTypeString = 8;
+ string ColumnKey = 9;
+ int32 IsNullable = 10;
+ string Extra = 11;
+}
+
+message IndexMeta {
+ string Schema = 1;
+ string Table = 2;
+ string Name = 3;
+ string ColumnName = 4;
+ IndexType IType = 5;
+ repeated ColumnMeta Columns = 6;
+}
+
+enum IndexType {
+ IndexTypeNull = 0;
+ IndexTypePrimaryKey = 1;
+}
+
+enum JDBCType {
+ JDBCTypeNull = 0;
+ JDBCTypeBit = -7;
+ JDBCTypeTinyInt = -6;
+ JDBCTypeSmallInt = 5;
+ JDBCTypeInteger = 4;
+ JDBCTypeBigInt = -5;
+ JDBCTypeFloat = 6;
+ JDBCTypeReal = 7;
+ JDBCTypeDouble = 8;
+ JDBCTypeNumberic = 2;
+ JDBCTypeDecimal = 3;
+ JDBCTypeChar = 1;
+ JDBCTypeVarchar = 12;
+ JDBCTypeLongVarchar = -1;
+ JDBCTypeDate = 91;
+ JDBCTypeTime = 92;
+ JDBCTypeTimestamp = 93;
+ JDBCTypeBinary = -2;
+ JDBCTypeVarBinary = -3;
+ JDBCTypeLongVarBinary = -4;
+ JDBCTypeOther = 1111;
+ JDBCTypeJavaObject = 2000;
+ JDBCTypeDistinct = 2001;
+ JDBCTypeStruct = 2002;
+ JDBCTypeArray = 2003;
+ JDBCTypeBlob = 2004;
+ JDBCTypeClob = 2005;
+ JDBCTypeRef = 2006;
+ JDBCTypeDateLink = 70;
+ JDBCTypeBoolean = 16;
+ JDBCTypeRowID = -8;
+ JDBCTypeNchar = -15;
+ JDBCTypeNvarchar = -9;
+ JDBCTypeLongNvVarchar = -16;
+ JDBCTypeNclob = 2011;
+ JDBCTypeSqlXML = 2009;
+ JDBCTypeRefCursor = 2012;
+ JDBCTypeTimeWithTimeZone = 2013;
+ JDBCTypeTimestampWithTimezone = 2014;
+}
+
+enum SQLType {
+ SQLTypeSelect = 0;
+ SQLTypeInsert = 1;
+ SQLTypeUpdate = 2;
+ SQLTypeDelete = 3;
+ SQLTypeSelectForUpdate = 4;
+ SQLTypeReplace = 5;
+ SQLTypeTruncate = 6;
+ SQLTypeCreate = 7;
+ SQLTypeDrop = 8;
+ SQLTypeLoad = 9;
+ SQLTypeMerge = 10;
+ SQLTypeShow = 11;
+ SQLTypeAlter = 12;
+ SQLTypeRename = 13;
+ SQLTypeDump = 14;
+ SQLTypeDebug = 15;
+ SQLTypeExplain = 16;
+ SQLTypeProcedure = 17;
+ SQLTypeDesc = 18;
+ SQLLastInsertID = 19;
+ SQLSelectWithoutTable = 20;
+ SQLCreateSequence = 21;
+ SQLShowSequence = 22;
+ SQLGetSequence = 23;
+ SQLAlterSequence = 24;
+ SQLDropSequence = 25;
+ SQLTddlShow = 26;
+ SQLTypeSet = 27;
+ SQLTypeReload = 28;
+ SQLTypeSelectUnion = 29;
+ SQLTypeCreateTable = 30;
+ SQLTypeDropTable = 31;
+ SQLTypeAlterTable = 32;
+ SQLTypeSavePoint = 33;
+ SQLTypeSelectFromUpdate = 34;
+ SQLTypeMultiDelete = 35;
+ SQLTypeMultiUpdate = 36;
+ SQLTypeCreateIndex = 37;
+ SQLTypeDropIndex = 38;
+ SQLTypeKill = 39;
+ SQLTypeLockTables = 40;
+ SQLTypeUnLockTables = 41;
+ SQLTypeCheckTable = 42;
+ SQLTypeSelectFoundRows = 43;
+ SQLTypeInsertIgnore = 101; // Adjusted the value to match Go's logic
+ SQLTypeInsertOnDuplicateUpdate = 102;
+ SQLTypeMulti = 1044; // Adjusted the value to match Go's logic
+ SQLTypeUnknown = 1045;
+}
diff --git a/pkg/datasource/sql/undo/parser/parser_cache.go b/pkg/datasource/sql/undo/parser/parser_cache.go
index 511fd093..59c703fd 100644
--- a/pkg/datasource/sql/undo/parser/parser_cache.go
+++ b/pkg/datasource/sql/undo/parser/parser_cache.go
@@ -39,6 +39,7 @@ func initCache() {
}
cache.store(&JsonParser{})
+ cache.store(&ProtobufParser{})
}
func GetCache() *UndoLogParserCache {
diff --git a/pkg/datasource/sql/undo/parser/parser_json_test.go b/pkg/datasource/sql/undo/parser/parser_json_test.go
index 4f73c323..2123f082 100644
--- a/pkg/datasource/sql/undo/parser/parser_json_test.go
+++ b/pkg/datasource/sql/undo/parser/parser_json_test.go
@@ -25,15 +25,15 @@ import (
"seata.apache.org/seata-go/pkg/datasource/sql/undo"
)
-func TestGetName(t *testing.T) {
+func TestJsonGetName(t *testing.T) {
assert.Equal(t, "json", (&JsonParser{}).GetName())
}
-func TestGetDefaultContext(t *testing.T) {
+func TestJsonGetDefaultContext(t *testing.T) {
assert.Equal(t, []byte("{}"), (&JsonParser{}).GetDefaultContent())
}
-func TestEncode(t *testing.T) {
+func TestJsonEncode(t *testing.T) {
TestCases := []struct {
CaseName string
UndoLog *undo.BranchUndoLog
@@ -67,7 +67,7 @@ func TestEncode(t *testing.T) {
}
}
-func TestDecode(t *testing.T) {
+func TestJsonDecode(t *testing.T) {
TestCases := []struct {
CaseName string
ExpectUndoLog undo.BranchUndoLog
diff --git a/pkg/datasource/sql/undo/parser/parser_protobuf.go b/pkg/datasource/sql/undo/parser/parser_protobuf.go
new file mode 100644
index 00000000..7fd56082
--- /dev/null
+++ b/pkg/datasource/sql/undo/parser/parser_protobuf.go
@@ -0,0 +1,248 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package parser
+
+import (
+ "encoding/json"
+
+ "github.com/golang/protobuf/ptypes/any"
+ "github.com/golang/protobuf/ptypes/wrappers"
+ "google.golang.org/protobuf/proto"
+ "google.golang.org/protobuf/types/known/anypb"
+
+ "seata.apache.org/seata-go/pkg/datasource/sql/types"
+ "seata.apache.org/seata-go/pkg/datasource/sql/undo"
+)
+
+type ProtobufParser struct {
+}
+
+// GetName get the name of parser
+func (p *ProtobufParser) GetName() string {
+ return "protobuf"
+}
+
+// GetDefaultContent get default content of this parser
+func (p *ProtobufParser) GetDefaultContent() []byte {
+ return []byte{}
+}
+
+// Encode branch undo log to byte array
+func (p *ProtobufParser) Encode(branchUndoLog *undo.BranchUndoLog) ([]byte, error) {
+ protoLog := ConvertToProto(branchUndoLog)
+ return proto.Marshal(protoLog)
+}
+
+// Decode byte array to branch undo log
+func (p *ProtobufParser) Decode(data []byte) (*undo.BranchUndoLog, error) {
+ branchUndoLog := &BranchUndoLog{}
+ err := proto.Unmarshal(data, branchUndoLog)
+ if err != nil {
+ return nil, err
+ }
+
+ return ConvertToIntree(branchUndoLog), nil
+}
+
+func ConvertToProto(intreeLog *undo.BranchUndoLog) *BranchUndoLog {
+ protoLog := &BranchUndoLog{
+ Xid: intreeLog.Xid,
+ BranchID: intreeLog.BranchID,
+ Logs: []*SQLUndoLog{},
+ }
+ for _, undolog := range intreeLog.Logs {
+ protolog := &SQLUndoLog{
+ SQLType: SQLType(undolog.SQLType),
+ TableName: undolog.TableName,
+ }
+
+ if undolog.BeforeImage != nil {
+ protolog.BeforeImage = &RecordImage{
+ TableName: undolog.BeforeImage.TableName,
+ SQLType: SQLType(undolog.BeforeImage.SQLType),
+ Rows: []*RowImage{},
+ }
+
+ for _, row := range undolog.BeforeImage.Rows {
+ protoRow := &RowImage{
+ Columns: []*ColumnImage{},
+ }
+
+ for _, col := range row.Columns {
+ anyValue, err := convertInterfaceToAny(col.GetActualValue())
+ if err != nil {
+ continue
+ }
+
+ protoCol := &ColumnImage{
+ KeyType: IndexType(col.KeyType),
+ ColumnName: col.ColumnName,
+ ColumnType: JDBCType(col.ColumnType),
+ Value: anyValue,
+ }
+
+ protoRow.Columns = append(protoRow.Columns, protoCol)
+ }
+
+ protolog.BeforeImage.Rows = append(protolog.BeforeImage.Rows, protoRow)
+ }
+ }
+
+ if undolog.AfterImage != nil {
+ protolog.AfterImage = &RecordImage{
+ TableName: undolog.AfterImage.TableName,
+ SQLType: SQLType(undolog.AfterImage.SQLType),
+ Rows: []*RowImage{},
+ }
+
+ for _, row := range undolog.AfterImage.Rows {
+ protoRow := &RowImage{
+ Columns: []*ColumnImage{},
+ }
+
+ for _, col := range row.Columns {
+ anyValue, err := convertInterfaceToAny(col.Value)
+ if err != nil {
+ continue
+ }
+
+ protoCol := &ColumnImage{
+ KeyType: IndexType(col.KeyType),
+ ColumnName: col.ColumnName,
+ ColumnType: JDBCType(col.ColumnType),
+ Value: anyValue,
+ }
+
+ protoRow.Columns = append(protoRow.Columns, protoCol)
+ }
+
+ protolog.AfterImage.Rows = append(protolog.AfterImage.Rows, protoRow)
+ }
+ }
+
+ protoLog.Logs = append(protoLog.Logs, protolog)
+ }
+ return protoLog
+}
+
+func ConvertToIntree(protoLog *BranchUndoLog) *undo.BranchUndoLog {
+ intreeLog := &undo.BranchUndoLog{
+ Xid: protoLog.Xid,
+ BranchID: protoLog.BranchID,
+ Logs: []undo.SQLUndoLog{},
+ }
+
+ for _, pbSqlLog := range protoLog.Logs {
+ undoSqlLog := undo.SQLUndoLog{
+ SQLType: types.SQLType(pbSqlLog.SQLType),
+ TableName: pbSqlLog.TableName,
+ }
+
+ if pbSqlLog.BeforeImage != nil {
+ undoSqlLog.BeforeImage = &types.RecordImage{
+ TableName: pbSqlLog.BeforeImage.TableName,
+ SQLType: types.SQLType(pbSqlLog.BeforeImage.SQLType),
+ Rows: []types.RowImage{},
+ }
+
+ for _, pbRow := range pbSqlLog.BeforeImage.Rows {
+ undoRow := types.RowImage{
+ Columns: []types.ColumnImage{},
+ }
+
+ for _, pbCol := range pbRow.Columns {
+ anyValue, err := convertAnyToInterface(pbCol.Value)
+ if err != nil {
+ continue
+ }
+
+ undoCol := types.ColumnImage{
+ KeyType: types.IndexType(pbCol.KeyType),
+ ColumnName: pbCol.ColumnName,
+ ColumnType: types.JDBCType(pbCol.ColumnType),
+ Value: anyValue,
+ }
+
+ undoRow.Columns = append(undoRow.Columns, undoCol)
+ }
+
+ undoSqlLog.BeforeImage.Rows = append(undoSqlLog.BeforeImage.Rows, undoRow)
+ }
+ }
+
+ if pbSqlLog.AfterImage != nil {
+ undoSqlLog.AfterImage = &types.RecordImage{
+ TableName: pbSqlLog.AfterImage.TableName,
+ SQLType: types.SQLType(pbSqlLog.AfterImage.SQLType),
+ Rows: []types.RowImage{},
+ }
+
+ for _, pbRow := range pbSqlLog.AfterImage.Rows {
+ undoRow := types.RowImage{
+ Columns: []types.ColumnImage{},
+ }
+
+ for _, pbCol := range pbRow.Columns {
+ anyValue, err := convertAnyToInterface(pbCol.Value)
+ if err != nil {
+ continue
+ }
+
+ undoCol := types.ColumnImage{
+ KeyType: types.IndexType(pbCol.KeyType),
+ ColumnName: pbCol.ColumnName,
+ ColumnType: types.JDBCType(pbCol.ColumnType),
+ Value: anyValue,
+ }
+
+ undoRow.Columns = append(undoRow.Columns, undoCol)
+ }
+
+ undoSqlLog.AfterImage.Rows = append(undoSqlLog.AfterImage.Rows, undoRow)
+ }
+ }
+
+ intreeLog.Logs = append(intreeLog.Logs, undoSqlLog)
+ }
+
+ return intreeLog
+}
+
+func convertAnyToInterface(anyValue *any.Any) (interface{}, error) {
+ var value interface{}
+ bytesValue := &wrappers.BytesValue{}
+ err := anypb.UnmarshalTo(anyValue, bytesValue, proto.UnmarshalOptions{})
+ if err != nil {
+ return value, err
+ }
+ uErr := json.Unmarshal(bytesValue.Value, &value)
+ if uErr != nil {
+ return value, uErr
+ }
+ return value, nil
+}
+
+func convertInterfaceToAny(v interface{}) (*any.Any, error) {
+ anyValue := &any.Any{}
+ bytes, _ := json.Marshal(v)
+ bytesValue := &wrappers.BytesValue{
+ Value: bytes,
+ }
+ err := anypb.MarshalFrom(anyValue, bytesValue, proto.MarshalOptions{})
+ return anyValue, err
+}
diff --git a/pkg/datasource/sql/undo/parser/parser_protobuf_test.go b/pkg/datasource/sql/undo/parser/parser_protobuf_test.go
new file mode 100644
index 00000000..e8cb0d52
--- /dev/null
+++ b/pkg/datasource/sql/undo/parser/parser_protobuf_test.go
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package parser
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ "seata.apache.org/seata-go/pkg/datasource/sql/undo"
+)
+
+func TestProtobufGetName(t *testing.T) {
+ assert.Equal(t, "protobuf", (&ProtobufParser{}).GetName())
+}
+
+func TestProtobufDefaultContext(t *testing.T) {
+ assert.Equal(t, []byte{}, (&ProtobufParser{}).GetDefaultContent())
+}
+
+func TestProtobufEncodeDecode(t *testing.T) {
+ TestCases := []struct {
+ CaseName string
+ UndoLog *undo.BranchUndoLog
+ ExpectErr bool
+ }{
+ {
+ CaseName: "pass",
+ UndoLog: &undo.BranchUndoLog{
+ Xid: "123456",
+ BranchID: 123456,
+ Logs: []undo.SQLUndoLog{},
+ },
+ ExpectErr: false,
+ },
+ }
+
+ for _, Case := range TestCases {
+ t.Run(Case.CaseName, func(t *testing.T) {
+ parser := &ProtobufParser{}
+
+ encodedBytes, err := parser.Encode(Case.UndoLog)
+ if Case.ExpectErr {
+ assert.NotNil(t, err)
+ return
+ }
+ assert.Nil(t, err)
+
+ decodedUndoLog, err := parser.Decode(encodedBytes)
+ if Case.ExpectErr {
+ assert.NotNil(t, err)
+ return
+ }
+ assert.Nil(t, err)
+
+ assert.Equal(t, Case.UndoLog.Xid, decodedUndoLog.Xid)
+ assert.Equal(t, Case.UndoLog.BranchID, decodedUndoLog.BranchID)
+ assert.Equal(t, len(Case.UndoLog.Logs), len(decodedUndoLog.Logs))
+ })
+ }
+}
+
+func TestConvertInterfaceToAnyAndBack(t *testing.T) {
+ originalValue := map[string]interface{}{
+ "key1": "value1",
+ "key2": float64(123), // Use float64 to match JSON default behavior
+ "key3": true,
+ }
+
+ anyValue, err := convertInterfaceToAny(originalValue)
+ assert.NoError(t, err, "convertInterfaceToAny should not return an error")
+
+ convertedValue, err := convertAnyToInterface(anyValue)
+ assert.NoError(t, err, "convertAnyToInterface should not return an error")
+
+ assert.Equal(t, originalValue, convertedValue, "The converted value should match the original")
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@seata.apache.org
For additional commands, e-mail: notifications-help@seata.apache.org