This is an automated email from the ASF dual-hosted git repository.

xuanwo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git


The following commit(s) were added to refs/heads/main by this push:
     new 1cd70e30a feat(services/rocksdb): Add scan support (#2827)
1cd70e30a is described below

commit 1cd70e30a3fc9545c0402a9b67221452164d817c
Author: JLer <[email protected]>
AuthorDate: Wed Aug 9 14:38:35 2023 +0800

    feat(services/rocksdb): Add scan support (#2827)
---
 core/src/services/rocksdb/backend.rs | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/core/src/services/rocksdb/backend.rs 
b/core/src/services/rocksdb/backend.rs
index fc1492664..9eaeb748a 100644
--- a/core/src/services/rocksdb/backend.rs
+++ b/core/src/services/rocksdb/backend.rs
@@ -110,6 +110,8 @@ impl kv::Adapter for Adapter {
             Capability {
                 read: true,
                 write: true,
+                list: true,
+                blocking: true,
                 ..Default::default()
             },
         )
@@ -138,6 +140,25 @@ impl kv::Adapter for Adapter {
     fn blocking_delete(&self, path: &str) -> Result<()> {
         Ok(self.db.delete(path)?)
     }
+
+    async fn scan(&self, path: &str) -> Result<Vec<String>> {
+        self.blocking_scan(path)
+    }
+
+    fn blocking_scan(&self, path: &str) -> Result<Vec<String>> {
+        let it = self.db.prefix_iterator(path).map(|r| r.map(|(k, _v)| k));
+        let mut res = Vec::default();
+
+        for i in it {
+            let bs = i?.to_vec();
+            res.push(String::from_utf8(bs).map_err(|err| {
+                Error::new(ErrorKind::Unexpected, "store key is not valid 
utf-8 string")
+                    .set_source(err)
+            })?);
+        }
+
+        Ok(res)
+    }
 }
 
 impl From<rocksdb::Error> for Error {

Reply via email to