瀏覽代碼

修改接口

yjp 3 月之前
父節點
當前提交
0d8ce9a0e7

+ 3 - 3
client/client_cmd_request.go

@@ -33,7 +33,7 @@ type InsertTableRowItem struct {
 type DeleteRequest struct {
 	TablePrefixWithSchema string
 	Version               string
-	KeyValues             map[string]string
+	KeyValues             *KeyValue
 	UserID                string
 }
 
@@ -48,7 +48,7 @@ type DeleteWhereRequest struct {
 type UpdateRequest struct {
 	TablePrefixWithSchema string
 	Version               string
-	KeyValues             map[string]string
+	KeyValues             *KeyValue
 	NewTableRow           *TableRow
 	UserID                string
 }
@@ -65,6 +65,6 @@ type UpdateWhereRequest struct {
 type ReplayRequest struct {
 	TablePrefixWithSchema string
 	Version               string
-	KeyValues             map[string]string
+	KeyValues             *KeyValue
 	UserID                string
 }

+ 1 - 1
client/client_query_request.go

@@ -28,7 +28,7 @@ type QueryByKeysRequest struct {
 	TablePrefixWithSchema string
 	Version               string
 	Select                *Clause
-	KeyValues             map[string]string
+	KeyValues             *KeyValue
 }
 
 type CountWhereRequest struct {

+ 34 - 0
client/key_value.go

@@ -0,0 +1,34 @@
+package client
+
+import "strings"
+
+type KeyValue struct {
+	columns []string
+	values  []string
+}
+
+func NewKeyValue() *KeyValue {
+	return &KeyValue{
+		columns: make([]string, 0),
+		values:  make([]string, 0),
+	}
+}
+
+func (keyValue *KeyValue) Add(column string, value string) *KeyValue {
+	if strings.Trim(column, " ") == "" || strings.Trim(value, " ") == "" {
+		return keyValue
+	}
+
+	keyValue.columns = append(keyValue.columns, column)
+	keyValue.values = append(keyValue.values, value)
+
+	return keyValue
+}
+
+func (keyValue *KeyValue) Columns() []string {
+	return keyValue.columns
+}
+
+func (keyValue *KeyValue) Values() []string {
+	return keyValue.values
+}

+ 8 - 4
dpsv1/client.go

@@ -198,7 +198,8 @@ func (c *Client) Delete(req *client.DeleteRequest) (string, error) {
 		DatabaseID:            c.databaseID,
 		TablePrefixWithSchema: req.TablePrefixWithSchema,
 		Version:               req.Version,
-		KeyValues:             req.KeyValues,
+		KeyColumns:            req.KeyValues.Columns(),
+		KeyValues:             req.KeyValues.Values(),
 		UserID:                req.UserID,
 	})
 	if err != nil {
@@ -247,7 +248,8 @@ func (c *Client) Update(req *client.UpdateRequest) (string, error) {
 		DatabaseID:            c.databaseID,
 		TablePrefixWithSchema: req.TablePrefixWithSchema,
 		Version:               req.Version,
-		KeyValues:             req.KeyValues,
+		KeyColumns:            req.KeyValues.Columns(),
+		KeyValues:             req.KeyValues.Values(),
 		NewTableRow:           newTableRow,
 		UserID:                req.UserID,
 	})
@@ -298,7 +300,8 @@ func (c *Client) Replay(req *client.ReplayRequest) (string, error) {
 		DatabaseID:            c.databaseID,
 		TablePrefixWithSchema: req.TablePrefixWithSchema,
 		Version:               req.Version,
-		KeyValues:             req.KeyValues,
+		KeyColumns:            req.KeyValues.Columns(),
+		KeyValues:             req.KeyValues.Values(),
 		UserID:                req.UserID,
 	})
 	if err != nil {
@@ -564,7 +567,8 @@ func (c *Client) QueryByKeys(req *client.QueryByKeysRequest) (string, *client.Ta
 		TablePrefixWithSchema: req.TablePrefixWithSchema,
 		Version:               req.Version,
 		Select:                selectJsonBytes,
-		KeyValues:             req.KeyValues,
+		KeyColumns:            req.KeyValues.Columns(),
+		KeyValues:             req.KeyValues.Values(),
 	})
 	if err != nil {
 		return "", nil, err

+ 4 - 2
dpsv1/transaction.go

@@ -149,7 +149,8 @@ func (tx *Transaction) DeleteTx(req *client.DeleteRequest) (string, error) {
 			DeleteTxRequest: &request.DeleteTxRequest{
 				TablePrefixWithSchema: req.TablePrefixWithSchema,
 				Version:               req.Version,
-				KeyValues:             req.KeyValues,
+				KeyColumns:            req.KeyValues.Columns(),
+				KeyValues:             req.KeyValues.Values(),
 				UserID:                req.UserID,
 			},
 		}})
@@ -248,7 +249,8 @@ func (tx *Transaction) UpdateTx(req *client.UpdateRequest) (string, error) {
 			UpdateTxRequest: &request.UpdateTxRequest{
 				TablePrefixWithSchema: req.TablePrefixWithSchema,
 				Version:               req.Version,
-				KeyValues:             req.KeyValues,
+				KeyColumns:            req.KeyValues.Columns(),
+				KeyValues:             req.KeyValues.Values(),
 				NewTableRow:           reqNewTableRow,
 				UserID:                req.UserID,
 			},

+ 324 - 314
pb/v1/request/command.pb.go

@@ -325,10 +325,11 @@ type DeleteTxRequest 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"`
-	KeyValues             map[string]string `protobuf:"bytes,3,rep,name=KeyValues,proto3" json:"KeyValues,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-	UserID                string            `protobuf:"bytes,4,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"`
+	KeyColumns            []string `protobuf:"bytes,3,rep,name=KeyColumns,proto3" json:"KeyColumns,omitempty"`
+	KeyValues             []string `protobuf:"bytes,4,rep,name=KeyValues,proto3" json:"KeyValues,omitempty"`
+	UserID                string   `protobuf:"bytes,5,opt,name=UserID,proto3" json:"UserID,omitempty"`
 }
 
 func (x *DeleteTxRequest) Reset() {
@@ -377,7 +378,14 @@ func (x *DeleteTxRequest) GetVersion() string {
 	return ""
 }
 
-func (x *DeleteTxRequest) GetKeyValues() map[string]string {
+func (x *DeleteTxRequest) GetKeyColumns() []string {
+	if x != nil {
+		return x.KeyColumns
+	}
+	return nil
+}
+
+func (x *DeleteTxRequest) GetKeyValues() []string {
 	if x != nil {
 		return x.KeyValues
 	}
@@ -475,11 +483,12 @@ type UpdateTxRequest 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"`
-	KeyValues             map[string]string `protobuf:"bytes,3,rep,name=KeyValues,proto3" json:"KeyValues,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-	NewTableRow           *TableRow         `protobuf:"bytes,4,opt,name=NewTableRow,proto3" json:"NewTableRow,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"`
+	KeyColumns            []string  `protobuf:"bytes,3,rep,name=KeyColumns,proto3" json:"KeyColumns,omitempty"`
+	KeyValues             []string  `protobuf:"bytes,4,rep,name=KeyValues,proto3" json:"KeyValues,omitempty"`
+	NewTableRow           *TableRow `protobuf:"bytes,5,opt,name=NewTableRow,proto3" json:"NewTableRow,omitempty"`
+	UserID                string    `protobuf:"bytes,6,opt,name=UserID,proto3" json:"UserID,omitempty"`
 }
 
 func (x *UpdateTxRequest) Reset() {
@@ -528,7 +537,14 @@ func (x *UpdateTxRequest) GetVersion() string {
 	return ""
 }
 
-func (x *UpdateTxRequest) GetKeyValues() map[string]string {
+func (x *UpdateTxRequest) GetKeyColumns() []string {
+	if x != nil {
+		return x.KeyColumns
+	}
+	return nil
+}
+
+func (x *UpdateTxRequest) GetKeyValues() []string {
 	if x != nil {
 		return x.KeyValues
 	}
@@ -1065,11 +1081,12 @@ type DeleteRequest struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	DatabaseID            string            `protobuf:"bytes,1,opt,name=DatabaseID,proto3" json:"DatabaseID,omitempty"`
-	TablePrefixWithSchema string            `protobuf:"bytes,2,opt,name=TablePrefixWithSchema,proto3" json:"TablePrefixWithSchema,omitempty"`
-	Version               string            `protobuf:"bytes,3,opt,name=Version,proto3" json:"Version,omitempty"`
-	KeyValues             map[string]string `protobuf:"bytes,4,rep,name=KeyValues,proto3" json:"KeyValues,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-	UserID                string            `protobuf:"bytes,5,opt,name=UserID,proto3" json:"UserID,omitempty"`
+	DatabaseID            string   `protobuf:"bytes,1,opt,name=DatabaseID,proto3" json:"DatabaseID,omitempty"`
+	TablePrefixWithSchema string   `protobuf:"bytes,2,opt,name=TablePrefixWithSchema,proto3" json:"TablePrefixWithSchema,omitempty"`
+	Version               string   `protobuf:"bytes,3,opt,name=Version,proto3" json:"Version,omitempty"`
+	KeyColumns            []string `protobuf:"bytes,4,rep,name=KeyColumns,proto3" json:"KeyColumns,omitempty"`
+	KeyValues             []string `protobuf:"bytes,5,rep,name=KeyValues,proto3" json:"KeyValues,omitempty"`
+	UserID                string   `protobuf:"bytes,6,opt,name=UserID,proto3" json:"UserID,omitempty"`
 }
 
 func (x *DeleteRequest) Reset() {
@@ -1125,7 +1142,14 @@ func (x *DeleteRequest) GetVersion() string {
 	return ""
 }
 
-func (x *DeleteRequest) GetKeyValues() map[string]string {
+func (x *DeleteRequest) GetKeyColumns() []string {
+	if x != nil {
+		return x.KeyColumns
+	}
+	return nil
+}
+
+func (x *DeleteRequest) GetKeyValues() []string {
 	if x != nil {
 		return x.KeyValues
 	}
@@ -1231,12 +1255,13 @@ type UpdateRequest struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	DatabaseID            string            `protobuf:"bytes,1,opt,name=DatabaseID,proto3" json:"DatabaseID,omitempty"`
-	TablePrefixWithSchema string            `protobuf:"bytes,2,opt,name=TablePrefixWithSchema,proto3" json:"TablePrefixWithSchema,omitempty"`
-	Version               string            `protobuf:"bytes,3,opt,name=Version,proto3" json:"Version,omitempty"`
-	KeyValues             map[string]string `protobuf:"bytes,4,rep,name=KeyValues,proto3" json:"KeyValues,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-	NewTableRow           *TableRow         `protobuf:"bytes,5,opt,name=NewTableRow,proto3" json:"NewTableRow,omitempty"`
-	UserID                string            `protobuf:"bytes,6,opt,name=UserID,proto3" json:"UserID,omitempty"`
+	DatabaseID            string    `protobuf:"bytes,1,opt,name=DatabaseID,proto3" json:"DatabaseID,omitempty"`
+	TablePrefixWithSchema string    `protobuf:"bytes,2,opt,name=TablePrefixWithSchema,proto3" json:"TablePrefixWithSchema,omitempty"`
+	Version               string    `protobuf:"bytes,3,opt,name=Version,proto3" json:"Version,omitempty"`
+	KeyColumns            []string  `protobuf:"bytes,4,rep,name=KeyColumns,proto3" json:"KeyColumns,omitempty"`
+	KeyValues             []string  `protobuf:"bytes,5,rep,name=KeyValues,proto3" json:"KeyValues,omitempty"`
+	NewTableRow           *TableRow `protobuf:"bytes,6,opt,name=NewTableRow,proto3" json:"NewTableRow,omitempty"`
+	UserID                string    `protobuf:"bytes,7,opt,name=UserID,proto3" json:"UserID,omitempty"`
 }
 
 func (x *UpdateRequest) Reset() {
@@ -1292,7 +1317,14 @@ func (x *UpdateRequest) GetVersion() string {
 	return ""
 }
 
-func (x *UpdateRequest) GetKeyValues() map[string]string {
+func (x *UpdateRequest) GetKeyColumns() []string {
+	if x != nil {
+		return x.KeyColumns
+	}
+	return nil
+}
+
+func (x *UpdateRequest) GetKeyValues() []string {
 	if x != nil {
 		return x.KeyValues
 	}
@@ -1413,11 +1445,12 @@ type ReplayRequest struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	DatabaseID            string            `protobuf:"bytes,1,opt,name=DatabaseID,proto3" json:"DatabaseID,omitempty"`
-	TablePrefixWithSchema string            `protobuf:"bytes,2,opt,name=TablePrefixWithSchema,proto3" json:"TablePrefixWithSchema,omitempty"`
-	Version               string            `protobuf:"bytes,3,opt,name=Version,proto3" json:"Version,omitempty"`
-	KeyValues             map[string]string `protobuf:"bytes,4,rep,name=KeyValues,proto3" json:"KeyValues,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-	UserID                string            `protobuf:"bytes,5,opt,name=UserID,proto3" json:"UserID,omitempty"`
+	DatabaseID            string   `protobuf:"bytes,1,opt,name=DatabaseID,proto3" json:"DatabaseID,omitempty"`
+	TablePrefixWithSchema string   `protobuf:"bytes,2,opt,name=TablePrefixWithSchema,proto3" json:"TablePrefixWithSchema,omitempty"`
+	Version               string   `protobuf:"bytes,3,opt,name=Version,proto3" json:"Version,omitempty"`
+	KeyColumns            []string `protobuf:"bytes,4,rep,name=KeyColumns,proto3" json:"KeyColumns,omitempty"`
+	KeyValues             []string `protobuf:"bytes,5,rep,name=KeyValues,proto3" json:"KeyValues,omitempty"`
+	UserID                string   `protobuf:"bytes,6,opt,name=UserID,proto3" json:"UserID,omitempty"`
 }
 
 func (x *ReplayRequest) Reset() {
@@ -1473,7 +1506,14 @@ func (x *ReplayRequest) GetVersion() string {
 	return ""
 }
 
-func (x *ReplayRequest) GetKeyValues() map[string]string {
+func (x *ReplayRequest) GetKeyColumns() []string {
+	if x != nil {
+		return x.KeyColumns
+	}
+	return nil
+}
+
+func (x *ReplayRequest) GetKeyValues() []string {
 	if x != nil {
 		return x.KeyValues
 	}
@@ -1758,180 +1798,152 @@ var file_v1_request_command_proto_rawDesc = []byte{
 	0x65, 0x72, 0x74, 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, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
-	0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0x96, 0x02, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74,
+	0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0xd7, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74,
 	0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 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, 0x4d, 0x0a, 0x09, 0x4b, 0x65,
-	0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e,
-	0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x78,
-	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, 0x04, 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,
-	0xcc, 0x01, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x68, 0x65, 0x72, 0x65, 0x54,
-	0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x15, 0x54, 0x61, 0x62, 0x6c,
+	0x01, 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, 0x24, 0x0a, 0x09, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18,
+	0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x70, 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,
+	0x22, 0xcc, 0x01, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x68, 0x65, 0x72, 0x65,
+	0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 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, 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, 0x14, 0x0a, 0x05, 0x57, 0x68, 0x65, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c,
+	0x52, 0x05, 0x57, 0x68, 0x65, 0x72, 0x65, 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,
+	0x94, 0x02, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 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, 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, 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, 0x14, 0x0a, 0x05, 0x57, 0x68, 0x65, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52,
-	0x05, 0x57, 0x68, 0x65, 0x72, 0x65, 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, 0xd3,
-	0x02, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 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, 0x4d, 0x0a, 0x09, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18,
-	0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e,
-	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x78, 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,
+	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, 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, 0x24, 0x0a, 0x09, 0x4b,
+	0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x06,
+	0xe2, 0xdf, 0x1f, 0x02, 0x70, 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, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	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, 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, 0x89, 0x02, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57,
-	0x68, 0x65, 0x72, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 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, 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, 0x14, 0x0a, 0x05, 0x57, 0x68, 0x65, 0x72, 0x65, 0x18, 0x04,
-	0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x57, 0x68, 0x65, 0x72, 0x65, 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,
-	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, 0x22, 0xa8, 0x05, 0x0a, 0x14, 0x54, 0x72,
-	0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69,
-	0x6f, 0x6e, 0x12, 0x5c, 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, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x72,
-	0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 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, 0x44, 0x0a, 0x0f, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x72, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x54, 0x78, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x14, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74,
-	0x42, 0x61, 0x74, 0x63, 0x68, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x03,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49,
-	0x6e, 0x73, 0x65, 0x72, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x14, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x42, 0x61, 0x74,
-	0x63, 0x68, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x0f, 0x44,
-	0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x04,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44,
-	0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00,
-	0x52, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x12, 0x53, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x68, 0x65, 0x72, 0x65,
-	0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x1d, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
-	0x57, 0x68, 0x65, 0x72, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00,
-	0x52, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x68, 0x65, 0x72, 0x65, 0x54, 0x78, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
-	0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x18, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
-	0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x55, 0x70, 0x64,
-	0x61, 0x74, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x14,
-	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x68, 0x65, 0x72, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x72, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x68, 0x65, 0x72, 0x65,
-	0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x14, 0x55, 0x70, 0x64,
-	0x61, 0x74, 0x65, 0x57, 0x68, 0x65, 0x72, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x12, 0x56, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-	0x45, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x1e, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73,
-	0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x48, 0x00, 0x52, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45,
-	0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x22, 0x8e, 0x02, 0x0a, 0x0d, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 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, 0x26,
-	0x0a, 0x0a, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04, 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, 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, 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, 0x8f, 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, 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, 0x49, 0x6e,
+	0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0x89, 0x02, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74,
+	0x65, 0x57, 0x68, 0x65, 0x72, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 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,
+	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, 0x14, 0x0a, 0x05, 0x57, 0x68, 0x65, 0x72, 0x65,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x57, 0x68, 0x65, 0x72, 0x65, 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, 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, 0x22, 0xa8, 0x05, 0x0a, 0x14,
+	0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5c, 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, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e,
+	0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x65, 0x67, 0x69, 0x6e,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 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, 0x44, 0x0a, 0x0f, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x54, 0x78, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x72, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x54, 0x78, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x54,
+	0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x14, 0x49, 0x6e, 0x73, 0x65,
+	0x72, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x54, 0x78, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x14, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x42,
+	0x61, 0x74, 0x63, 0x68, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a,
+	0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x48, 0x00, 0x52, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x68, 0x65,
+	0x72, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1d, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x57, 0x68, 0x65, 0x72, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x48, 0x00, 0x52, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x68, 0x65, 0x72, 0x65, 0x54,
+	0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x18, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x55,
+	0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53,
+	0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x68, 0x65, 0x72, 0x65, 0x54, 0x78, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x72,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x68, 0x65,
+	0x72, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x14, 0x55,
+	0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x68, 0x65, 0x72, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x12, 0x56, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69,
+	0x6f, 0x6e, 0x45, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x72, 0x61,
+	0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x48, 0x00, 0x52, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f,
+	0x6e, 0x45, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x8e, 0x02, 0x0a, 0x0d, 0x49, 0x6e, 0x73, 0x65, 0x72,
+	0x74, 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, 0x26, 0x0a, 0x0a, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04,
+	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, 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, 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, 0x8f, 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, 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,
+	0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 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, 0xd5, 0x01, 0x0a, 0x12, 0x49, 0x6e,
 	0x73, 0x65, 0x72, 0x74, 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, 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, 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, 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, 0xf2, 0x01, 0x0a,
-	0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x68, 0x65, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75,
+	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, 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, 0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77,
+	0x73, 0x22, 0xfd, 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,
@@ -1943,95 +1955,103 @@ var file_v1_request_command_proto_rawDesc = []byte{
 	0x58, 0x01, 0x52, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0a, 0x4b,
 	0x65, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04, 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, 0x14, 0x0a, 0x05, 0x57, 0x68, 0x65, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01,
-	0x28, 0x0c, 0x52, 0x05, 0x57, 0x68, 0x65, 0x72, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65,
+	0x6d, 0x6e, 0x73, 0x12, 0x24, 0x0a, 0x09, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73,
+	0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x70, 0x00, 0x52, 0x09,
+	0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 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, 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, 0xaf, 0x02, 0x0a, 0x12,
-	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x68, 0x65, 0x72, 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, 0x26, 0x0a, 0x0a, 0x4b, 0x65,
-	0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04, 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, 0x14, 0x0a, 0x05, 0x57, 0x68, 0x65, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28,
-	0x0c, 0x52, 0x05, 0x57, 0x68, 0x65, 0x72, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x4e, 0x65, 0x77, 0x54,
-	0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x18, 0x06, 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,
-	0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 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,
+	0x44, 0x22, 0xf2, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x68, 0x65, 0x72,
+	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, 0x26, 0x0a, 0x0a, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04,
+	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, 0x14, 0x0a, 0x05, 0x57, 0x68, 0x65, 0x72,
+	0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x57, 0x68, 0x65, 0x72, 0x65, 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, 0xba, 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, 0x26, 0x0a, 0x0a, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04,
+	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, 0x24, 0x0a, 0x09, 0x4b, 0x65, 0x79, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f,
+	0x02, 0x70, 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, 0x06, 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, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65,
+	0x72, 0x49, 0x44, 0x22, 0xaf, 0x02, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x68,
+	0x65, 0x72, 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,
-	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, 0xbd, 0x01, 0x0a, 0x0b,
-	0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54,
-	0x79, 0x70, 0x65, 0x18, 0x01, 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, 0x02,
-	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, 0x36, 0x34, 0x56, 0x61, 0x6c,
-	0x75, 0x65, 0x18, 0x03, 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, 0x04, 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, 0x05, 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,
+	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, 0x26, 0x0a, 0x0a, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73,
+	0x18, 0x04, 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, 0x14, 0x0a, 0x05, 0x57, 0x68,
+	0x65, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x57, 0x68, 0x65, 0x72, 0x65,
+	0x12, 0x3b, 0x0a, 0x0b, 0x4e, 0x65, 0x77, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x18,
+	0x06, 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, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55,
+	0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0xfd, 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,
+	0x26, 0x0a, 0x0a, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04, 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, 0x24, 0x0a, 0x09, 0x4b, 0x65, 0x79, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02,
+	0x70, 0x00, 0x52, 0x09, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 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, 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, 0xbd, 0x01, 0x0a, 0x0b, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
+	0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01,
+	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, 0x02, 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, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 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, 0x04, 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, 0x05, 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 (
@@ -2046,7 +2066,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, 27)
+var file_v1_request_command_proto_msgTypes = make([]protoimpl.MessageInfo, 22)
 var file_v1_request_command_proto_goTypes = []interface{}{
 	(*AutoMigrateRequest)(nil),      // 0: request.AutoMigrateRequest
 	(*AutoMigrateItem)(nil),         // 1: request.AutoMigrateItem
@@ -2070,43 +2090,33 @@ var file_v1_request_command_proto_goTypes = []interface{}{
 	(*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.UpdateRequest.KeyValuesEntry
-	nil,                             // 26: request.ReplayRequest.KeyValuesEntry
 }
 var file_v1_request_command_proto_depIdxs = []int32{
 	1,  // 0: request.AutoMigrateRequest.Items:type_name -> request.AutoMigrateItem
 	19, // 1: request.InsertTxRequest.TableRow:type_name -> request.TableRow
 	13, // 2: request.InsertBatchTxRequest.Items:type_name -> request.InsertTableRowItem
-	22, // 3: request.DeleteTxRequest.KeyValues:type_name -> request.DeleteTxRequest.KeyValuesEntry
-	23, // 4: request.UpdateTxRequest.KeyValues:type_name -> request.UpdateTxRequest.KeyValuesEntry
-	19, // 5: request.UpdateTxRequest.NewTableRow:type_name -> request.TableRow
-	19, // 6: request.UpdateWhereTxRequest.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
-	5,  // 10: request.TransactionOperation.DeleteTxRequest:type_name -> request.DeleteTxRequest
-	6,  // 11: request.TransactionOperation.DeleteWhereTxRequest:type_name -> request.DeleteWhereTxRequest
-	7,  // 12: request.TransactionOperation.UpdateTxRequest:type_name -> request.UpdateTxRequest
-	8,  // 13: request.TransactionOperation.UpdateWhereTxRequest:type_name -> request.UpdateWhereTxRequest
-	9,  // 14: request.TransactionOperation.TransactionEndRequest:type_name -> request.TransactionEndRequest
-	19, // 15: request.InsertRequest.TableRow:type_name -> request.TableRow
-	13, // 16: request.InsertBatchRequest.Items:type_name -> request.InsertTableRowItem
-	19, // 17: request.InsertTableRowItem.TableRows:type_name -> request.TableRow
-	24, // 18: request.DeleteRequest.KeyValues:type_name -> request.DeleteRequest.KeyValuesEntry
-	25, // 19: request.UpdateRequest.KeyValues:type_name -> request.UpdateRequest.KeyValuesEntry
-	19, // 20: request.UpdateRequest.NewTableRow:type_name -> request.TableRow
-	19, // 21: request.UpdateWhereRequest.NewTableRow:type_name -> request.TableRow
-	26, // 22: request.ReplayRequest.KeyValues:type_name -> request.ReplayRequest.KeyValuesEntry
-	20, // 23: request.TableRow.Columns:type_name -> request.Column
-	21, // 24: request.Column.Value:type_name -> request.ColumnValue
-	25, // [25:25] is the sub-list for method output_type
-	25, // [25:25] is the sub-list for method input_type
-	25, // [25:25] is the sub-list for extension type_name
-	25, // [25:25] is the sub-list for extension extendee
-	0,  // [0:25] is the sub-list for field type_name
+	19, // 3: request.UpdateTxRequest.NewTableRow:type_name -> request.TableRow
+	19, // 4: request.UpdateWhereTxRequest.NewTableRow:type_name -> request.TableRow
+	2,  // 5: request.TransactionOperation.TransactionBeginRequest:type_name -> request.TransactionBeginRequest
+	3,  // 6: request.TransactionOperation.InsertTxRequest:type_name -> request.InsertTxRequest
+	4,  // 7: request.TransactionOperation.InsertBatchTxRequest:type_name -> request.InsertBatchTxRequest
+	5,  // 8: request.TransactionOperation.DeleteTxRequest:type_name -> request.DeleteTxRequest
+	6,  // 9: request.TransactionOperation.DeleteWhereTxRequest:type_name -> request.DeleteWhereTxRequest
+	7,  // 10: request.TransactionOperation.UpdateTxRequest:type_name -> request.UpdateTxRequest
+	8,  // 11: request.TransactionOperation.UpdateWhereTxRequest:type_name -> request.UpdateWhereTxRequest
+	9,  // 12: request.TransactionOperation.TransactionEndRequest:type_name -> request.TransactionEndRequest
+	19, // 13: request.InsertRequest.TableRow:type_name -> request.TableRow
+	13, // 14: request.InsertBatchRequest.Items:type_name -> request.InsertTableRowItem
+	19, // 15: request.InsertTableRowItem.TableRows:type_name -> request.TableRow
+	19, // 16: request.UpdateRequest.NewTableRow:type_name -> request.TableRow
+	19, // 17: request.UpdateWhereRequest.NewTableRow:type_name -> request.TableRow
+	20, // 18: request.TableRow.Columns:type_name -> request.Column
+	21, // 19: request.Column.Value:type_name -> request.ColumnValue
+	20, // [20:20] is the sub-list for method output_type
+	20, // [20:20] is the sub-list for method input_type
+	20, // [20:20] is the sub-list for extension type_name
+	20, // [20:20] is the sub-list for extension extendee
+	0,  // [0:20] is the sub-list for field type_name
 }
 
 func init() { file_v1_request_command_proto_init() }
@@ -2402,7 +2412,7 @@ func file_v1_request_command_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_v1_request_command_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   27,
+			NumMessages:   22,
 			NumExtensions: 0,
 			NumServices:   0,
 		},

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

@@ -89,7 +89,16 @@ func (this *DeleteTxRequest) 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))
 	}
-	// Validation of proto3 map<> fields is unsupported.
+	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))
+		}
+	}
+	for _, item := range this.KeyValues {
+		if !(len(item) > 0) {
+			return github_com_mwitkow_go_proto_validators.FieldError("KeyValues", fmt.Errorf(`value '%v' must have a length greater than '0'`, item))
+		}
+	}
 	return nil
 }
 func (this *DeleteWhereTxRequest) Validate() error {
@@ -113,7 +122,16 @@ func (this *UpdateTxRequest) 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))
 	}
