ckb_rocksdb/ops/
delete.rs1use crate::ffi;
17use libc::{c_char, size_t};
18
19use crate::{handle::Handle, ColumnFamily, Error, WriteOptions};
20
21pub trait Delete<W> {
22 fn delete_full<K>(&self, key: K, writeopts: Option<&W>) -> Result<(), Error>
23 where
24 K: AsRef<[u8]>;
25
26 fn delete<K>(&self, key: K) -> Result<(), Error>
30 where
31 K: AsRef<[u8]>,
32 {
33 self.delete_full(key, None)
34 }
35
36 fn delete_opt<K>(&self, key: K, writeopts: &W) -> Result<(), Error>
37 where
38 K: AsRef<[u8]>,
39 {
40 self.delete_full(key, Some(writeopts))
41 }
42}
43
44pub trait DeleteCF<W> {
45 fn delete_cf_full<K>(
46 &self,
47 cf: Option<&ColumnFamily>,
48 key: K,
49 writeopts: Option<&W>,
50 ) -> Result<(), Error>
51 where
52 K: AsRef<[u8]>;
53
54 fn delete_cf<K>(&self, cf: &ColumnFamily, key: K) -> Result<(), Error>
55 where
56 K: AsRef<[u8]>,
57 {
58 self.delete_cf_full(Some(cf), key, None)
59 }
60
61 fn put_cf_opt<K>(&self, cf: &ColumnFamily, key: K, writeopts: &W) -> Result<(), Error>
62 where
63 K: AsRef<[u8]>,
64 {
65 self.delete_cf_full(Some(cf), key, Some(writeopts))
66 }
67}
68
69impl<T, W> Delete<W> for T
70where
71 T: DeleteCF<W>,
72{
73 fn delete_full<K: AsRef<[u8]>>(&self, key: K, writeopts: Option<&W>) -> Result<(), Error> {
74 self.delete_cf_full(None, key, writeopts)
75 }
76}
77
78impl<T> DeleteCF<WriteOptions> for T
79where
80 T: Handle<ffi::rocksdb_t> + super::Write,
81{
82 fn delete_cf_full<K>(
83 &self,
84 cf: Option<&ColumnFamily>,
85 key: K,
86 writeopts: Option<&WriteOptions>,
87 ) -> Result<(), Error>
88 where
89 K: AsRef<[u8]>,
90 {
91 let mut default_writeopts = None;
92
93 let wo_handle = WriteOptions::input_or_default(writeopts, &mut default_writeopts)?;
94
95 let key = key.as_ref();
96 let key_ptr = key.as_ptr() as *const c_char;
97 let key_len = key.len() as size_t;
98
99 unsafe {
100 match cf {
101 Some(cf) => ffi_try!(ffi::rocksdb_delete_cf(
102 self.handle(),
103 wo_handle,
104 cf.handle(),
105 key_ptr,
106 key_len,
107 )),
108 None => ffi_try!(ffi::rocksdb_delete(
109 self.handle(),
110 wo_handle,
111 key_ptr,
112 key_len,
113 )),
114 }
115
116 Ok(())
117 }
118 }
119}