mirror of
https://github.com/EchoVault/SugarDB.git
synced 2025-10-14 04:03:50 +08:00
Implemented llen command
This commit is contained in:
@@ -44,6 +44,9 @@ func (p *plugin) HandleCommand(cmd []string, server interface{}, conn *bufio.Wri
|
||||
c := strings.ToLower(cmd[0])
|
||||
|
||||
switch {
|
||||
case c == "llen":
|
||||
handleLLen(cmd, server.(Server), conn)
|
||||
|
||||
case c == "lrange":
|
||||
handleLRange(cmd, server.(Server), conn)
|
||||
|
||||
@@ -58,6 +61,29 @@ func (p *plugin) HandleCommand(cmd []string, server interface{}, conn *bufio.Wri
|
||||
}
|
||||
}
|
||||
|
||||
func handleLLen(cmd []string, server Server, conn *bufio.Writer) {
|
||||
if len(cmd) != 2 {
|
||||
conn.Write([]byte("-Error wrong number of args for LLEN command\r\n\n"))
|
||||
conn.Flush()
|
||||
return
|
||||
}
|
||||
|
||||
server.Lock()
|
||||
|
||||
list, ok := server.GetData(cmd[1]).([]interface{})
|
||||
|
||||
if !ok {
|
||||
server.Unlock()
|
||||
conn.Write([]byte("-Error LLEN command on non-list item\r\n\n"))
|
||||
conn.Flush()
|
||||
return
|
||||
}
|
||||
|
||||
server.Unlock()
|
||||
conn.Write([]byte(fmt.Sprintf(":%d\r\n\n", len(list))))
|
||||
conn.Flush()
|
||||
}
|
||||
|
||||
func handleLRange(cmd []string, server Server, conn *bufio.Writer) {
|
||||
if len(cmd) != 4 {
|
||||
conn.Write([]byte("-Error wrong number of arguments for LRANGE command\r\n\n"))
|
||||
@@ -257,13 +283,6 @@ func handlePop(cmd []string, server Server, conn *bufio.Writer) {
|
||||
return
|
||||
}
|
||||
|
||||
if list == nil {
|
||||
server.Unlock()
|
||||
conn.Write([]byte("-Error no list at key\r\n\n"))
|
||||
conn.Flush()
|
||||
return
|
||||
}
|
||||
|
||||
switch strings.ToLower(cmd[0]) {
|
||||
default:
|
||||
server.SetData(cmd[1], list[1:])
|
||||
|
Reference in New Issue
Block a user