Browse Source

修改bug

yjp 1 năm trước cách đây
mục cha
commit
507e2e7361
4 tập tin đã thay đổi với 260 bổ sung179 xóa
  1. 0 2
      dpsv1/client.go
  2. 237 171
      pb/v1/request/command.pb.go
  3. 14 1
      pb/v1/request/command.validator.pb.go
  4. 9 5
      ports/client_cmd_request.go

+ 0 - 2
dpsv1/client.go

@@ -96,8 +96,6 @@ func (c *Client) Insert(req *ports.InsertRequest) (string, error) {
 	return reply.Statement, nil
 }
 
-// TODO InsertBatch
-
 func (c *Client) Delete(req *ports.DeleteRequest) (string, error) {
 	keysJsonBytes, err := json.Marshal(req.Keys)
 	if err != nil {

+ 237 - 171
pb/v1/request/command.pb.go

@@ -335,8 +335,9 @@ type InsertBatchRequest struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	DatabaseID string        `protobuf:"bytes,1,opt,name=DatabaseID,proto3" json:"DatabaseID,omitempty"`
-	Items      []*InsertItem `protobuf:"bytes,2,rep,name=Items,proto3" json:"Items,omitempty"`
+	DatabaseID string             `protobuf:"bytes,1,opt,name=DatabaseID,proto3" json:"DatabaseID,omitempty"`
+	Items      []*InsertTableItem `protobuf:"bytes,2,rep,name=Items,proto3" json:"Items,omitempty"`
+	UserID     string             `protobuf:"bytes,3,opt,name=UserID,proto3" json:"UserID,omitempty"`
 }
 
 func (x *InsertBatchRequest) Reset() {
@@ -378,27 +379,32 @@ func (x *InsertBatchRequest) GetDatabaseID() string {
 	return ""
 }
 
-func (x *InsertBatchRequest) GetItems() []*InsertItem {
+func (x *InsertBatchRequest) GetItems() []*InsertTableItem {
 	if x != nil {
 		return x.Items
 	}
 	return nil
 }
 
-type InsertItem struct {
+func (x *InsertBatchRequest) GetUserID() string {
+	if x != nil {
+		return x.UserID
+	}
+	return ""
+}
+
+type InsertTableItem struct {
 	state         protoimpl.MessageState
 	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"`
-	Keys                  []byte `protobuf:"bytes,3,opt,name=Keys,proto3" json:"Keys,omitempty"`
-	TableRow              []byte `protobuf:"bytes,4,opt,name=TableRow,proto3" json:"TableRow,omitempty"`
-	UserID                string `protobuf:"bytes,5,opt,name=UserID,proto3" json:"UserID,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"`
+	Items                 []*InsertItem `protobuf:"bytes,3,rep,name=Items,proto3" json:"Items,omitempty"`
 }
 
-func (x *InsertItem) Reset() {
-	*x = InsertItem{}
+func (x *InsertTableItem) Reset() {
+	*x = InsertTableItem{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_v1_request_command_proto_msgTypes[4]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -406,13 +412,13 @@ func (x *InsertItem) Reset() {
 	}
 }
 
-func (x *InsertItem) String() string {
+func (x *InsertTableItem) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*InsertItem) ProtoMessage() {}
+func (*InsertTableItem) ProtoMessage() {}
 
-func (x *InsertItem) ProtoReflect() protoreflect.Message {
+func (x *InsertTableItem) ProtoReflect() protoreflect.Message {
 	mi := &file_v1_request_command_proto_msgTypes[4]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -424,44 +430,85 @@ func (x *InsertItem) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use InsertItem.ProtoReflect.Descriptor instead.
-func (*InsertItem) Descriptor() ([]byte, []int) {
+// Deprecated: Use InsertTableItem.ProtoReflect.Descriptor instead.
+func (*InsertTableItem) Descriptor() ([]byte, []int) {
 	return file_v1_request_command_proto_rawDescGZIP(), []int{4}
 }
 
-func (x *InsertItem) GetTablePrefixWithSchema() string {
+func (x *InsertTableItem) GetTablePrefixWithSchema() string {
 	if x != nil {
 		return x.TablePrefixWithSchema
 	}
 	return ""
 }
 
-func (x *InsertItem) GetVersion() string {
+func (x *InsertTableItem) GetVersion() string {
 	if x != nil {
 		return x.Version
 	}
 	return ""
 }
 
-func (x *InsertItem) GetKeys() []byte {
+func (x *InsertTableItem) GetItems() []*InsertItem {
 	if x != nil {
-		return x.Keys
+		return x.Items
 	}
 	return nil
 }
 
-func (x *InsertItem) GetTableRow() []byte {
+type InsertItem struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Keys     []byte `protobuf:"bytes,1,opt,name=Keys,proto3" json:"Keys,omitempty"`
+	TableRow []byte `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[5]
+		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[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 InsertItem.ProtoReflect.Descriptor instead.
+func (*InsertItem) Descriptor() ([]byte, []int) {
+	return file_v1_request_command_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *InsertItem) GetKeys() []byte {
 	if x != nil {
-		return x.TableRow
+		return x.Keys
 	}
 	return nil
 }
 
-func (x *InsertItem) GetUserID() string {
+func (x *InsertItem) GetTableRow() []byte {
 	if x != nil {
-		return x.UserID
+		return x.TableRow
 	}
-	return ""
+	return nil
 }
 
 type DeleteRequest struct {
@@ -479,7 +526,7 @@ type DeleteRequest struct {
 func (x *DeleteRequest) Reset() {
 	*x = DeleteRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_v1_request_command_proto_msgTypes[5]
+		mi := &file_v1_request_command_proto_msgTypes[6]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -492,7 +539,7 @@ func (x *DeleteRequest) String() string {
 func (*DeleteRequest) ProtoMessage() {}
 
 func (x *DeleteRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_v1_request_command_proto_msgTypes[5]
+	mi := &file_v1_request_command_proto_msgTypes[6]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -505,7 +552,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{5}
+	return file_v1_request_command_proto_rawDescGZIP(), []int{6}
 }
 
 func (x *DeleteRequest) GetDatabaseID() string {
@@ -556,7 +603,7 @@ type DeleteBatchRequest struct {
 func (x *DeleteBatchRequest) Reset() {
 	*x = DeleteBatchRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_v1_request_command_proto_msgTypes[6]
+		mi := &file_v1_request_command_proto_msgTypes[7]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -569,7 +616,7 @@ func (x *DeleteBatchRequest) String() string {
 func (*DeleteBatchRequest) ProtoMessage() {}
 
 func (x *DeleteBatchRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_v1_request_command_proto_msgTypes[6]
+	mi := &file_v1_request_command_proto_msgTypes[7]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -582,7 +629,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{6}
+	return file_v1_request_command_proto_rawDescGZIP(), []int{7}
 }
 
 func (x *DeleteBatchRequest) GetDatabaseID() string {
@@ -619,7 +666,7 @@ type DeleteTableItem struct {
 func (x *DeleteTableItem) Reset() {
 	*x = DeleteTableItem{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_v1_request_command_proto_msgTypes[7]
+		mi := &file_v1_request_command_proto_msgTypes[8]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -632,7 +679,7 @@ func (x *DeleteTableItem) String() string {
 func (*DeleteTableItem) ProtoMessage() {}
 
 func (x *DeleteTableItem) ProtoReflect() protoreflect.Message {
-	mi := &file_v1_request_command_proto_msgTypes[7]
+	mi := &file_v1_request_command_proto_msgTypes[8]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -645,7 +692,7 @@ func (x *DeleteTableItem) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeleteTableItem.ProtoReflect.Descriptor instead.
 func (*DeleteTableItem) Descriptor() ([]byte, []int) {
-	return file_v1_request_command_proto_rawDescGZIP(), []int{7}
+	return file_v1_request_command_proto_rawDescGZIP(), []int{8}
 }
 
 func (x *DeleteTableItem) GetTablePrefixWithSchema() string {
@@ -674,13 +721,13 @@ type DeleteItem struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Keys []byte `protobuf:"bytes,4,opt,name=Keys,proto3" json:"Keys,omitempty"`
+	Keys []byte `protobuf:"bytes,1,opt,name=Keys,proto3" json:"Keys,omitempty"`
 }
 
 func (x *DeleteItem) Reset() {
 	*x = DeleteItem{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_v1_request_command_proto_msgTypes[8]
+		mi := &file_v1_request_command_proto_msgTypes[9]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -693,7 +740,7 @@ func (x *DeleteItem) String() string {
 func (*DeleteItem) ProtoMessage() {}
 
 func (x *DeleteItem) ProtoReflect() protoreflect.Message {
-	mi := &file_v1_request_command_proto_msgTypes[8]
+	mi := &file_v1_request_command_proto_msgTypes[9]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -706,7 +753,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{8}
+	return file_v1_request_command_proto_rawDescGZIP(), []int{9}
 }
 
 func (x *DeleteItem) GetKeys() []byte {
@@ -732,7 +779,7 @@ type UpdateRequest struct {
 func (x *UpdateRequest) Reset() {
 	*x = UpdateRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_v1_request_command_proto_msgTypes[9]
+		mi := &file_v1_request_command_proto_msgTypes[10]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -745,7 +792,7 @@ func (x *UpdateRequest) String() string {
 func (*UpdateRequest) ProtoMessage() {}
 
 func (x *UpdateRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_v1_request_command_proto_msgTypes[9]
+	mi := &file_v1_request_command_proto_msgTypes[10]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -758,7 +805,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{9}
+	return file_v1_request_command_proto_rawDescGZIP(), []int{10}
 }
 
 func (x *UpdateRequest) GetDatabaseID() string {
@@ -818,7 +865,7 @@ type ReplayRequest struct {
 func (x *ReplayRequest) Reset() {
 	*x = ReplayRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_v1_request_command_proto_msgTypes[10]
+		mi := &file_v1_request_command_proto_msgTypes[11]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -831,7 +878,7 @@ func (x *ReplayRequest) String() string {
 func (*ReplayRequest) ProtoMessage() {}
 
 func (x *ReplayRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_v1_request_command_proto_msgTypes[10]
+	mi := &file_v1_request_command_proto_msgTypes[11]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -844,7 +891,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{10}
+	return file_v1_request_command_proto_rawDescGZIP(), []int{11}
 }
 
 func (x *ReplayRequest) GetDatabaseID() string {
@@ -893,7 +940,7 @@ type TransactionBeginRequest struct {
 func (x *TransactionBeginRequest) Reset() {
 	*x = TransactionBeginRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_v1_request_command_proto_msgTypes[11]
+		mi := &file_v1_request_command_proto_msgTypes[12]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -906,7 +953,7 @@ func (x *TransactionBeginRequest) String() string {
 func (*TransactionBeginRequest) ProtoMessage() {}
 
 func (x *TransactionBeginRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_v1_request_command_proto_msgTypes[11]
+	mi := &file_v1_request_command_proto_msgTypes[12]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -919,7 +966,7 @@ func (x *TransactionBeginRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use TransactionBeginRequest.ProtoReflect.Descriptor instead.
 func (*TransactionBeginRequest) Descriptor() ([]byte, []int) {
-	return file_v1_request_command_proto_rawDescGZIP(), []int{11}
+	return file_v1_request_command_proto_rawDescGZIP(), []int{12}
 }
 
 func (x *TransactionBeginRequest) GetDatabaseID() string {
@@ -938,7 +985,7 @@ type TransactionEndRequest struct {
 func (x *TransactionEndRequest) Reset() {
 	*x = TransactionEndRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_v1_request_command_proto_msgTypes[12]
+		mi := &file_v1_request_command_proto_msgTypes[13]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -951,7 +998,7 @@ func (x *TransactionEndRequest) String() string {
 func (*TransactionEndRequest) ProtoMessage() {}
 
 func (x *TransactionEndRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_v1_request_command_proto_msgTypes[12]
+	mi := &file_v1_request_command_proto_msgTypes[13]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -964,7 +1011,7 @@ func (x *TransactionEndRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use TransactionEndRequest.ProtoReflect.Descriptor instead.
 func (*TransactionEndRequest) Descriptor() ([]byte, []int) {
-	return file_v1_request_command_proto_rawDescGZIP(), []int{12}
+	return file_v1_request_command_proto_rawDescGZIP(), []int{13}
 }
 
 var File_v1_request_command_proto protoreflect.FileDescriptor
@@ -1039,98 +1086,103 @@ var file_v1_request_command_proto_rawDesc = []byte{
 	0x12, 0x22, 0x0a, 0x08, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x18, 0x05, 0x20, 0x01,
 	0x28, 0x0c, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x70, 0x00, 0x52, 0x08, 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, 0x22, 0x6f, 0x0a, 0x12,
-	0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0x8c, 0x01, 0x0a,
+	0x12, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 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, 0x36, 0x0a, 0x05, 0x49,
+	0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x72, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65,
+	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, 0xa4, 0x01, 0x0a, 0x0f,
+	0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 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, 0x4c, 0x0a, 0x0a, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x49, 0x74, 0x65, 0x6d,
+	0x12, 0x1a, 0x0a, 0x04, 0x4b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06,
+	0xe2, 0xdf, 0x1f, 0x02, 0x70, 0x00, 0x52, 0x04, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x22, 0x0a, 0x08,
+	0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06,
+	0xe2, 0xdf, 0x1f, 0x02, 0x70, 0x00, 0x52, 0x08, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77,
+	0x22, 0xcb, 0x01, 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, 0x31, 0x0a, 0x05, 0x49, 0x74,
-	0x65, 0x6d, 0x73, 0x18, 0x02, 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, 0xc4, 0x01,
-	0x0a, 0x0a, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 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, 0x1a, 0x0a, 0x04,
-	0x4b, 0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02,
-	0x70, 0x00, 0x52, 0x04, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x22, 0x0a, 0x08, 0x54, 0x61, 0x62, 0x6c,
-	0x65, 0x52, 0x6f, 0x77, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02,
-	0x70, 0x00, 0x52, 0x08, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x12, 0x16, 0x0a, 0x06,
-	0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73,
-	0x65, 0x72, 0x49, 0x44, 0x22, 0xcb, 0x01, 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, 0x1a,
-	0x0a, 0x04, 0x4b, 0x65, 0x79, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0xe2, 0xdf,
-	0x1f, 0x02, 0x70, 0x00, 0x52, 0x04, 0x4b, 0x65, 0x79, 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, 0x22, 0x8c, 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, 0x36, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
-	0x32, 0x18, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74,
-	0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 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, 0xa4, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c,
-	0x65, 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,
+	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, 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, 0x28, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65,
-	0x74, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1a, 0x0a, 0x04, 0x4b, 0x65, 0x79, 0x73, 0x18, 0x04,
-	0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x70, 0x00, 0x52, 0x04, 0x4b, 0x65,
-	0x79, 0x73, 0x22, 0xf5, 0x01, 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, 0x1a, 0x0a, 0x04,
-	0x4b, 0x65, 0x79, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02,
-	0x70, 0x00, 0x52, 0x04, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x28, 0x0a, 0x0b, 0x4e, 0x65, 0x77, 0x54,
-	0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 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, 0x22, 0xcb, 0x01, 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, 0x1a, 0x0a, 0x04, 0x4b, 0x65, 0x79, 0x73, 0x18, 0x04, 0x20, 0x01,
-	0x28, 0x0c, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x70, 0x00, 0x52, 0x04, 0x4b, 0x65, 0x79, 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, 0x22, 0x41, 0x0a, 0x17, 0x54, 0x72, 0x61, 0x6e,
-	0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x65, 0x67, 0x69, 0x6e, 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, 0x22, 0x17, 0x0a, 0x15, 0x54,
-	0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x64, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 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,
+	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, 0x1a, 0x0a, 0x04, 0x4b, 0x65,
+	0x79, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x70, 0x00,
+	0x52, 0x04, 0x4b, 0x65, 0x79, 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, 0x22, 0x8c,
+	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, 0x36, 0x0a,
+	0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x72,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62,
+	0x6c, 0x65, 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, 0xa4, 0x01,
+	0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 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, 0x28, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x74,
+	0x65, 0x6d, 0x12, 0x1a, 0x0a, 0x04, 0x4b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c,
+	0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x70, 0x00, 0x52, 0x04, 0x4b, 0x65, 0x79, 0x73, 0x22, 0xf5,
+	0x01, 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, 0x1a, 0x0a, 0x04, 0x4b, 0x65, 0x79, 0x73,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x70, 0x00, 0x52, 0x04,
+	0x4b, 0x65, 0x79, 0x73, 0x12, 0x28, 0x0a, 0x0b, 0x4e, 0x65, 0x77, 0x54, 0x61, 0x62, 0x6c, 0x65,
+	0x52, 0x6f, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 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, 0x22, 0xcb, 0x01, 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, 0x1a, 0x0a, 0x04, 0x4b, 0x65, 0x79, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06,
+	0xe2, 0xdf, 0x1f, 0x02, 0x70, 0x00, 0x52, 0x04, 0x4b, 0x65, 0x79, 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, 0x22, 0x41, 0x0a, 0x17, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x42, 0x65, 0x67, 0x69, 0x6e, 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, 0x22, 0x17, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73,
+	0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	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 (
@@ -1145,38 +1197,40 @@ 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, 13)
+var file_v1_request_command_proto_msgTypes = make([]protoimpl.MessageInfo, 14)
 var file_v1_request_command_proto_goTypes = []interface{}{
 	(*AutoMigrateRequest)(nil),      // 0: request.AutoMigrateRequest
 	(*TransactionOperation)(nil),    // 1: request.TransactionOperation
 	(*InsertRequest)(nil),           // 2: request.InsertRequest
 	(*InsertBatchRequest)(nil),      // 3: request.InsertBatchRequest
-	(*InsertItem)(nil),              // 4: request.InsertItem
-	(*DeleteRequest)(nil),           // 5: request.DeleteRequest
-	(*DeleteBatchRequest)(nil),      // 6: request.DeleteBatchRequest
-	(*DeleteTableItem)(nil),         // 7: request.DeleteTableItem
-	(*DeleteItem)(nil),              // 8: request.DeleteItem
-	(*UpdateRequest)(nil),           // 9: request.UpdateRequest
-	(*ReplayRequest)(nil),           // 10: request.ReplayRequest
-	(*TransactionBeginRequest)(nil), // 11: request.TransactionBeginRequest
-	(*TransactionEndRequest)(nil),   // 12: request.TransactionEndRequest
+	(*InsertTableItem)(nil),         // 4: request.InsertTableItem
+	(*InsertItem)(nil),              // 5: request.InsertItem
+	(*DeleteRequest)(nil),           // 6: request.DeleteRequest
+	(*DeleteBatchRequest)(nil),      // 7: request.DeleteBatchRequest
+	(*DeleteTableItem)(nil),         // 8: request.DeleteTableItem
+	(*DeleteItem)(nil),              // 9: request.DeleteItem
+	(*UpdateRequest)(nil),           // 10: request.UpdateRequest
+	(*ReplayRequest)(nil),           // 11: request.ReplayRequest
+	(*TransactionBeginRequest)(nil), // 12: request.TransactionBeginRequest
+	(*TransactionEndRequest)(nil),   // 13: request.TransactionEndRequest
 }
 var file_v1_request_command_proto_depIdxs = []int32{
-	11, // 0: request.TransactionOperation.TransactionBeginRequest:type_name -> request.TransactionBeginRequest
+	12, // 0: request.TransactionOperation.TransactionBeginRequest:type_name -> request.TransactionBeginRequest
 	2,  // 1: request.TransactionOperation.InsertRequest:type_name -> request.InsertRequest
 	3,  // 2: request.TransactionOperation.InsertBatchRequest:type_name -> request.InsertBatchRequest
-	5,  // 3: request.TransactionOperation.DeleteRequest:type_name -> request.DeleteRequest
-	6,  // 4: request.TransactionOperation.DeleteBatchRequest:type_name -> request.DeleteBatchRequest
-	9,  // 5: request.TransactionOperation.UpdateRequest:type_name -> request.UpdateRequest
-	12, // 6: request.TransactionOperation.TransactionEndRequest:type_name -> request.TransactionEndRequest
-	4,  // 7: request.InsertBatchRequest.Items:type_name -> request.InsertItem
-	7,  // 8: request.DeleteBatchRequest.Items:type_name -> request.DeleteTableItem
-	8,  // 9: request.DeleteTableItem.Items:type_name -> request.DeleteItem
-	10, // [10:10] is the sub-list for method output_type
-	10, // [10:10] is the sub-list for method input_type
-	10, // [10:10] is the sub-list for extension type_name
-	10, // [10:10] is the sub-list for extension extendee
-	0,  // [0:10] is the sub-list for field type_name
+	6,  // 3: request.TransactionOperation.DeleteRequest:type_name -> request.DeleteRequest
+	7,  // 4: request.TransactionOperation.DeleteBatchRequest:type_name -> request.DeleteBatchRequest
+	10, // 5: request.TransactionOperation.UpdateRequest:type_name -> request.UpdateRequest
+	13, // 6: request.TransactionOperation.TransactionEndRequest:type_name -> request.TransactionEndRequest
+	4,  // 7: request.InsertBatchRequest.Items:type_name -> request.InsertTableItem
+	5,  // 8: request.InsertTableItem.Items:type_name -> request.InsertItem
+	8,  // 9: request.DeleteBatchRequest.Items:type_name -> request.DeleteTableItem
+	9,  // 10: request.DeleteTableItem.Items:type_name -> request.DeleteItem
+	11, // [11:11] is the sub-list for method output_type
+	11, // [11:11] is the sub-list for method input_type
+	11, // [11:11] is the sub-list for extension type_name
+	11, // [11:11] is the sub-list for extension extendee
+	0,  // [0:11] is the sub-list for field type_name
 }
 
 func init() { file_v1_request_command_proto_init() }
@@ -1234,7 +1288,7 @@ func file_v1_request_command_proto_init() {
 			}
 		}
 		file_v1_request_command_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*InsertItem); i {
+			switch v := v.(*InsertTableItem); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1246,7 +1300,7 @@ func file_v1_request_command_proto_init() {
 			}
 		}
 		file_v1_request_command_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DeleteRequest); i {
+			switch v := v.(*InsertItem); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1258,7 +1312,7 @@ func file_v1_request_command_proto_init() {
 			}
 		}
 		file_v1_request_command_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DeleteBatchRequest); i {
+			switch v := v.(*DeleteRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1270,7 +1324,7 @@ func file_v1_request_command_proto_init() {
 			}
 		}
 		file_v1_request_command_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DeleteTableItem); i {
+			switch v := v.(*DeleteBatchRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1282,7 +1336,7 @@ func file_v1_request_command_proto_init() {
 			}
 		}
 		file_v1_request_command_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DeleteItem); i {
+			switch v := v.(*DeleteTableItem); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1294,7 +1348,7 @@ func file_v1_request_command_proto_init() {
 			}
 		}
 		file_v1_request_command_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*UpdateRequest); i {
+			switch v := v.(*DeleteItem); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1306,7 +1360,7 @@ func file_v1_request_command_proto_init() {
 			}
 		}
 		file_v1_request_command_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ReplayRequest); i {
+			switch v := v.(*UpdateRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1318,7 +1372,7 @@ func file_v1_request_command_proto_init() {
 			}
 		}
 		file_v1_request_command_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TransactionBeginRequest); i {
+			switch v := v.(*ReplayRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -1330,6 +1384,18 @@ func file_v1_request_command_proto_init() {
 			}
 		}
 		file_v1_request_command_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TransactionBeginRequest); 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[13].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*TransactionEndRequest); i {
 			case 0:
 				return &v.state
@@ -1357,7 +1423,7 @@ func file_v1_request_command_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_v1_request_command_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   13,
+			NumMessages:   14,
 			NumExtensions: 0,
 			NumServices:   0,
 		},

+ 14 - 1
pb/v1/request/command.validator.pb.go

@@ -117,13 +117,26 @@ func (this *InsertBatchRequest) Validate() error {
 	}
 	return nil
 }
-func (this *InsertItem) Validate() error {
+func (this *InsertTableItem) Validate() error {
 	if this.TablePrefixWithSchema == "" {
 		return github_com_mwitkow_go_proto_validators.FieldError("TablePrefixWithSchema", fmt.Errorf(`value '%v' must not be an empty string`, this.TablePrefixWithSchema))
 	}
 	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 {
 	if !(len(this.Keys) > 0) {
 		return github_com_mwitkow_go_proto_validators.FieldError("Keys", fmt.Errorf(`value '%v' must have a length greater than '0'`, this.Keys))
 	}

+ 9 - 5
ports/client_cmd_request.go

@@ -20,15 +20,19 @@ type InsertRequest struct {
 
 type InsertBatchRequest struct {
 	DatabaseID string
-	Items      []*InsertItem
+	Items      []*InsertTableItem
+	UserID     string
 }
 
-type InsertItem struct {
+type InsertTableItem struct {
 	TablePrefixWithSchema string
 	Version               string
-	Keys                  []Key
-	TableRow              map[string]any
-	UserID                string
+	Items                 []*InsertItem
+}
+
+type InsertItem struct {
+	Keys     []Key
+	TableRow map[string]any
 }
 
 type DeleteRequest struct {