Skip to content

Commit 98e1b52

Browse files
authored
Merge branch 'master' into support-bloom-resp-2
2 parents 1e40f1a + d1b4eae commit 98e1b52

File tree

2 files changed

+1270
-1073
lines changed

2 files changed

+1270
-1073
lines changed

command.go

+45-9
Original file line numberDiff line numberDiff line change
@@ -1403,27 +1403,63 @@ func (cmd *MapStringSliceInterfaceCmd) Val() map[string][]interface{} {
14031403
}
14041404

14051405
func (cmd *MapStringSliceInterfaceCmd) readReply(rd *proto.Reader) (err error) {
1406-
n, err := rd.ReadMapLen()
1406+
readType, err := rd.PeekReplyType()
14071407
if err != nil {
14081408
return err
14091409
}
1410-
cmd.val = make(map[string][]interface{}, n)
1411-
for i := 0; i < n; i++ {
1412-
k, err := rd.ReadString()
1410+
1411+
cmd.val = make(map[string][]interface{})
1412+
1413+
if readType == proto.RespMap {
1414+
n, err := rd.ReadMapLen()
14131415
if err != nil {
14141416
return err
14151417
}
1416-
nn, err := rd.ReadArrayLen()
1418+
for i := 0; i < n; i++ {
1419+
k, err := rd.ReadString()
1420+
if err != nil {
1421+
return err
1422+
}
1423+
nn, err := rd.ReadArrayLen()
1424+
if err != nil {
1425+
return err
1426+
}
1427+
cmd.val[k] = make([]interface{}, nn)
1428+
for j := 0; j < nn; j++ {
1429+
value, err := rd.ReadReply()
1430+
if err != nil {
1431+
return err
1432+
}
1433+
cmd.val[k][j] = value
1434+
}
1435+
}
1436+
} else if readType == proto.RespArray {
1437+
// RESP2 response
1438+
n, err := rd.ReadArrayLen()
14171439
if err != nil {
14181440
return err
14191441
}
1420-
cmd.val[k] = make([]interface{}, nn)
1421-
for j := 0; j < nn; j++ {
1422-
value, err := rd.ReadReply()
1442+
1443+
for i := 0; i < n; i++ {
1444+
// Each entry in this array is itself an array with key details
1445+
itemLen, err := rd.ReadArrayLen()
14231446
if err != nil {
14241447
return err
14251448
}
1426-
cmd.val[k][j] = value
1449+
1450+
key, err := rd.ReadString()
1451+
if err != nil {
1452+
return err
1453+
}
1454+
cmd.val[key] = make([]interface{}, 0, itemLen-1)
1455+
for j := 1; j < itemLen; j++ {
1456+
// Read the inner array for timestamp-value pairs
1457+
data, err := rd.ReadReply()
1458+
if err != nil {
1459+
return err
1460+
}
1461+
cmd.val[key] = append(cmd.val[key], data)
1462+
}
14271463
}
14281464
}
14291465

0 commit comments

Comments
 (0)