-	// Validation of proto3 map<> fields is unsupported.
+	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))
+		}
+	}
+	for _, item := range this.KeyValues {
+		if !(len(item) > 0) {
+			return github_com_mwitkow_go_proto_validators.FieldError("KeyValues", fmt.Errorf(`value '%v' must have a length greater than '0'`, item))
+		}
+	}
 	if this.NewTableRow != nil {
 		if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.NewTableRow); err != nil {
 			return github_com_mwitkow_go_proto_validators.FieldError("NewTableRow", err)
@@ -271,7 +289,16 @@ func (this *DeleteRequest) 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))
 	}
-	// Validation of proto3 map<> fields is unsupported.
+	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))
+		}
+	}
+	for _, item := range this.KeyValues {
+		if !(len(item) > 0) {
+			return github_com_mwitkow_go_proto_validators.FieldError("KeyValues", fmt.Errorf(`value '%v' must have a length greater than '0'`, item))
+		}
+	}
 	return nil
 }
 func (this *DeleteWhereRequest) Validate() error {
@@ -301,7 +328,16 @@ func (this *UpdateRequest) 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))
 	}
-	// Validation of proto3 map<> fields is unsupported.
+	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))
+		}
+	}
+	for _, item := range this.KeyValues {
+		if !(len(item) > 0) {
+			return github_com_mwitkow_go_proto_validators.FieldError("KeyValues", fmt.Errorf(`value '%v' must have a length greater than '0'`, item))
+		}
+	}
 	if this.NewTableRow != nil {
 		if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.NewTableRow); err != nil {
 			return github_com_mwitkow_go_proto_validators.FieldError("NewTableRow", err)
@@ -341,7 +377,16 @@ func (this *ReplayRequest) 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))
 	}
