mirror of https://github.com/go-redis/redis.git
Merge branch 'master' into add-unstableresp3-to-docs
This commit is contained in:
commit
4d7477c5e2
60
command.go
60
command.go
|
@ -1403,27 +1403,63 @@ func (cmd *MapStringSliceInterfaceCmd) Val() map[string][]interface{} {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cmd *MapStringSliceInterfaceCmd) readReply(rd *proto.Reader) (err error) {
|
func (cmd *MapStringSliceInterfaceCmd) readReply(rd *proto.Reader) (err error) {
|
||||||
n, err := rd.ReadMapLen()
|
readType, err := rd.PeekReplyType()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
cmd.val = make(map[string][]interface{}, n)
|
|
||||||
for i := 0; i < n; i++ {
|
cmd.val = make(map[string][]interface{})
|
||||||
k, err := rd.ReadString()
|
|
||||||
|
if readType == proto.RespMap {
|
||||||
|
n, err := rd.ReadMapLen()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
nn, err := rd.ReadArrayLen()
|
for i := 0; i < n; i++ {
|
||||||
if err != nil {
|
k, err := rd.ReadString()
|
||||||
return err
|
|
||||||
}
|
|
||||||
cmd.val[k] = make([]interface{}, nn)
|
|
||||||
for j := 0; j < nn; j++ {
|
|
||||||
value, err := rd.ReadReply()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
cmd.val[k][j] = value
|
nn, err := rd.ReadArrayLen()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
cmd.val[k] = make([]interface{}, nn)
|
||||||
|
for j := 0; j < nn; j++ {
|
||||||
|
value, err := rd.ReadReply()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
cmd.val[k][j] = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if readType == proto.RespArray {
|
||||||
|
// RESP2 response
|
||||||
|
n, err := rd.ReadArrayLen()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < n; i++ {
|
||||||
|
// Each entry in this array is itself an array with key details
|
||||||
|
itemLen, err := rd.ReadArrayLen()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
key, err := rd.ReadString()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
cmd.val[key] = make([]interface{}, 0, itemLen-1)
|
||||||
|
for j := 1; j < itemLen; j++ {
|
||||||
|
// Read the inner array for timestamp-value pairs
|
||||||
|
data, err := rd.ReadReply()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
cmd.val[key] = append(cmd.val[key], data)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -319,37 +319,69 @@ func (cmd *BFInfoCmd) Result() (BFInfo, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cmd *BFInfoCmd) readReply(rd *proto.Reader) (err error) {
|
func (cmd *BFInfoCmd) readReply(rd *proto.Reader) (err error) {
|
||||||
n, err := rd.ReadMapLen()
|
result := BFInfo{}
|
||||||
|
|
||||||
|
// Create a mapping from key names to pointers of struct fields
|
||||||
|
respMapping := map[string]*int64{
|
||||||
|
"Capacity": &result.Capacity,
|
||||||
|
"CAPACITY": &result.Capacity,
|
||||||
|
"Size": &result.Size,
|
||||||
|
"SIZE": &result.Size,
|
||||||
|
"Number of filters": &result.Filters,
|
||||||
|
"FILTERS": &result.Filters,
|
||||||
|
"Number of items inserted": &result.ItemsInserted,
|
||||||
|
"ITEMS": &result.ItemsInserted,
|
||||||
|
"Expansion rate": &result.ExpansionRate,
|
||||||
|
"EXPANSION": &result.ExpansionRate,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper function to read and assign a value based on the key
|
||||||
|
readAndAssignValue := func(key string) error {
|
||||||
|
fieldPtr, exists := respMapping[key]
|
||||||
|
if !exists {
|
||||||
|
return fmt.Errorf("redis: BLOOM.INFO unexpected key %s", key)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read the integer and assign to the field via pointer dereferencing
|
||||||
|
val, err := rd.ReadInt()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*fieldPtr = val
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
readType, err := rd.PeekReplyType()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var key string
|
if len(cmd.args) > 2 && readType == proto.RespArray {
|
||||||
var result BFInfo
|
n, err := rd.ReadArrayLen()
|
||||||
for f := 0; f < n; f++ {
|
|
||||||
key, err = rd.ReadString()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if key, ok := cmd.args[2].(string); ok && n == 1 {
|
||||||
switch key {
|
if err := readAndAssignValue(key); err != nil {
|
||||||
case "Capacity":
|
return err
|
||||||
result.Capacity, err = rd.ReadInt()
|
}
|
||||||
case "Size":
|
} else {
|
||||||
result.Size, err = rd.ReadInt()
|
return fmt.Errorf("redis: BLOOM.INFO invalid argument key type")
|
||||||
case "Number of filters":
|
|
||||||
result.Filters, err = rd.ReadInt()
|
|
||||||
case "Number of items inserted":
|
|
||||||
result.ItemsInserted, err = rd.ReadInt()
|
|
||||||
case "Expansion rate":
|
|
||||||
result.ExpansionRate, err = rd.ReadInt()
|
|
||||||
default:
|
|
||||||
return fmt.Errorf("redis: BLOOM.INFO unexpected key %s", key)
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
n, err := rd.ReadMapLen()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
for i := 0; i < n; i++ {
|
||||||
|
key, err := rd.ReadString()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := readAndAssignValue(key); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.val = result
|
cmd.val = result
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue