Files
redis-go/database/router.go
2022-07-02 11:45:56 +08:00

44 lines
955 B
Go

package database
import (
"strings"
)
var cmdTable = make(map[string]*command)
type command struct {
executor ExecFunc
prepare PreFunc // return related keys command
undo UndoFunc
arity int // allow number of args, arity < 0 means len(args) >= -arity
flags int
}
const (
flagWrite = 0
flagReadOnly = 1
)
// RegisterCommand registers a new command
// arity means allowed number of cmdArgs, arity < 0 means len(args) >= -arity.
// for example: the arity of `get` is 2, `mget` is -2
func RegisterCommand(name string, executor ExecFunc, prepare PreFunc, rollback UndoFunc, arity int, flags int) {
name = strings.ToLower(name)
cmdTable[name] = &command{
executor: executor,
prepare: prepare,
undo: rollback,
arity: arity,
flags: flags,
}
}
func isReadOnlyCommand(name string) bool {
name = strings.ToLower(name)
cmd := cmdTable[name]
if cmd == nil {
return false
}
return cmd.flags&flagReadOnly > 0
}