1
0
mirror of https://github.com/redis/go-redis.git synced 2025-07-28 06:42:00 +03:00

fix: update COMMAND parser for Redis 7

This commit is contained in:
Vladimir Mihailenco
2022-06-04 16:07:28 +03:00
parent 3a722be811
commit b0bb514059
6 changed files with 40 additions and 27 deletions

View File

@ -83,7 +83,7 @@ func cmdFirstKeyPos(cmd Cmder, info *CommandInfo) int {
if info != nil {
return int(info.FirstKeyPos)
}
return 0
return 1
}
func cmdString(cmd Cmder, val interface{}) string {
@ -3166,6 +3166,7 @@ func (cmd *CommandsInfoCmd) String() string {
func (cmd *CommandsInfoCmd) readReply(rd *proto.Reader) error {
const numArgRedis5 = 6
const numArgRedis6 = 7
const numArgRedis7 = 10
n, err := rd.ReadArrayLen()
if err != nil {
@ -3178,8 +3179,12 @@ func (cmd *CommandsInfoCmd) readReply(rd *proto.Reader) error {
if err != nil {
return err
}
if nn != numArgRedis5 && nn != numArgRedis6 {
return fmt.Errorf("redis: got %d elements in COMMAND reply, wanted 6/7", nn)
switch nn {
case numArgRedis5, numArgRedis6, numArgRedis7:
// ok
default:
return fmt.Errorf("redis: got %d elements in COMMAND reply, wanted 6/7/10", nn)
}
cmdInfo := &CommandInfo{}
@ -3230,7 +3235,7 @@ func (cmd *CommandsInfoCmd) readReply(rd *proto.Reader) error {
}
cmdInfo.StepCount = int8(stepCount)
if nn == numArgRedis6 {
if nn >= numArgRedis6 {
aclFlagLen, err := rd.ReadArrayLen()
if err != nil {
return err
@ -3248,6 +3253,18 @@ func (cmd *CommandsInfoCmd) readReply(rd *proto.Reader) error {
}
}
if nn >= numArgRedis7 {
if err := rd.DiscardNext(); err != nil {
return err
}
if err := rd.DiscardNext(); err != nil {
return err
}
if err := rd.DiscardNext(); err != nil {
return err
}
}
cmd.val[cmdInfo.Name] = cmdInfo
}