tiny fixes

This commit is contained in:
finley
2022-08-20 22:28:06 +08:00
parent 23a6f95c18
commit 9da335811f
8 changed files with 60 additions and 11 deletions

View File

@@ -51,14 +51,19 @@ func EnqueueCmd(conn redis.Connection, cmdLine [][]byte) redis.Reply {
cmdName := strings.ToLower(string(cmdLine[0]))
cmd, ok := cmdTable[cmdName]
if !ok {
return protocol.MakeErrReply("ERR unknown command '" + cmdName + "'")
err := protocol.MakeErrReply("ERR unknown command '" + cmdName + "'")
conn.AddTxError(err)
return err
}
if cmd.prepare == nil {
return protocol.MakeErrReply("ERR command '" + cmdName + "' cannot be used in MULTI")
err := protocol.MakeErrReply("ERR command '" + cmdName + "' cannot be used in MULTI")
conn.AddTxError(err)
return err
}
if !validateArity(cmd.arity, cmdLine) {
// difference with redis: we won't enqueue command line with wrong arity
return protocol.MakeArgNumErrReply(cmdName)
err := protocol.MakeArgNumErrReply(cmdName)
conn.AddTxError(err)
return err
}
conn.EnqueueCmd(cmdLine)
return protocol.MakeQueuedReply()
@@ -69,6 +74,9 @@ func execMulti(db *DB, conn redis.Connection) redis.Reply {
return protocol.MakeErrReply("ERR EXEC without MULTI")
}
defer conn.SetMultiState(false)
if len(conn.GetTxErrors()) > 0 {
return protocol.MakeErrReply("EXECABORT Transaction discarded because of previous errors.")
}
cmdLines := conn.GetQueuedCmdLine()
return db.ExecMulti(conn, conn.GetWatching(), cmdLines)
}