diff --git a/database/commandinfo.go b/database/commandinfo.go index 020e4bb..afe283c 100644 --- a/database/commandinfo.go +++ b/database/commandinfo.go @@ -24,24 +24,22 @@ const ( ) func execCommand(args [][]byte) redis.Reply { - n := len(args) - if n > 1 { - subCommand := strings.ToLower(string(args[1])) - if subCommand == "info" { - return getCommands(args[2:]) - } else if subCommand == "count" { - return protocol.MakeIntReply(int64(len(cmdTable))) - } else if subCommand == "getkeys" { - if n < 2 { - return protocol.MakeErrReply("Unknown subcommand or wrong number of arguments for '" + subCommand + "'") - } - return getKeys(args[2:]) - } else { - return protocol.MakeErrReply("Unknown subcommand or wrong number of arguments for '" + subCommand + "'") - } - } else { + if len(args) == 0 { return getAllGodisCommandReply() } + subCommand := strings.ToLower(string(args[0])) + if subCommand == "info" { + return getCommands(args[1:]) + } else if subCommand == "count" { + return protocol.MakeIntReply(int64(len(cmdTable))) + } else if subCommand == "getkeys" { + if len(args) < 2 { + return protocol.MakeErrReply("wrong number of arguments for 'command|" + subCommand + "'") + } + return getKeys(args[1:]) + } else { + return protocol.MakeErrReply("Unknown subcommand '" + subCommand + "'") + } } func getKeys(args [][]byte) redis.Reply { diff --git a/database/commandinfo_test.go b/database/commandinfo_test.go index 26ba0da..3575950 100644 --- a/database/commandinfo_test.go +++ b/database/commandinfo_test.go @@ -16,5 +16,5 @@ func TestCommandInfo(t *testing.T) { ret = testServer.Exec(c, utils.ToCmdLine("command", "getkeys", "mset", "a", "a", "b", "b")) asserts.AssertMultiBulkReply(t, ret, []string{"a", "b"}) ret = testServer.Exec(c, utils.ToCmdLine("command", "foobar")) - asserts.AssertErrReply(t, ret, "Unknown subcommand or wrong number of arguments for 'foobar'") + asserts.AssertErrReply(t, ret, "Unknown subcommand 'foobar'") } diff --git a/database/server.go b/database/server.go index 52c565c..f93a9d9 100644 --- a/database/server.go +++ b/database/server.go @@ -122,7 +122,7 @@ func (server *Server) Exec(c redis.Connection, cmdLine [][]byte) (result redis.R } return server.execSlaveOf(c, cmdLine[1:]) } else if cmdName == "command" { - return execCommand(cmdLine) + return execCommand(cmdLine[1:]) } // read only slave