Fixing KEYS command and tests
This commit is contained in:
parent
5e4c1601b1
commit
4392fb44bd
@ -27,6 +27,10 @@ func (c *Server) cmdKeys(msg *Message) (res resp.Value, err error) {
|
||||
if msg.OutputType == JSON {
|
||||
wr.WriteString(`{"ok":true,"keys":[`)
|
||||
}
|
||||
var wild bool
|
||||
if strings.Contains(pattern, "*") {
|
||||
wild = true
|
||||
}
|
||||
var everything bool
|
||||
var greater bool
|
||||
var greaterPivot string
|
||||
@ -58,30 +62,29 @@ func (c *Server) cmdKeys(msg *Message) (res resp.Value, err error) {
|
||||
case RESP:
|
||||
vals = append(vals, resp.StringValue(key))
|
||||
}
|
||||
|
||||
// If no more than one match is expected, stop searching
|
||||
if !wild {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// TODO: This can be further optimized by using glob.Parse and limits
|
||||
if pattern == "*" {
|
||||
everything = true
|
||||
c.cols.Scan(iterator)
|
||||
} else {
|
||||
if strings.HasSuffix(pattern, "*") {
|
||||
greaterPivot = pattern[:len(pattern)-1]
|
||||
if glob.IsGlob(greaterPivot) {
|
||||
greater = false
|
||||
c.cols.Scan(iterator)
|
||||
} else {
|
||||
greater = true
|
||||
c.cols.Ascend(greaterPivot, iterator)
|
||||
}
|
||||
} else if glob.IsGlob(pattern) {
|
||||
greater = false
|
||||
} else if strings.HasSuffix(pattern, "*") {
|
||||
greaterPivot = pattern[:len(pattern)-1]
|
||||
if glob.IsGlob(greaterPivot) {
|
||||
c.cols.Scan(iterator)
|
||||
} else {
|
||||
greater = true
|
||||
greaterPivot = pattern
|
||||
c.cols.Ascend(greaterPivot, iterator)
|
||||
}
|
||||
} else {
|
||||
c.cols.Scan(iterator)
|
||||
}
|
||||
if msg.OutputType == JSON {
|
||||
wr.WriteString(`],"elapsed":"` + time.Now().Sub(start).String() + "\"}")
|
||||
|
@ -149,14 +149,19 @@ func keys_KEYS_test(mc *mockServer) error {
|
||||
{"SET", "mykey11", "myid3", "OBJECT", `{"type":"Point","coordinates":[-110,25,-8]}`}, {"OK"},
|
||||
{"SET", "mykey42", "myid2", "HASH", "9my5xp7"}, {"OK"},
|
||||
{"SET", "mykey31", "myid4", "STRING", "value"}, {"OK"},
|
||||
{"KEYS", "*"}, {"[mykey11 mykey22 mykey31 mykey42]"},
|
||||
{"KEYS", "*key*"}, {"[mykey11 mykey22 mykey31 mykey42]"},
|
||||
{"KEYS", "mykey*"}, {"[mykey11 mykey22 mykey31 mykey42]"},
|
||||
{"SET", "mykey310", "myid5", "STRING", "value"}, {"OK"},
|
||||
{"KEYS", "*"}, {"[mykey11 mykey22 mykey31 mykey310 mykey42]"},
|
||||
{"KEYS", "*key*"}, {"[mykey11 mykey22 mykey31 mykey310 mykey42]"},
|
||||
{"KEYS", "mykey*"}, {"[mykey11 mykey22 mykey31 mykey310 mykey42]"},
|
||||
{"KEYS", "mykey4*"}, {"[mykey42]"},
|
||||
{"KEYS", "mykey*1"}, {"[mykey11 mykey31]"},
|
||||
{"KEYS", "mykey*1*"}, {"[mykey11 mykey31 mykey310]"},
|
||||
{"KEYS", "mykey*10"}, {"[mykey310]"},
|
||||
{"KEYS", "mykey*2"}, {"[mykey22 mykey42]"},
|
||||
{"KEYS", "*2"}, {"[mykey22 mykey42]"},
|
||||
{"KEYS", "*1*"}, {"[mykey11 mykey31]"},
|
||||
{"KEYS", "*1*"}, {"[mykey11 mykey31 mykey310]"},
|
||||
{"KEYS", "mykey"}, {"[]"},
|
||||
{"KEYS", "mykey31"}, {"[mykey31]"},
|
||||
})
|
||||
}
|
||||
func keys_PERSIST_test(mc *mockServer) error {
|
||||
|
Loading…
x
Reference in New Issue
Block a user