From db68453eab4094aed8fbe255d5fff50732c0d247 Mon Sep 17 00:00:00 2001 From: Sayan Nandan Date: Wed, 12 May 2021 09:59:19 +0530 Subject: [PATCH] MGET returns a flat array --- server/src/dbnet/connection.rs | 20 ++++++++++++++++++++ server/src/kvengine/mget.rs | 1 + 2 files changed, 21 insertions(+) diff --git a/server/src/dbnet/connection.rs b/server/src/dbnet/connection.rs index 7e901c88..128569ff 100644 --- a/server/src/dbnet/connection.rs +++ b/server/src/dbnet/connection.rs @@ -194,6 +194,26 @@ where ret }) } + /// Write the simple query header `*1\n` to the stream + fn write_flat_array_length<'r, 's>( + &'r mut self, + len: usize, + ) -> Pin> + Send + 's>> + where + 'r: 's, + Self: Send + 's, + { + Box::pin(async move { + let mv_self = self; + let ret: IoResult<()> = { + mv_self.write_response(&[b'_'][..]).await?; + mv_self.write_response(len.to_string().into_bytes()).await?; + mv_self.write_response(&[b'\n'][..]).await?; + Ok(()) + }; + ret + }) + } /// Wraps around the `write_response` used to differentiate between a /// success response and an error response fn close_conn_with_error<'r, 's>( diff --git a/server/src/kvengine/mget.rs b/server/src/kvengine/mget.rs index 72d8b85c..d896e639 100644 --- a/server/src/kvengine/mget.rs +++ b/server/src/kvengine/mget.rs @@ -41,6 +41,7 @@ where Strm: AsyncReadExt + AsyncWriteExt + Unpin + Send + Sync, { crate::err_if_len_is!(act, con, == 0); + con.write_flat_array_length(act.len() - 1).await?; let mut keys = act.into_iter().skip(1); while let Some(key) = keys.next() { let res: Option = {