-	// Validation of proto3 map<> fields is unsupported.
+	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))
+		}
+	}
+	for _, item := range this.KeyValues {
+		if !(len(item) > 0) {
+			return github_com_mwitkow_go_proto_validators.FieldError("KeyValues", fmt.Errorf(`value '%v' must have a length greater than '0'`, item))
+		}
+	}
 	return nil
 }
 func (this *TableRow) Validate() error {

+ 59 - 57
pb/v1/request/query.pb.go

@@ -264,11 +264,12 @@ type QueryByKeysRequest struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	DatabaseID            string            `protobuf:"bytes,1,opt,name=DatabaseID,proto3" json:"DatabaseID,omitempty"`
-	TablePrefixWithSchema string            `protobuf:"bytes,2,opt,name=TablePrefixWithSchema,proto3" json:"TablePrefixWithSchema,omitempty"`
-	Version               string            `protobuf:"bytes,3,opt,name=Version,proto3" json:"Version,omitempty"`
-	Select                []byte            `protobuf:"bytes,4,opt,name=Select,proto3" json:"Select,omitempty"`
-	KeyValues             map[string]string `protobuf:"bytes,5,rep,name=KeyValues,proto3" json:"KeyValues,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	DatabaseID            string   `protobuf:"bytes,1,opt,name=DatabaseID,proto3" json:"DatabaseID,omitempty"`
+	TablePrefixWithSchema string   `protobuf:"bytes,2,opt,name=TablePrefixWithSchema,proto3" json:"TablePrefixWithSchema,omitempty"`
+	Version               string   `protobuf:"bytes,3,opt,name=Version,proto3" json:"Version,omitempty"`
+	Select                []byte   `protobuf:"bytes,4,opt,name=Select,proto3" json:"Select,omitempty"`
+	KeyColumns            []string `protobuf:"bytes,5,rep,name=KeyColumns,proto3" json:"KeyColumns,omitempty"`
+	KeyValues             []string `protobuf:"bytes,6,rep,name=KeyValues,proto3" json:"KeyValues,omitempty"`
 }
 
 func (x *QueryByKeysRequest) Reset() {
@@ -331,7 +332,14 @@ func (x *QueryByKeysRequest) GetSelect() []byte {
 	return nil
 }
 
-func (x *QueryByKeysRequest) GetKeyValues() map[string]string {
+func (x *QueryByKeysRequest) GetKeyColumns() []string {
+	if x != nil {
+		return x.KeyColumns
+	}
+	return nil
+}
+
+func (x *QueryByKeysRequest) GetKeyValues() []string {
 	if x != nil {
 		return x.KeyValues
 	}
@@ -562,7 +570,7 @@ var file_v1_request_query_proto_rawDesc = []byte{
 	0x0a, 0x06, 0x50, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06,
 	0x50, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x67, 0x65, 0x53, 0x69,
 	0x7a, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x61, 0x67, 0x65, 0x53, 0x69,
-	0x7a, 0x65, 0x22, 0xc4, 0x02, 0x0a, 0x12, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x79, 0x4b, 0x65,
+	0x7a, 0x65, 0x22, 0x82, 0x02, 0x0a, 0x12, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x79, 0x4b, 0x65,
 	0x79, 0x73, 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,
@@ -573,47 +581,43 @@ var file_v1_request_query_proto_rawDesc = []byte{
 	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, 0x16, 0x0a, 0x06, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28,
-	0x0c, 0x52, 0x06, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x50, 0x0a, 0x09, 0x4b, 0x65, 0x79,
-	0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x72,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x79, 0x4b, 0x65,
-	0x79, 0x73, 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, 0xb1, 0x01, 0x0a, 0x11, 0x43, 0x6f,
-	0x75, 0x6e, 0x74, 0x57, 0x68, 0x65, 0x72, 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, 0x14, 0x0a, 0x05, 0x57, 0x68, 0x65, 0x72, 0x65,
-	0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x57, 0x68, 0x65, 0x72, 0x65, 0x22, 0x8a, 0x02,
-	0x0a, 0x12, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 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, 0x14, 0x0a, 0x05,
-	0x57, 0x68, 0x65, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x57, 0x68, 0x65,
-	0x72, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02,
-	0x4f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x18, 0x06, 0x20,
-	0x03, 0x28, 0x09, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x12, 0x14, 0x0a, 0x05,
-	0x4a, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x4a, 0x6f, 0x69,
-	0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x48, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01,
-	0x28, 0x0c, 0x52, 0x06, 0x48, 0x61, 0x76, 0x69, 0x6e, 0x67, 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,
+	0x0c, 0x52, 0x06, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x26, 0x0a, 0x0a, 0x4b, 0x65, 0x79,
+	0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x05, 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, 0x24, 0x0a, 0x09, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x06,
+	0x20, 0x03, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x70, 0x00, 0x52, 0x09, 0x4b, 0x65,
+	0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xb1, 0x01, 0x0a, 0x11, 0x43, 0x6f, 0x75, 0x6e,
+	0x74, 0x57, 0x68, 0x65, 0x72, 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, 0x14, 0x0a, 0x05, 0x57, 0x68, 0x65, 0x72, 0x65, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x57, 0x68, 0x65, 0x72, 0x65, 0x22, 0x8a, 0x02, 0x0a, 0x12,
+	0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 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, 0x14, 0x0a, 0x05, 0x57, 0x68,
+	0x65, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x57, 0x68, 0x65, 0x72, 0x65,
+	0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x4f, 0x72,
+	0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x18, 0x06, 0x20, 0x03, 0x28,
+	0x09, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x4a, 0x6f,
+	0x69, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x4a, 0x6f, 0x69, 0x6e, 0x73,
+	0x12, 0x16, 0x0a, 0x06, 0x48, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c,
+	0x52, 0x06, 0x48, 0x61, 0x76, 0x69, 0x6e, 0x67, 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 (
@@ -628,22 +632,20 @@ func file_v1_request_query_proto_rawDescGZIP() []byte {
 	return file_v1_request_query_proto_rawDescData
 }
 
-var file_v1_request_query_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
+var file_v1_request_query_proto_msgTypes = make([]protoimpl.MessageInfo, 5)
 var file_v1_request_query_proto_goTypes = []interface{}{
 	(*QueryByWhereAndOrderByRequest)(nil), // 0: request.QueryByWhereAndOrderByRequest
 	(*CommonQueryRequest)(nil),            // 1: request.CommonQueryRequest
 	(*QueryByKeysRequest)(nil),            // 2: request.QueryByKeysRequest
 	(*CountWhereRequest)(nil),             // 3: request.CountWhereRequest
 	(*CommonCountRequest)(nil),            // 4: request.CommonCountRequest
-	nil,                                   // 5: request.QueryByKeysRequest.KeyValuesEntry
 }
 var file_v1_request_query_proto_depIdxs = []int32{
-	5, // 0: request.QueryByKeysRequest.KeyValues:type_name -> request.QueryByKeysRequest.KeyValuesEntry
-	1, // [1:1] is the sub-list for method output_type
-	1, // [1:1] is the sub-list for method input_type
-	1, // [1:1] is the sub-list for extension type_name
-	1, // [1:1] is the sub-list for extension extendee
-	0, // [0:1] is the sub-list for field type_name
+	0, // [0:0] is the sub-list for method output_type
+	0, // [0:0] is the sub-list for method input_type
+	0, // [0:0] is the sub-list for extension type_name
+	0, // [0:0] is the sub-list for extension extendee
+	0, // [0:0] is the sub-list for field type_name
 }
 
 func init() { file_v1_request_query_proto_init() }
@@ -719,7 +721,7 @@ func file_v1_request_query_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_v1_request_query_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   6,
+			NumMessages:   5,
 			NumExtensions: 0,
 			NumServices:   0,
 		},

+ 10 - 1
pb/v1/request/query.validator.pb.go

@@ -50,7 +50,16 @@ func (this *QueryByKeysRequest) 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))
 	}
-	// Validation of proto3 map<> fields is unsupported.
+	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))
+		}
+	}
+	for _, item := range this.KeyValues {
+		if !(len(item) > 0) {
+			return github_com_mwitkow_go_proto_validators.FieldError("KeyValues", fmt.Errorf(`value '%v' must have a length greater than '0'`, item))
+		}
+	}
 	return nil
 }
 func (this *CountWhereRequest) Validate() error {

+ 18 - 18
test/instance/instance_test.go

@@ -87,7 +87,7 @@ func TestTransaction(t *testing.T) {
 		queryByKeys(&client.QueryByKeysRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 		}, resultTableRow).
 		assertEqual(id, resultTableRow.ColumnValueString("id"), "ID不一致").
 		assertEqual(name, resultTableRow.ColumnValueString("name"), "名称不一致").
@@ -97,7 +97,7 @@ func TestTransaction(t *testing.T) {
 			statement, err := tx.UpdateTx(&client.UpdateRequest{
 				TablePrefixWithSchema: tablePrefix,
 				Version:               "v1",
-				KeyValues:             map[string]string{"id": id},
+				KeyValues:             client.NewKeyValue().Add("id", id),
 				NewTableRow: client.NewTableRow().
 					AddColumnValueString("id", id).
 					AddColumnValueString("name", newName).
@@ -116,7 +116,7 @@ func TestTransaction(t *testing.T) {
 		queryByKeys(&client.QueryByKeysRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 		}, resultTableRow).
 		assertEqual(id, resultTableRow.ColumnValueString("id"), "ID不一致").
 		assertEqual(newName, resultTableRow.ColumnValueString("name"), "名称不一致").
@@ -126,7 +126,7 @@ func TestTransaction(t *testing.T) {
 			statement, err := tx.UpdateTx(&client.UpdateRequest{
 				TablePrefixWithSchema: tablePrefix,
 				Version:               "v1",
-				KeyValues:             map[string]string{"id": id},
+				KeyValues:             client.NewKeyValue().Add("id", id),
 				NewTableRow: client.NewTableRow().
 					AddColumnValueString("id", id).
 					AddColumnValueString("name", name).
@@ -143,7 +143,7 @@ func TestTransaction(t *testing.T) {
 			statement, err = tx.DeleteTx(&client.DeleteRequest{
 				TablePrefixWithSchema: tablePrefix,
 				Version:               "v1",
-				KeyValues:             map[string]string{"id": id},
+				KeyValues:             client.NewKeyValue().Add("id", id),
 				UserID:                "test",
 			})
 			if err != nil {
@@ -259,7 +259,7 @@ func TestTransactionBatch(t *testing.T) {
 		queryByKeys(&client.QueryByKeysRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id1},
+			KeyValues:             client.NewKeyValue().Add("id", id1),
 		}, resultTableRow).
 		assertEqual(id1, resultTableRow.ColumnValueString("id"), "ID不一致").
 		assertEqual(name1, resultTableRow.ColumnValueString("name"), "名称不一致").
@@ -268,7 +268,7 @@ func TestTransactionBatch(t *testing.T) {
 		queryByKeys(&client.QueryByKeysRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id2},
+			KeyValues:             client.NewKeyValue().Add("id", id2),
 		}, resultTableRow).
 		assertEqual(id2, resultTableRow.ColumnValueString("id"), "ID不一致").
 		assertEqual(name2, resultTableRow.ColumnValueString("name"), "名称不一致").
@@ -297,7 +297,7 @@ func TestTransactionBatch(t *testing.T) {
 		queryByKeys(&client.QueryByKeysRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id1},
+			KeyValues:             client.NewKeyValue().Add("id", id1),
 		}, resultTableRow).
 		assertEqual(id1, resultTableRow.ColumnValueString("id"), "ID不一致").
 		assertEqual(newName, resultTableRow.ColumnValueString("name"), "名称不一致").
@@ -306,7 +306,7 @@ func TestTransactionBatch(t *testing.T) {
 		queryByKeys(&client.QueryByKeysRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id2},
+			KeyValues:             client.NewKeyValue().Add("id", id2),
 		}, resultTableRow).
 		assertEqual(id2, resultTableRow.ColumnValueString("id"), "ID不一致").
 		assertEqual(newName, resultTableRow.ColumnValueString("name"), "名称不一致").
@@ -378,7 +378,7 @@ func TestInsert(t *testing.T) {
 		queryByKeys(&client.QueryByKeysRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 		}, resultTableRow).
 		assertEqual(id, resultTableRow.ColumnValueString("id"), "ID不一致").
 		assertEqual(name, resultTableRow.ColumnValueString("name"), "名称不一致").
@@ -547,7 +547,7 @@ func TestUpdate(t *testing.T) {
 		update(&client.UpdateRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 			NewTableRow: client.NewTableRow().
 				AddColumnValueString("id", id).
 				AddColumnValueString("name", newName).
@@ -558,7 +558,7 @@ func TestUpdate(t *testing.T) {
 		queryByKeys(&client.QueryByKeysRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 		}, resultTableRow).
 		assertEqual(id, resultTableRow.ColumnValueString("id"), "ID不一致").
 		assertEqual(newName, resultTableRow.ColumnValueString("name"), "名称不一致").
@@ -616,7 +616,7 @@ func TestUpdateWhere(t *testing.T) {
 		queryByKeys(&client.QueryByKeysRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 		}, resultTableRow).
 		assertEqual(id, resultTableRow.ColumnValueString("id"), "ID不一致").
 		assertEqual(newName, resultTableRow.ColumnValueString("name"), "名称不一致").
@@ -659,7 +659,7 @@ func TestDelete(t *testing.T) {
 		delete(&client.DeleteRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 			UserID:                "test",
 		}).
 		countWhere(&client.CountWhereRequest{
@@ -752,13 +752,13 @@ func TestReply(t *testing.T) {
 		reply(&client.ReplayRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 			UserID:                "test",
 		}).
 		queryByKeys(&client.QueryByKeysRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 		}, resultTableRow).
 		assertEqual(id, resultTableRow.ColumnValueString("id"), "ID不一致").
 		assertEqual(name, resultTableRow.ColumnValueString("name"), "名称不一致").
@@ -821,7 +821,7 @@ func TestEventQuery(t *testing.T) {
 		update(&client.UpdateRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 			NewTableRow: client.NewTableRow().
 				AddColumnValueString("id", id).
 				AddColumnValueString("name", newName).
@@ -997,7 +997,7 @@ func TestEventQuery(t *testing.T) {
 		delete(&client.DeleteRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 			UserID:                "test",
 		}).
 		checkEventHistoryExistByKeys(&client.CountEventByKeysRequest{

+ 1 - 1
test/sql/database.sql

@@ -1,2 +1,2 @@
 INSERT INTO dps.database_events (version, key, operation, value, creator_id, created_time) VALUES ('v1', '2b78141779ee432295ca371b91c5cac7', 'create', '{"id": "2b78141779ee432295ca371b91c5cac7", "name": "0eb4f93d4064412f96c31da6d98c99ac", "config": "79d4onsS0v7psxES9HBEjJorrzBnXtubQ7zTAjSiCqCIN/dp1f4wnnDq/nHrvgS/IkrktNLJlPpyCj8ho0dveEjfTmxagSYGWw8TXAEpbYvYfZ7AdWvgst6rrvf9ewaVbxw/TqeA4fZX7/NSh8B/UFMu9h1ThCbEJSnZKHJQi+0pZZ5nmCzsmB7aQRdbUnBU", "create_user_id": "2d7a1914a5094c918a03ee71959dc72e", "last_event_time": "2024-01-10T19:07:56.545915333+08:00", "last_update_user_id": "2d7a1914a5094c918a03ee71959dc72e"}', '2d7a1914a5094c918a03ee71959dc72e', '2024-01-10 11:07:56.545915 +00:00');
-INSERT INTO dps.database_snaps_v1 (id, name, config, create_user_id, last_update_user_id, last_event_time) VALUES ('2b78141779ee432295ca371b91c5cac7', '0eb4f93d4064412f96c31da6d98c99ac', '79d4onsS0v7psxES9HBEjJorrzBnXtubQ7zTAjSiCqCIN/dp1f4wnnDq/nHrvgS/IkrktNLJlPpyCj8ho0dveEjfTmxagSYGWw8TXAEpbYvYfZ7AdWvgst6rrvf9ewaVbxw/TqeA4fZX7/NSh8B/UFMu9h1ThCbEJSnZKHJQi+0pZZ5nmCzsmB7aQRdbUnBU', '2d7a1914a5094c918a03ee71959dc72e', '2d7a1914a5094c918a03ee71959dc72e', '2024-01-10 11:07:56.545915 +00:00');
+INSERT INTO dps.database_snaps_v1 (id, name, config, create_user_id, last_update_user_id, created_time, last_event_time) VALUES ('2b78141779ee432295ca371b91c5cac7', '0eb4f93d4064412f96c31da6d98c99ac', '79d4onsS0v7psxES9HBEjJorrzBnXtubQ7zTAjSiCqCIN/dp1f4wnnDq/nHrvgS/IkrktNLJlPpyCj8ho0dveEjfTmxagSYGWw8TXAEpbYvYfZ7AdWvgst6rrvf9ewaVbxw/TqeA4fZX7/NSh8B/UFMu9h1ThCbEJSnZKHJQi+0pZZ5nmCzsmB7aQRdbUnBU', '2d7a1914a5094c918a03ee71959dc72e', '2d7a1914a5094c918a03ee71959dc72e', '2024-01-10 11:07:56.545915 +00:00' , '2024-01-10 11:07:56.545915 +00:00');

+ 18 - 18
test/v1/v1_test.go

@@ -91,7 +91,7 @@ func TestTransaction(t *testing.T) {
 		queryByKeys(&client.QueryByKeysRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 		}, resultTableRow).
 		assertEqual(id, resultTableRow.ColumnValueString("id"), "ID不一致").
 		assertEqual(name, resultTableRow.ColumnValueString("name"), "名称不一致").
@@ -101,7 +101,7 @@ func TestTransaction(t *testing.T) {
 			statement, err := tx.UpdateTx(&client.UpdateRequest{
 				TablePrefixWithSchema: tablePrefix,
 				Version:               "v1",
-				KeyValues:             map[string]string{"id": id},
+				KeyValues:             client.NewKeyValue().Add("id", id),
 				NewTableRow: client.NewTableRow().
 					AddColumnValueString("id", id).
 					AddColumnValueString("name", newName).
@@ -120,7 +120,7 @@ func TestTransaction(t *testing.T) {
 		queryByKeys(&client.QueryByKeysRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 		}, resultTableRow).
 		assertEqual(id, resultTableRow.ColumnValueString("id"), "ID不一致").
 		assertEqual(newName, resultTableRow.ColumnValueString("name"), "名称不一致").
@@ -130,7 +130,7 @@ func TestTransaction(t *testing.T) {
 			statement, err := tx.UpdateTx(&client.UpdateRequest{
 				TablePrefixWithSchema: tablePrefix,
 				Version:               "v1",
-				KeyValues:             map[string]string{"id": id},
+				KeyValues:             client.NewKeyValue().Add("id", id),
 				NewTableRow: client.NewTableRow().
 					AddColumnValueString("id", id).
 					AddColumnValueString("name", name).
@@ -147,7 +147,7 @@ func TestTransaction(t *testing.T) {
 			statement, err = tx.DeleteTx(&client.DeleteRequest{
 				TablePrefixWithSchema: tablePrefix,
 				Version:               "v1",
-				KeyValues:             map[string]string{"id": id},
+				KeyValues:             client.NewKeyValue().Add("id", id),
 				UserID:                "test",
 			})
 			if err != nil {
@@ -265,7 +265,7 @@ func TestTransactionBatch(t *testing.T) {
 		queryByKeys(&client.QueryByKeysRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id1},
+			KeyValues:             client.NewKeyValue().Add("id", id1),
 		}, resultTableRow).
 		assertEqual(id1, resultTableRow.ColumnValueString("id"), "ID不一致").
 		assertEqual(name1, resultTableRow.ColumnValueString("name"), "名称不一致").
@@ -274,7 +274,7 @@ func TestTransactionBatch(t *testing.T) {
 		queryByKeys(&client.QueryByKeysRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id2},
+			KeyValues:             client.NewKeyValue().Add("id", id2),
 		}, resultTableRow).
 		assertEqual(id2, resultTableRow.ColumnValueString("id"), "ID不一致").
 		assertEqual(name2, resultTableRow.ColumnValueString("name"), "名称不一致").
@@ -303,7 +303,7 @@ func TestTransactionBatch(t *testing.T) {
 		queryByKeys(&client.QueryByKeysRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id1},
+			KeyValues:             client.NewKeyValue().Add("id", id1),
 		}, resultTableRow).
 		assertEqual(id1, resultTableRow.ColumnValueString("id"), "ID不一致").
 		assertEqual(newName, resultTableRow.ColumnValueString("name"), "名称不一致").
@@ -312,7 +312,7 @@ func TestTransactionBatch(t *testing.T) {
 		queryByKeys(&client.QueryByKeysRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id2},
+			KeyValues:             client.NewKeyValue().Add("id", id2),
 		}, resultTableRow).
 		assertEqual(id2, resultTableRow.ColumnValueString("id"), "ID不一致").
 		assertEqual(newName, resultTableRow.ColumnValueString("name"), "名称不一致").
@@ -385,7 +385,7 @@ func TestInsert(t *testing.T) {
 		queryByKeys(&client.QueryByKeysRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 		}, resultTableRow).
 		assertEqual(id, resultTableRow.ColumnValueString("id"), "ID不一致").
 		assertEqual(name, resultTableRow.ColumnValueString("name"), "名称不一致").
@@ -543,7 +543,7 @@ func TestUpdate(t *testing.T) {
 		update(&client.UpdateRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 			NewTableRow: client.NewTableRow().
 				AddColumnValueString("id", id).
 				AddColumnValueString("name", newName).
@@ -554,7 +554,7 @@ func TestUpdate(t *testing.T) {
 		queryByKeys(&client.QueryByKeysRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 		}, resultTableRow).
 		assertEqual(id, resultTableRow.ColumnValueString("id"), "ID不一致").
 		assertEqual(newName, resultTableRow.ColumnValueString("name"), "名称不一致").
@@ -614,7 +614,7 @@ func TestUpdateWhere(t *testing.T) {
 		queryByKeys(&client.QueryByKeysRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 		}, resultTableRow).
 		assertEqual(id, resultTableRow.ColumnValueString("id"), "ID不一致").
 		assertEqual(newName, resultTableRow.ColumnValueString("name"), "名称不一致").
@@ -659,7 +659,7 @@ func TestDelete(t *testing.T) {
 		delete(&client.DeleteRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 			UserID:                "test",
 		}).
 		countWhere(&client.CountWhereRequest{
@@ -756,13 +756,13 @@ func TestReply(t *testing.T) {
 		reply(&client.ReplayRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 			UserID:                "test",
 		}).
 		queryByKeys(&client.QueryByKeysRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 		}, resultTableRow).
 		assertEqual(id, resultTableRow.ColumnValueString("id"), "ID不一致").
 		assertEqual(name, resultTableRow.ColumnValueString("name"), "名称不一致").
@@ -811,7 +811,7 @@ func TestEventQuery(t *testing.T) {
 		update(&client.UpdateRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 			NewTableRow: client.NewTableRow().
 				AddColumnValueString("id", id).
 				AddColumnValueString("name", newName).
@@ -987,7 +987,7 @@ func TestEventQuery(t *testing.T) {
 		delete(&client.DeleteRequest{
 			TablePrefixWithSchema: tablePrefix,
 			Version:               "v1",
-			KeyValues:             map[string]string{"id": id},
+			KeyValues:             client.NewKeyValue().Add("id", id),
 			UserID:                "test",
 		}).
 		countEventHistoryByKeys(&client.CountEventByKeysRequest{