diff --git a/src/cmd.rs b/src/cmd.rs index 1f1ed8c..3f686d9 100644 --- a/src/cmd.rs +++ b/src/cmd.rs @@ -16,7 +16,7 @@ pub enum Cmd { SetOpts(String, String, Option, bool, bool, bool), MGet(Vec), MSet(Vec<(String, String)>), - Keys, + Keys(String), DbSize, ConfigGet(String), Info(Option), @@ -254,10 +254,10 @@ impl Cmd { } } "keys" => { - if cmd.len() != 2 || cmd[1] != "*" { + if cmd.len() != 2 { return Err(DBError(format!("unsupported cmd {:?}", cmd))); } else { - Cmd::Keys + Cmd::Keys(cmd[1].clone()) } } "dbsize" => { @@ -1097,7 +1097,7 @@ impl Cmd { Cmd::Del(k) => del_cmd(server, &k).await, Cmd::DelMulti(keys) => del_multi_cmd(server, &keys).await, Cmd::ConfigGet(name) => config_get_cmd(&name, server), - Cmd::Keys => keys_cmd(server).await, + Cmd::Keys(pattern) => keys_cmd(server, &pattern).await, Cmd::DbSize => dbsize_cmd(server).await, Cmd::Info(section) => info_cmd(server, §ion).await, Cmd::Type(k) => type_cmd(server, &k).await, @@ -1624,8 +1624,8 @@ fn config_get_cmd(name: &String, server: &Server) -> Result { } } -async fn keys_cmd(server: &Server) -> Result { - let keys = server.current_storage()?.keys("*")?; +async fn keys_cmd(server: &Server, pattern: &str) -> Result { + let keys = server.current_storage()?.keys(pattern)?; Ok(Protocol::Array( keys.into_iter().map(Protocol::BulkString).collect(), ))