Sfoglia il codice sorgente

修改批量接口

yjp 1 anno fa
parent
commit
0d644e8a85

+ 3 - 11
client/client_cmd_request.go

@@ -26,12 +26,8 @@ type InsertBatchRequest struct {
 type InsertTableRowItem struct {
 	TablePrefixWithSchema string
 	Version               string
-	Items                 []InsertItem
-}
-
-type InsertItem struct {
-	KeyColumns []string
-	TableRow   map[string]any
+	KeyColumns            []string
+	TableRows             []map[string]any
 }
 
 type DeleteRequest struct {
@@ -49,11 +45,7 @@ type DeleteBatchRequest struct {
 type DeleteTableRowItem struct {
 	TablePrefixWithSchema string
 	Version               string
-	Items                 []DeleteItem
-}
-
-type DeleteItem struct {
-	KeyValues map[string]string
+	KeyValues             []map[string]string
 }
 
 type UpdateRequest struct {

+ 8 - 10
dpsv1/client.go

@@ -133,23 +133,21 @@ func (c *Client) InsertBatch(req *client.InsertBatchRequest) (string, error) {
 	tableRowItems := make([]*request.InsertTableRowItem, 0)
 
 	for _, reqTableItem := range req.Items {
-		items := make([]*request.InsertItem, 0)
-		for _, reqItem := range reqTableItem.Items {
-			tableRow, err := c.formTableRow(reqItem.TableRow)
+		tableRows := make([]*request.TableRow, 0)
+		for _, reqTableRow := range reqTableItem.TableRows {
+			tableRow, err := c.formTableRow(reqTableRow)
 			if err != nil {
 				return "", err
 			}
 
-			items = append(items, &request.InsertItem{
-				KeyColumns: reqItem.KeyColumns,
-				TableRow:   tableRow,
-			})
+			tableRows = append(tableRows, tableRow)
 		}
 
 		tableRowItems = append(tableRowItems, &request.InsertTableRowItem{
 			TablePrefixWithSchema: reqTableItem.TablePrefixWithSchema,
 			Version:               reqTableItem.Version,
-			Items:                 items,
+			KeyColumns:            reqTableItem.KeyColumns,
+			TableRows:             tableRows,
 		})
 	}
 
@@ -185,9 +183,9 @@ func (c *Client) DeleteBatch(req *client.DeleteBatchRequest) (string, error) {
 
 	for _, reqTableItem := range req.Items {
 		items := make([]*request.DeleteItem, 0)
-		for _, reqItem := range reqTableItem.Items {
+		for _, reqKeyValues := range reqTableItem.KeyValues {
 			items = append(items, &request.DeleteItem{
-				KeyValues: reqItem.KeyValues,
+				KeyValues: reqKeyValues,
 			})
 		}
 

+ 8 - 10
dpsv1/transaction.go

@@ -66,23 +66,21 @@ func (tx *Transaction) InsertBatchTx(req *client.InsertBatchRequest) (string, er
 	tableRowItems := make([]*request.InsertTableRowItem, 0)
 
 	for _, reqTableItem := range req.Items {
-		items := make([]*request.InsertItem, 0)
-		for _, reqItem := range reqTableItem.Items {
-			tableRow, err := tx.client.formTableRow(reqItem.TableRow)
+		tableRows := make([]*request.TableRow, 0)
+		for _, reqTableRow := range reqTableItem.TableRows {
+			tableRow, err := tx.client.formTableRow(reqTableRow)
 			if err != nil {
 				return "", err
 			}
 
-			items = append(items, &request.InsertItem{
-				KeyColumns: reqItem.KeyColumns,
-				TableRow:   tableRow,
-			})
+			tableRows = append(tableRows, tableRow)
 		}
 
 		tableRowItems = append(tableRowItems, &request.InsertTableRowItem{
 			TablePrefixWithSchema: reqTableItem.TablePrefixWithSchema,
 			Version:               reqTableItem.Version,
-			Items:                 items,
+			KeyColumns:            reqTableItem.KeyColumns,
+			TableRows:             tableRows,
 		})
 	}
 
@@ -154,9 +152,9 @@ func (tx *Transaction) DeleteBatchTx(req *client.DeleteBatchRequest) (string, er
 
 	for _, reqTableItem := range req.Items {
 		items := make([]*request.DeleteItem, 0)
-		for _, reqItem := range reqTableItem.Items {
+		for _, reqKeyValues := range reqTableItem.KeyValues {
 			items = append(items, &request.DeleteItem{
-				KeyValues: reqItem.KeyValues,
+				KeyValues: reqKeyValues,
 			})
 		}
 

+ 206 - 271
pb/v1/request/command.pb.go

@@ -869,9 +869,10 @@ type InsertTableRowItem struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	TablePrefixWithSchema string        `protobuf:"bytes,1,opt,name=TablePrefixWithSchema,proto3" json:"TablePrefixWithSchema,omitempty"`
-	Version               string        `protobuf:"bytes,2,opt,name=Version,proto3" json:"Version,omitempty"`
-	Items                 []*InsertItem `protobuf:"bytes,3,rep,name=Items,proto3" json:"Items,omitempty"`
+	TablePrefixWithSchema string      `protobuf:"bytes,1,opt,name=TablePrefixWithSchema,proto3" json:"TablePrefixWithSchema,omitempty"`
+	Version               string      `protobuf:"bytes,2,opt,name=Version,proto3" json:"Version,omitempty"`
+	KeyColumns            []string    `protobuf:"bytes,3,rep,name=KeyColumns,proto3" json:"KeyColumns,omitempty"`
+	TableRows             []*TableRow `protobuf:"bytes,4,rep,name=TableRows,proto3" json:"TableRows,omitempty"`
 }
 
 func (x *InsertTableRowItem) Reset() {
@@ -920,64 +921,16 @@ func (x *InsertTableRowItem) GetVersion() string {
 	return ""
 }
 
-func (x *InsertTableRowItem) GetItems() []*InsertItem {
-	if x != nil {
-		return x.Items
-	}
-	return nil
-}
-
-type InsertItem struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	KeyColumns []string  `protobuf:"bytes,1,rep,name=KeyColumns,proto3" json:"KeyColumns,omitempty"`
-	TableRow   *TableRow `protobuf:"bytes,2,opt,name=TableRow,proto3" json:"TableRow,omitempty"`
-}
-
-func (x *InsertItem) Reset() {
-	*x = InsertItem{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_v1_request_command_proto_msgTypes[13]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *InsertItem) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*InsertItem) ProtoMessage() {}
-
-func (x *InsertItem) ProtoReflect() protoreflect.Message {
-	mi := &file_v1_request_command_proto_msgTypes[13]
-	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 InsertItem.ProtoReflect.Descriptor instead.
-func (*InsertItem) Descriptor() ([]byte, []int) {
-	return file_v1_request_command_proto_rawDescGZIP(), []int{13}
-}
-
-func (x *InsertItem) GetKeyColumns() []string {
+func (x *InsertTableRowItem) GetKeyColumns() []string {
 	if x != nil {
 		return x.KeyColumns
 	}
 	return nil
 }
 
-func (x *InsertItem) GetTableRow() *TableRow {
+func (x *InsertTableRowItem) GetTableRows() []*TableRow {
 	if x != nil {
-		return x.TableRow
+		return x.TableRows
 	}
 	return nil
 }
@@ -997,7 +950,7 @@ type DeleteRequest struct {
 func (x *DeleteRequest) Reset() {
 	*x = DeleteRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_v1_request_command_proto_msgTypes[14]
+		mi := &file_v1_request_command_proto_msgTypes[13]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1010,7 +963,7 @@ func (x *DeleteRequest) String() string {
 func (*DeleteRequest) ProtoMessage() {}
 
 func (x *DeleteRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_v1_request_command_proto_msgTypes[14]
+	mi := &file_v1_request_command_proto_msgTypes[13]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1023,7 +976,7 @@ func (x *DeleteRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeleteRequest.ProtoReflect.Descriptor instead.
 func (*DeleteRequest) Descriptor() ([]byte, []int) {
-	return file_v1_request_command_proto_rawDescGZIP(), []int{14}
+	return file_v1_request_command_proto_rawDescGZIP(), []int{13}
 }
 
 func (x *DeleteRequest) GetDatabaseID() string {
@@ -1074,7 +1027,7 @@ type DeleteBatchRequest struct {
 func (x *DeleteBatchRequest) Reset() {
 	*x = DeleteBatchRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_v1_request_command_proto_msgTypes[15]
+		mi := &file_v1_request_command_proto_msgTypes[14]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1087,7 +1040,7 @@ func (x *DeleteBatchRequest) String() string {
 func (*DeleteBatchRequest) ProtoMessage() {}
 
 func (x *DeleteBatchRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_v1_request_command_proto_msgTypes[15]
+	mi := &file_v1_request_command_proto_msgTypes[14]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1100,7 +1053,7 @@ func (x *DeleteBatchRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeleteBatchRequest.ProtoReflect.Descriptor instead.
 func (*DeleteBatchRequest) Descriptor() ([]byte, []int) {
-	return file_v1_request_command_proto_rawDescGZIP(), []int{15}
+	return file_v1_request_command_proto_rawDescGZIP(), []int{14}
 }
 
 func (x *DeleteBatchRequest) GetDatabaseID() string {
@@ -1137,7 +1090,7 @@ type DeleteTableRowItem struct {
 func (x *DeleteTableRowItem) Reset() {
 	*x = DeleteTableRowItem{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_v1_request_command_proto_msgTypes[16]
+		mi := &file_v1_request_command_proto_msgTypes[15]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1150,7 +1103,7 @@ func (x *DeleteTableRowItem) String() string {
 func (*DeleteTableRowItem) ProtoMessage() {}
 
 func (x *DeleteTableRowItem) ProtoReflect() protoreflect.Message {
-	mi := &file_v1_request_command_proto_msgTypes[16]
+	mi := &file_v1_request_command_proto_msgTypes[15]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1163,7 +1116,7 @@ func (x *DeleteTableRowItem) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeleteTableRowItem.ProtoReflect.Descriptor instead.
 func (*DeleteTableRowItem) Descriptor() ([]byte, []int) {
-	return file_v1_request_command_proto_rawDescGZIP(), []int{16}
+	return file_v1_request_command_proto_rawDescGZIP(), []int{15}
 }
 
 func (x *DeleteTableRowItem) GetTablePrefixWithSchema() string {
@@ -1198,7 +1151,7 @@ type DeleteItem struct {
 func (x *DeleteItem) Reset() {
 	*x = DeleteItem{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_v1_request_command_proto_msgTypes[17]
+		mi := &file_v1_request_command_proto_msgTypes[16]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1211,7 +1164,7 @@ func (x *DeleteItem) String() string {
 func (*DeleteItem) ProtoMessage() {}
 
 func (x *DeleteItem) ProtoReflect() protoreflect.Message {
-	mi := &file_v1_request_command_proto_msgTypes[17]
+	mi := &file_v1_request_command_proto_msgTypes[16]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1224,7 +1177,7 @@ func (x *DeleteItem) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeleteItem.ProtoReflect.Descriptor instead.
 func (*DeleteItem) Descriptor() ([]byte, []int) {
-	return file_v1_request_command_proto_rawDescGZIP(), []int{17}
+	return file_v1_request_command_proto_rawDescGZIP(), []int{16}
 }
 
 func (x *DeleteItem) GetKeyValues() map[string]string {
@@ -1250,7 +1203,7 @@ type UpdateRequest struct {
 func (x *UpdateRequest) Reset() {
 	*x = UpdateRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_v1_request_command_proto_msgTypes[18]
+		mi := &file_v1_request_command_proto_msgTypes[17]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1263,7 +1216,7 @@ func (x *UpdateRequest) String() string {
 func (*UpdateRequest) ProtoMessage() {}
 
 func (x *UpdateRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_v1_request_command_proto_msgTypes[18]
+	mi := &file_v1_request_command_proto_msgTypes[17]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1276,7 +1229,7 @@ func (x *UpdateRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use UpdateRequest.ProtoReflect.Descriptor instead.
 func (*UpdateRequest) Descriptor() ([]byte, []int) {
-	return file_v1_request_command_proto_rawDescGZIP(), []int{18}
+	return file_v1_request_command_proto_rawDescGZIP(), []int{17}
 }
 
 func (x *UpdateRequest) GetDatabaseID() string {
@@ -1336,7 +1289,7 @@ type ReplayRequest struct {
 func (x *ReplayRequest) Reset() {
 	*x = ReplayRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_v1_request_command_proto_msgTypes[19]
+		mi := &file_v1_request_command_proto_msgTypes[18]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1349,7 +1302,7 @@ func (x *ReplayRequest) String() string {
 func (*ReplayRequest) ProtoMessage() {}
 
 func (x *ReplayRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_v1_request_command_proto_msgTypes[19]
+	mi := &file_v1_request_command_proto_msgTypes[18]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1362,7 +1315,7 @@ func (x *ReplayRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ReplayRequest.ProtoReflect.Descriptor instead.
 func (*ReplayRequest) Descriptor() ([]byte, []int) {
-	return file_v1_request_command_proto_rawDescGZIP(), []int{19}
+	return file_v1_request_command_proto_rawDescGZIP(), []int{18}
 }
 
 func (x *ReplayRequest) GetDatabaseID() string {
@@ -1411,7 +1364,7 @@ type TableRow struct {
 func (x *TableRow) Reset() {
 	*x = TableRow{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_v1_request_command_proto_msgTypes[20]
+		mi := &file_v1_request_command_proto_msgTypes[19]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1424,7 +1377,7 @@ func (x *TableRow) String() string {
 func (*TableRow) ProtoMessage() {}
 
 func (x *TableRow) ProtoReflect() protoreflect.Message {
-	mi := &file_v1_request_command_proto_msgTypes[20]
+	mi := &file_v1_request_command_proto_msgTypes[19]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1437,7 +1390,7 @@ func (x *TableRow) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use TableRow.ProtoReflect.Descriptor instead.
 func (*TableRow) Descriptor() ([]byte, []int) {
-	return file_v1_request_command_proto_rawDescGZIP(), []int{20}
+	return file_v1_request_command_proto_rawDescGZIP(), []int{19}
 }
 
 func (x *TableRow) GetColumns() []*Column {
@@ -1459,7 +1412,7 @@ type Column struct {
 func (x *Column) Reset() {
 	*x = Column{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_v1_request_command_proto_msgTypes[21]
+		mi := &file_v1_request_command_proto_msgTypes[20]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1472,7 +1425,7 @@ func (x *Column) String() string {
 func (*Column) ProtoMessage() {}
 
 func (x *Column) ProtoReflect() protoreflect.Message {
-	mi := &file_v1_request_command_proto_msgTypes[21]
+	mi := &file_v1_request_command_proto_msgTypes[20]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1485,7 +1438,7 @@ func (x *Column) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use Column.ProtoReflect.Descriptor instead.
 func (*Column) Descriptor() ([]byte, []int) {
-	return file_v1_request_command_proto_rawDescGZIP(), []int{21}
+	return file_v1_request_command_proto_rawDescGZIP(), []int{20}
 }
 
 func (x *Column) GetName() string {
@@ -1522,7 +1475,7 @@ type ColumnValue struct {
 func (x *ColumnValue) Reset() {
 	*x = ColumnValue{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_v1_request_command_proto_msgTypes[22]
+		mi := &file_v1_request_command_proto_msgTypes[21]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1535,7 +1488,7 @@ func (x *ColumnValue) String() string {
 func (*ColumnValue) ProtoMessage() {}
 
 func (x *ColumnValue) ProtoReflect() protoreflect.Message {
-	mi := &file_v1_request_command_proto_msgTypes[22]
+	mi := &file_v1_request_command_proto_msgTypes[21]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1548,7 +1501,7 @@ func (x *ColumnValue) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ColumnValue.ProtoReflect.Descriptor instead.
 func (*ColumnValue) Descriptor() ([]byte, []int) {
-	return file_v1_request_command_proto_rawDescGZIP(), []int{22}
+	return file_v1_request_command_proto_rawDescGZIP(), []int{21}
 }
 
 func (x *ColumnValue) GetKind() int32 {
@@ -1804,143 +1757,139 @@ var file_v1_request_command_proto_rawDesc = []byte{
 	0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x06, 0xe2, 0xdf, 0x1f,
 	0x02, 0x60, 0x01, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73,
 	0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72,
-	0x49, 0x44, 0x22, 0xa7, 0x01, 0x0a, 0x12, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x54, 0x61, 0x62,
+	0x49, 0x44, 0x22, 0xd5, 0x01, 0x0a, 0x12, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x54, 0x61, 0x62,
 	0x6c, 0x65, 0x52, 0x6f, 0x77, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x3c, 0x0a, 0x15, 0x54, 0x61, 0x62,
 	0x6c, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x57, 0x69, 0x74, 0x68, 0x53, 0x63, 0x68, 0x65,
 	0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01,
 	0x52, 0x15, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x57, 0x69, 0x74,
 	0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x20, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69,
 	0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01,
-	0x52, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x05, 0x49, 0x74, 0x65,
-	0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x06, 0xe2,
-	0xdf, 0x1f, 0x02, 0x60, 0x01, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x6b, 0x0a, 0x0a,
-	0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x26, 0x0a, 0x0a, 0x4b, 0x65,
-	0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x06,
-	0xe2, 0xdf, 0x1f, 0x02, 0x70, 0x00, 0x52, 0x0a, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
-	0x6e, 0x73, 0x12, 0x35, 0x0a, 0x08, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54,
+	0x52, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0a, 0x4b, 0x65, 0x79,
+	0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x42, 0x06, 0xe2,
+	0xdf, 0x1f, 0x02, 0x70, 0x00, 0x52, 0x0a, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
+	0x73, 0x12, 0x37, 0x0a, 0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x73, 0x18, 0x04,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54,
 	0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x70, 0x00, 0x52,
-	0x08, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x22, 0xba, 0x02, 0x0a, 0x0d, 0x44, 0x65,
-	0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0a, 0x44,
-	0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42,
-	0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73,
-	0x65, 0x49, 0x44, 0x12, 0x3c, 0x0a, 0x15, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x65, 0x66,
-	0x69, 0x78, 0x57, 0x69, 0x74, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x15, 0x54, 0x61, 0x62, 0x6c,
-	0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x57, 0x69, 0x74, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d,
-	0x61, 0x12, 0x20, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01,
-	0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x07, 0x56, 0x65, 0x72, 0x73,
-	0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x09, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73,
-	0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4b,
-	0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x06, 0xe2,
-	0xdf, 0x1f, 0x02, 0x20, 0x00, 0x52, 0x09, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73,
-	0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x3c, 0x0a, 0x0e, 0x4b, 0x65, 0x79, 0x56,
-	0x61, 0x6c, 0x75, 0x65, 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, 0x14, 0x0a, 0x05,
-	0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c,
-	0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8f, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74,
-	0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a,
-	0x0a, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x62,
-	0x61, 0x73, 0x65, 0x49, 0x44, 0x12, 0x39, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02,
-	0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44,
-	0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x49, 0x74, 0x65,
-	0x6d, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x60, 0x01, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73,
-	0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0xa7, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c,
-	0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x49, 0x74, 0x65, 0x6d, 0x12,
-	0x3c, 0x0a, 0x15, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x57, 0x69,
-	0x74, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06,
-	0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x15, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x65,
-	0x66, 0x69, 0x78, 0x57, 0x69, 0x74, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x20, 0x0a,
-	0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06,
-	0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12,
-	0x31, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13,
-	0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49,
-	0x74, 0x65, 0x6d, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x60, 0x01, 0x52, 0x05, 0x49, 0x74, 0x65,
-	0x6d, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x74, 0x65,
-	0x6d, 0x12, 0x48, 0x0a, 0x09, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01,
-	0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44,
-	0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c,
+	0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x73, 0x22, 0xba, 0x02, 0x0a, 0x0d, 0x44,
+	0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0a,
+	0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61,
+	0x73, 0x65, 0x49, 0x44, 0x12, 0x3c, 0x0a, 0x15, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x65,
+	0x66, 0x69, 0x78, 0x57, 0x69, 0x74, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x15, 0x54, 0x61, 0x62,
+	0x6c, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x57, 0x69, 0x74, 0x68, 0x53, 0x63, 0x68, 0x65,
+	0x6d, 0x61, 0x12, 0x20, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x07, 0x56, 0x65, 0x72,
+	0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x09, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e,
+	0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x06,
+	0xe2, 0xdf, 0x1f, 0x02, 0x20, 0x00, 0x52, 0x09, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x73, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x3c, 0x0a, 0x0e, 0x4b, 0x65, 0x79,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 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, 0x14, 0x0a,
+	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61,
+	0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8f, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26,
+	0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61,
+	0x62, 0x61, 0x73, 0x65, 0x49, 0x44, 0x12, 0x39, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18,
+	0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e,
+	0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x49, 0x74,
+	0x65, 0x6d, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x60, 0x01, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d,
+	0x73, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0xa7, 0x01, 0x0a, 0x12, 0x44, 0x65,
+	0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x49, 0x74, 0x65, 0x6d,
+	0x12, 0x3c, 0x0a, 0x15, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x57,
+	0x69, 0x74, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42,
+	0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x15, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72,
+	0x65, 0x66, 0x69, 0x78, 0x57, 0x69, 0x74, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x20,
+	0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42,
+	0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+	0x12, 0x31, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x13, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+	0x49, 0x74, 0x65, 0x6d, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x60, 0x01, 0x52, 0x05, 0x49, 0x74,
+	0x65, 0x6d, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x74,
+	0x65, 0x6d, 0x12, 0x48, 0x0a, 0x09, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18,
+	0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e,
+	0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x20,
+	0x00, 0x52, 0x09, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x3c, 0x0a, 0x0e,
+	0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf7, 0x02, 0x0a, 0x0d, 0x55,
+	0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0a,
+	0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61,
+	0x73, 0x65, 0x49, 0x44, 0x12, 0x3c, 0x0a, 0x15, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x65,
+	0x66, 0x69, 0x78, 0x57, 0x69, 0x74, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x15, 0x54, 0x61, 0x62,
+	0x6c, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x57, 0x69, 0x74, 0x68, 0x53, 0x63, 0x68, 0x65,
+	0x6d, 0x61, 0x12, 0x20, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x07, 0x56, 0x65, 0x72,
+	0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x09, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e,
+	0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x06,
+	0xe2, 0xdf, 0x1f, 0x02, 0x20, 0x00, 0x52, 0x09, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x4e, 0x65, 0x77, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77,
+	0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x70,
+	0x00, 0x52, 0x0b, 0x4e, 0x65, 0x77, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x12, 0x16,
+	0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x3c, 0x0a, 0x0e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 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, 0x14, 0x0a, 0x05, 0x76, 0x61,
+	0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+	0x3a, 0x02, 0x38, 0x01, 0x22, 0xba, 0x02, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61,
+	0x73, 0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02,
+	0x58, 0x01, 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x44, 0x12, 0x3c,
+	0x0a, 0x15, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x57, 0x69, 0x74,
+	0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2,
+	0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x15, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x65, 0x66,
+	0x69, 0x78, 0x57, 0x69, 0x74, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x20, 0x0a, 0x07,
+	0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2,
+	0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4b,
+	0x0a, 0x09, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x25, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x70, 0x6c,
+	0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c,
 	0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x20, 0x00,
-	0x52, 0x09, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x3c, 0x0a, 0x0e, 0x4b,
-	0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 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,
-	0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
-	0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf7, 0x02, 0x0a, 0x0d, 0x55, 0x70,
-	0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0a, 0x44,
-	0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42,
-	0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73,
-	0x65, 0x49, 0x44, 0x12, 0x3c, 0x0a, 0x15, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x65, 0x66,
-	0x69, 0x78, 0x57, 0x69, 0x74, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x15, 0x54, 0x61, 0x62, 0x6c,
-	0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x57, 0x69, 0x74, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d,
-	0x61, 0x12, 0x20, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01,
-	0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x07, 0x56, 0x65, 0x72, 0x73,
-	0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x09, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73,
-	0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4b,
-	0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x06, 0xe2,
-	0xdf, 0x1f, 0x02, 0x20, 0x00, 0x52, 0x09, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73,
-	0x12, 0x3b, 0x0a, 0x0b, 0x4e, 0x65, 0x77, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x18,
-	0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e,
-	0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x70, 0x00,
-	0x52, 0x0b, 0x4e, 0x65, 0x77, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x12, 0x16, 0x0a,
-	0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55,
-	0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x3c, 0x0a, 0x0e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75,
-	0x65, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
-	0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
-	0x02, 0x38, 0x01, 0x22, 0xba, 0x02, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73,
-	0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58,
-	0x01, 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x44, 0x12, 0x3c, 0x0a,
-	0x15, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x57, 0x69, 0x74, 0x68,
-	0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf,
-	0x1f, 0x02, 0x58, 0x01, 0x52, 0x15, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69,
-	0x78, 0x57, 0x69, 0x74, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x20, 0x0a, 0x07, 0x56,
-	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf,
-	0x1f, 0x02, 0x58, 0x01, 0x52, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a,
-	0x09, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b,
-	0x32, 0x25, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61,
-	0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75,
-	0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x20, 0x00, 0x52,
-	0x09, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73,
-	0x65, 0x72, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72,
-	0x49, 0x44, 0x1a, 0x3c, 0x0a, 0x0e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
-	0x22, 0x35, 0x0a, 0x08, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x12, 0x29, 0x0a, 0x07,
-	0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e,
-	0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x07,
-	0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0x48, 0x0a, 0x06, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
-	0x6e, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43,
-	0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75,
-	0x65, 0x22, 0xf5, 0x01, 0x0a, 0x0b, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x56, 0x61, 0x6c, 0x75,
-	0x65, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
-	0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0b, 0x53, 0x74, 0x72,
-	0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00,
-	0x52, 0x0b, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x22, 0x0a,
-	0x0b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01,
-	0x28, 0x0d, 0x48, 0x00, 0x52, 0x0b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75,
-	0x65, 0x12, 0x22, 0x0a, 0x0b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65,
-	0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x0b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34,
-	0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x24, 0x0a, 0x0c, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34,
-	0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0c, 0x46,
-	0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, 0x09, 0x42,
-	0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00,
-	0x52, 0x09, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x54,
-	0x79, 0x70, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x20, 0x5a, 0x1e, 0x64, 0x70, 0x73,
-	0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x62,
-	0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x33,
+	0x52, 0x09, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x55,
+	0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65,
+	0x72, 0x49, 0x44, 0x1a, 0x3c, 0x0a, 0x0e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
+	0x01, 0x22, 0x35, 0x0a, 0x08, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x12, 0x29, 0x0a,
+	0x07, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f,
+	0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52,
+	0x07, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0x48, 0x0a, 0x06, 0x43, 0x6f, 0x6c, 0x75,
+	0x6d, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e,
+	0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x22, 0xf5, 0x01, 0x0a, 0x0b, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0b, 0x53, 0x74,
+	0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48,
+	0x00, 0x52, 0x0b, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x22,
+	0x0a, 0x0b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x0b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x12, 0x22, 0x0a, 0x0b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x0b, 0x55, 0x69, 0x6e, 0x74, 0x36,
+	0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x24, 0x0a, 0x0c, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36,
+	0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0c,
+	0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, 0x09,
+	0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x48,
+	0x00, 0x52, 0x09, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0c, 0x0a, 0x0a,
+	0x54, 0x79, 0x70, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x20, 0x5a, 0x1e, 0x64, 0x70,
+	0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x61, 0x70, 0x69, 0x2f, 0x70,
+	0x62, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x62, 0x06, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -1955,7 +1904,7 @@ func file_v1_request_command_proto_rawDescGZIP() []byte {
 	return file_v1_request_command_proto_rawDescData
 }
 
-var file_v1_request_command_proto_msgTypes = make([]protoimpl.MessageInfo, 29)
+var file_v1_request_command_proto_msgTypes = make([]protoimpl.MessageInfo, 28)
 var file_v1_request_command_proto_goTypes = []interface{}{
 	(*AutoMigrateRequest)(nil),      // 0: request.AutoMigrateRequest
 	(*AutoMigrateItem)(nil),         // 1: request.AutoMigrateItem
@@ -1970,31 +1919,30 @@ var file_v1_request_command_proto_goTypes = []interface{}{
 	(*InsertRequest)(nil),           // 10: request.InsertRequest
 	(*InsertBatchRequest)(nil),      // 11: request.InsertBatchRequest
 	(*InsertTableRowItem)(nil),      // 12: request.InsertTableRowItem
-	(*InsertItem)(nil),              // 13: request.InsertItem
-	(*DeleteRequest)(nil),           // 14: request.DeleteRequest
-	(*DeleteBatchRequest)(nil),      // 15: request.DeleteBatchRequest
-	(*DeleteTableRowItem)(nil),      // 16: request.DeleteTableRowItem
-	(*DeleteItem)(nil),              // 17: request.DeleteItem
-	(*UpdateRequest)(nil),           // 18: request.UpdateRequest
-	(*ReplayRequest)(nil),           // 19: request.ReplayRequest
-	(*TableRow)(nil),                // 20: request.TableRow
-	(*Column)(nil),                  // 21: request.Column
-	(*ColumnValue)(nil),             // 22: request.ColumnValue
-	nil,                             // 23: request.DeleteTxRequest.KeyValuesEntry
-	nil,                             // 24: request.UpdateTxRequest.KeyValuesEntry
-	nil,                             // 25: request.DeleteRequest.KeyValuesEntry
-	nil,                             // 26: request.DeleteItem.KeyValuesEntry
-	nil,                             // 27: request.UpdateRequest.KeyValuesEntry
-	nil,                             // 28: request.ReplayRequest.KeyValuesEntry
+	(*DeleteRequest)(nil),           // 13: request.DeleteRequest
+	(*DeleteBatchRequest)(nil),      // 14: request.DeleteBatchRequest
+	(*DeleteTableRowItem)(nil),      // 15: request.DeleteTableRowItem
+	(*DeleteItem)(nil),              // 16: request.DeleteItem
+	(*UpdateRequest)(nil),           // 17: request.UpdateRequest
+	(*ReplayRequest)(nil),           // 18: request.ReplayRequest
+	(*TableRow)(nil),                // 19: request.TableRow
+	(*Column)(nil),                  // 20: request.Column
+	(*ColumnValue)(nil),             // 21: request.ColumnValue
+	nil,                             // 22: request.DeleteTxRequest.KeyValuesEntry
+	nil,                             // 23: request.UpdateTxRequest.KeyValuesEntry
+	nil,                             // 24: request.DeleteRequest.KeyValuesEntry
+	nil,                             // 25: request.DeleteItem.KeyValuesEntry
+	nil,                             // 26: request.UpdateRequest.KeyValuesEntry
+	nil,                             // 27: request.ReplayRequest.KeyValuesEntry
 }
 var file_v1_request_command_proto_depIdxs = []int32{
 	1,  // 0: request.AutoMigrateRequest.Items:type_name -> request.AutoMigrateItem
-	20, // 1: request.InsertTxRequest.TableRow:type_name -> request.TableRow
+	19, // 1: request.InsertTxRequest.TableRow:type_name -> request.TableRow
 	12, // 2: request.InsertBatchTxRequest.Items:type_name -> request.InsertTableRowItem
-	23, // 3: request.DeleteTxRequest.KeyValues:type_name -> request.DeleteTxRequest.KeyValuesEntry
-	16, // 4: request.DeleteBatchTxRequest.Items:type_name -> request.DeleteTableRowItem
-	24, // 5: request.UpdateTxRequest.KeyValues:type_name -> request.UpdateTxRequest.KeyValuesEntry
-	20, // 6: request.UpdateTxRequest.NewTableRow:type_name -> request.TableRow
+	22, // 3: request.DeleteTxRequest.KeyValues:type_name -> request.DeleteTxRequest.KeyValuesEntry
+	15, // 4: request.DeleteBatchTxRequest.Items:type_name -> request.DeleteTableRowItem
+	23, // 5: request.UpdateTxRequest.KeyValues:type_name -> request.UpdateTxRequest.KeyValuesEntry
+	19, // 6: request.UpdateTxRequest.NewTableRow:type_name -> request.TableRow
 	2,  // 7: request.TransactionOperation.TransactionBeginRequest:type_name -> request.TransactionBeginRequest
 	3,  // 8: request.TransactionOperation.InsertTxRequest:type_name -> request.InsertTxRequest
 	4,  // 9: request.TransactionOperation.InsertBatchTxRequest:type_name -> request.InsertBatchTxRequest
@@ -2002,24 +1950,23 @@ var file_v1_request_command_proto_depIdxs = []int32{
 	6,  // 11: request.TransactionOperation.DeleteBatchTxRequest:type_name -> request.DeleteBatchTxRequest
 	7,  // 12: request.TransactionOperation.UpdateTxRequest:type_name -> request.UpdateTxRequest
 	8,  // 13: request.TransactionOperation.TransactionEndRequest:type_name -> request.TransactionEndRequest
-	20, // 14: request.InsertRequest.TableRow:type_name -> request.TableRow
+	19, // 14: request.InsertRequest.TableRow:type_name -> request.TableRow
 	12, // 15: request.InsertBatchRequest.Items:type_name -> request.InsertTableRowItem
-	13, // 16: request.InsertTableRowItem.Items:type_name -> request.InsertItem
-	20, // 17: request.InsertItem.TableRow:type_name -> request.TableRow
-	25, // 18: request.DeleteRequest.KeyValues:type_name -> request.DeleteRequest.KeyValuesEntry
-	16, // 19: request.DeleteBatchRequest.Items:type_name -> request.DeleteTableRowItem
-	17, // 20: request.DeleteTableRowItem.Items:type_name -> request.DeleteItem
-	26, // 21: request.DeleteItem.KeyValues:type_name -> request.DeleteItem.KeyValuesEntry
-	27, // 22: request.UpdateRequest.KeyValues:type_name -> request.UpdateRequest.KeyValuesEntry
-	20, // 23: request.UpdateRequest.NewTableRow:type_name -> request.TableRow
-	28, // 24: request.ReplayRequest.KeyValues:type_name -> request.ReplayRequest.KeyValuesEntry
-	21, // 25: request.TableRow.Columns:type_name -> request.Column
-	22, // 26: request.Column.Value:type_name -> request.ColumnValue
-	27, // [27:27] is the sub-list for method output_type
-	27, // [27:27] is the sub-list for method input_type
-	27, // [27:27] is the sub-list for extension type_name
-	27, // [27:27] is the sub-list for extension extendee
-	0,  // [0:27] is the sub-list for field type_name
+	19, // 16: request.InsertTableRowItem.TableRows:type_name -> request.TableRow
+	24, // 17: request.DeleteRequest.KeyValues:type_name -> request.DeleteRequest.KeyValuesEntry
+	15, // 18: request.DeleteBatchRequest.Items:type_name -> request.DeleteTableRowItem
+	16, // 19: request.DeleteTableRowItem.Items:type_name -> request.DeleteItem
+	25, // 20: request.DeleteItem.KeyValues:type_name -> request.DeleteItem.KeyValuesEntry
+	26, // 21: request.UpdateRequest.KeyValues:type_name -> request.UpdateRequest.KeyValuesEntry
+	19, // 22: request.UpdateRequest.NewTableRow:type_name -> request.TableRow
+	27, // 23: request.ReplayRequest.KeyValues:type_name -> request.ReplayRequest.KeyValuesEntry
+	20, // 24: request.TableRow.Columns:type_name -> request.Column
+	21, // 25: request.Column.Value:type_name -> request.ColumnValue
+	26, // [26:26] is the sub-list for method output_type
+	26, // [26:26] is the sub-list for method input_type
+	26, // [26:26] is the sub-list for extension type_name
+	26, // [26:26] is the sub-list for extension extendee
+	0,  // [0:26] is the sub-list for field type_name
 }
 
 func init() { file_v1_request_command_proto_init() }
@@ -2185,18 +2132,6 @@ func file_v1_request_command_proto_init() {
 			}
 		}
 		file_v1_request_command_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*InsertItem); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_v1_request_command_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*DeleteRequest); i {
 			case 0:
 				return &v.state
@@ -2208,7 +2143,7 @@ func file_v1_request_command_proto_init() {
 				return nil
 			}
 		}
-		file_v1_request_command_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+		file_v1_request_command_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*DeleteBatchRequest); i {
 			case 0:
 				return &v.state
@@ -2220,7 +2155,7 @@ func file_v1_request_command_proto_init() {
 				return nil
 			}
 		}
-		file_v1_request_command_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+		file_v1_request_command_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*DeleteTableRowItem); i {
 			case 0:
 				return &v.state
@@ -2232,7 +2167,7 @@ func file_v1_request_command_proto_init() {
 				return nil
 			}
 		}
-		file_v1_request_command_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+		file_v1_request_command_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*DeleteItem); i {
 			case 0:
 				return &v.state
@@ -2244,7 +2179,7 @@ func file_v1_request_command_proto_init() {
 				return nil
 			}
 		}
-		file_v1_request_command_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+		file_v1_request_command_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*UpdateRequest); i {
 			case 0:
 				return &v.state
@@ -2256,7 +2191,7 @@ func file_v1_request_command_proto_init() {
 				return nil
 			}
 		}
-		file_v1_request_command_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+		file_v1_request_command_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*ReplayRequest); i {
 			case 0:
 				return &v.state
@@ -2268,7 +2203,7 @@ func file_v1_request_command_proto_init() {
 				return nil
 			}
 		}
-		file_v1_request_command_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
+		file_v1_request_command_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*TableRow); i {
 			case 0:
 				return &v.state
@@ -2280,7 +2215,7 @@ func file_v1_request_command_proto_init() {
 				return nil
 			}
 		}
-		file_v1_request_command_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
+		file_v1_request_command_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*Column); i {
 			case 0:
 				return &v.state
@@ -2292,7 +2227,7 @@ func file_v1_request_command_proto_init() {
 				return nil
 			}
 		}
-		file_v1_request_command_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
+		file_v1_request_command_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*ColumnValue); i {
 			case 0:
 				return &v.state
@@ -2314,7 +2249,7 @@ func file_v1_request_command_proto_init() {
 		(*TransactionOperation_UpdateTxRequest)(nil),
 		(*TransactionOperation_TransactionEndRequest)(nil),
 	}
-	file_v1_request_command_proto_msgTypes[22].OneofWrappers = []interface{}{
+	file_v1_request_command_proto_msgTypes[21].OneofWrappers = []interface{}{
 		(*ColumnValue_StringValue)(nil),
 		(*ColumnValue_Uint32Value)(nil),
 		(*ColumnValue_Uint64Value)(nil),
@@ -2327,7 +2262,7 @@ func file_v1_request_command_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_v1_request_command_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   29,
+			NumMessages:   28,
 			NumExtensions: 0,
 			NumServices:   0,
 		},

+ 5 - 16
pb/v1/request/command.validator.pb.go

@@ -220,27 +220,16 @@ func (this *InsertTableRowItem) Validate() error {
 	if this.Version == "" {
 		return github_com_mwitkow_go_proto_validators.FieldError("Version", fmt.Errorf(`value '%v' must not be an empty string`, this.Version))
 	}
-	if len(this.Items) < 1 {
-		return github_com_mwitkow_go_proto_validators.FieldError("Items", fmt.Errorf(`value '%v' must contain at least 1 elements`, this.Items))
-	}
-	for _, item := range this.Items {
-		if item != nil {
-			if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
-				return github_com_mwitkow_go_proto_validators.FieldError("Items", err)
-			}
-		}
-	}
-	return nil
-}
-func (this *InsertItem) Validate() error {
 	for _, item := range this.KeyColumns {
 		if !(len(item) > 0) {
 			return github_com_mwitkow_go_proto_validators.FieldError("KeyColumns", fmt.Errorf(`value '%v' must have a length greater than '0'`, item))
 		}
 	}
-	if this.TableRow != nil {
-		if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.TableRow); err != nil {
-			return github_com_mwitkow_go_proto_validators.FieldError("TableRow", err)
+	for _, item := range this.TableRows {
+		if item != nil {
+			if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
+				return github_com_mwitkow_go_proto_validators.FieldError("TableRows", err)
+			}
 		}
 	}
 	return nil

+ 41 - 59
test/v1/v1_test.go

@@ -207,33 +207,27 @@ func TestTransactionBatch(t *testing.T) {
 		}).
 		transaction(func(tx client.Transaction) error {
 			statement, err := tx.InsertBatchTx(&client.InsertBatchRequest{
-				Items: []*client.InsertTableRowItem{
+				Items: []client.InsertTableRowItem{
 					{
 						TablePrefixWithSchema: tablePrefix,
 						Version:               "v1",
-						Items: []*client.InsertItem{
+						KeyColumns:            []string{"id"},
+						TableRows: []map[string]any{
 							{
-								KeyColumns: []string{"id"},
-								TableRow: map[string]any{
-									"id":        id1,
-									"name":      name1,
-									"time":      now1,
-									"table_num": tableNum1,
-								},
+								"id":        id1,
+								"name":      name1,
+								"time":      now1,
+								"table_num": tableNum1,
 							},
 							{
-								KeyColumns: []string{"id"},
-								TableRow: map[string]any{
-									"id":        id2,
-									"name":      name2,
-									"time":      now2,
-									"table_num": tableNum2,
-								},
+								"id":        id2,
+								"name":      name2,
+								"time":      now2,
+								"table_num": tableNum2,
 							},
 						},
 					},
 				},
-				UserID: "test",
 			})
 			if err != nil {
 				return err
@@ -268,13 +262,13 @@ func TestTransactionBatch(t *testing.T) {
 		assertEqual(tableNum2, resultMap["table_num"], "表数量不一致").
 		transaction(func(tx client.Transaction) error {
 			statement, err := tx.DeleteBatchTx(&client.DeleteBatchRequest{
-				Items: []*client.DeleteTableRowItem{
+				Items: []client.DeleteTableRowItem{
 					{
 						TablePrefixWithSchema: tablePrefix,
 						Version:               "v1",
-						Items: []*client.DeleteItem{
-							{KeyValues: map[string]string{"id": id1}},
-							{KeyValues: map[string]string{"id": id2}},
+						KeyValues: []map[string]string{
+							{"id": id1},
+							{"id": id2},
 						},
 					},
 				},
@@ -387,33 +381,27 @@ func TestInsertBatch(t *testing.T) {
 			},
 		}).
 		insertBatch(&client.InsertBatchRequest{
-			Items: []*client.InsertTableRowItem{
+			Items: []client.InsertTableRowItem{
 				{
 					TablePrefixWithSchema: tablePrefix,
 					Version:               "v1",
-					Items: []*client.InsertItem{
+					KeyColumns:            []string{"id"},
+					TableRows: []map[string]any{
 						{
-							KeyColumns: []string{"id"},
-							TableRow: map[string]any{
-								"id":        id1,
-								"name":      name1,
-								"time":      now1,
-								"table_num": tableNum1,
-							},
+							"id":        id1,
+							"name":      name1,
+							"time":      now1,
+							"table_num": tableNum1,
 						},
 						{
-							KeyColumns: []string{"id"},
-							TableRow: map[string]any{
-								"id":        id2,
-								"name":      name2,
-								"time":      now2,
-								"table_num": tableNum2,
-							},
+							"id":        id2,
+							"name":      name2,
+							"time":      now2,
+							"table_num": tableNum2,
 						},
 					},
 				},
 			},
-			UserID: "test",
 		}).
 		queryByWhereAndOrderBy(&client.QueryByWhereAndOrderByRequest{
 			TablePrefixWithSchema: tablePrefix,
@@ -586,42 +574,36 @@ func TestDeleteBatch(t *testing.T) {
 			},
 		}).
 		insertBatch(&client.InsertBatchRequest{
-			Items: []*client.InsertTableRowItem{
+			Items: []client.InsertTableRowItem{
 				{
 					TablePrefixWithSchema: tablePrefix,
 					Version:               "v1",
-					Items: []*client.InsertItem{
+					KeyColumns:            []string{"id"},
+					TableRows: []map[string]any{
 						{
-							KeyColumns: []string{"id"},
-							TableRow: map[string]any{
-								"id":        id1,
-								"name":      name1,
-								"time":      now1,
-								"table_num": tableNum1,
-							},
+							"id":        id1,
+							"name":      name1,
+							"time":      now1,
+							"table_num": tableNum1,
 						},
 						{
-							KeyColumns: []string{"id"},
-							TableRow: map[string]any{
-								"id":        id2,
-								"name":      name2,
-								"time":      now2,
-								"table_num": tableNum2,
-							},
+							"id":        id2,
+							"name":      name2,
+							"time":      now2,
+							"table_num": tableNum2,
 						},
 					},
 				},
 			},
-			UserID: "test",
 		}).
 		deleteBatch(&client.DeleteBatchRequest{
-			Items: []*client.DeleteTableRowItem{
+			Items: []client.DeleteTableRowItem{
 				{
 					TablePrefixWithSchema: tablePrefix,
 					Version:               "v1",
-					Items: []*client.DeleteItem{
-						{KeyValues: map[string]string{"id": id1}},
-						{KeyValues: map[string]string{"id": id2}},
+					KeyValues: []map[string]string{
+						{"id": id1},
+						{"id": id2},
 					},
 				},
 			},