Adapt KEYS command to actually use the pattern to search for

Signed-off-by: Lee Smet <lee.smet@hotmail.com>
This commit is contained in:
Lee Smet
2025-08-25 13:24:32 +02:00
parent 8decbf3375
commit 65c297ca94

View File

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