Support additional flags for ACL in CommandsInfo

This commit is contained in:
y_uuki 2020-06-05 03:27:34 +09:00 committed by Vladimir Mihailenco
parent 8f52186ce7
commit 23f6dd4187
1 changed files with 21 additions and 2 deletions

View File

@ -1885,6 +1885,7 @@ type CommandInfo struct {
Name string
Arity int8
Flags []string
ACLFlags []string
FirstKeyPos int8
LastKeyPos int8
StepCount int8
@ -1934,8 +1935,8 @@ func (cmd *CommandsInfoCmd) readReply(rd *proto.Reader) error {
}
func commandInfoParser(rd *proto.Reader, n int64) (interface{}, error) {
if n != 6 {
return nil, fmt.Errorf("redis: got %d elements in COMMAND reply, wanted 6", n)
if n != 7 {
return nil, fmt.Errorf("redis: got %d elements in COMMAND reply, wanted 7", n)
}
var cmd CommandInfo
@ -1988,6 +1989,24 @@ func commandInfoParser(rd *proto.Reader, n int64) (interface{}, error) {
}
cmd.StepCount = int8(stepCount)
_, err = rd.ReadReply(func(rd *proto.Reader, n int64) (interface{}, error) {
cmd.ACLFlags = make([]string, n)
for i := 0; i < len(cmd.Flags); i++ {
switch s, err := rd.ReadString(); {
case err == Nil:
cmd.ACLFlags[i] = ""
case err != nil:
return nil, err
default:
cmd.ACLFlags[i] = s
}
}
return nil, nil
})
if err != nil {
return nil, err
}
for _, flag := range cmd.Flags {
if flag == "readonly" {
cmd.ReadOnly = true