Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
R
rust-rocksdb
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fangzongwu
rust-rocksdb
Commits
1c921cc9
Commit
1c921cc9
authored
Jan 13, 2017
by
zhangjinpeng1987
Committed by
siddontang
Jan 13, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add single delete (#76)
parent
3633152c
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
153 additions
and
0 deletions
+153
-0
c.cc
librocksdb_sys/crocksdb/c.cc
+31
-0
c.h
librocksdb_sys/crocksdb/rocksdb/c.h
+15
-0
lib.rs
librocksdb_sys/src/lib.rs
+18
-0
rocksdb.rs
src/rocksdb.rs
+89
-0
No files found.
librocksdb_sys/crocksdb/c.cc
View file @
1c921cc9
...
@@ -683,6 +683,24 @@ void crocksdb_delete_cf(
...
@@ -683,6 +683,24 @@ void crocksdb_delete_cf(
Slice
(
key
,
keylen
)));
Slice
(
key
,
keylen
)));
}
}
void
crocksdb_single_delete
(
crocksdb_t
*
db
,
const
crocksdb_writeoptions_t
*
options
,
const
char
*
key
,
size_t
keylen
,
char
**
errptr
)
{
SaveError
(
errptr
,
db
->
rep
->
SingleDelete
(
options
->
rep
,
Slice
(
key
,
keylen
)));
}
void
crocksdb_single_delete_cf
(
crocksdb_t
*
db
,
const
crocksdb_writeoptions_t
*
options
,
crocksdb_column_family_handle_t
*
column_family
,
const
char
*
key
,
size_t
keylen
,
char
**
errptr
)
{
SaveError
(
errptr
,
db
->
rep
->
SingleDelete
(
options
->
rep
,
column_family
->
rep
,
Slice
(
key
,
keylen
)));
}
void
crocksdb_merge
(
void
crocksdb_merge
(
crocksdb_t
*
db
,
crocksdb_t
*
db
,
const
crocksdb_writeoptions_t
*
options
,
const
crocksdb_writeoptions_t
*
options
,
...
@@ -1218,6 +1236,19 @@ void crocksdb_writebatch_delete_cf(
...
@@ -1218,6 +1236,19 @@ void crocksdb_writebatch_delete_cf(
b
->
rep
.
Delete
(
column_family
->
rep
,
Slice
(
key
,
klen
));
b
->
rep
.
Delete
(
column_family
->
rep
,
Slice
(
key
,
klen
));
}
}
void
crocksdb_writebatch_single_delete
(
crocksdb_writebatch_t
*
b
,
const
char
*
key
,
size_t
klen
)
{
b
->
rep
.
SingleDelete
(
Slice
(
key
,
klen
));
}
void
crocksdb_writebatch_single_delete_cf
(
crocksdb_writebatch_t
*
b
,
crocksdb_column_family_handle_t
*
column_family
,
const
char
*
key
,
size_t
klen
)
{
b
->
rep
.
SingleDelete
(
column_family
->
rep
,
Slice
(
key
,
klen
));
}
void
crocksdb_writebatch_deletev
(
void
crocksdb_writebatch_deletev
(
crocksdb_writebatch_t
*
b
,
crocksdb_writebatch_t
*
b
,
int
num_keys
,
const
char
*
const
*
keys_list
,
int
num_keys
,
const
char
*
const
*
keys_list
,
...
...
librocksdb_sys/crocksdb/rocksdb/c.h
View file @
1c921cc9
...
@@ -220,6 +220,15 @@ extern C_ROCKSDB_LIBRARY_API void crocksdb_delete_cf(
...
@@ -220,6 +220,15 @@ extern C_ROCKSDB_LIBRARY_API void crocksdb_delete_cf(
crocksdb_column_family_handle_t
*
column_family
,
const
char
*
key
,
crocksdb_column_family_handle_t
*
column_family
,
const
char
*
key
,
size_t
keylen
,
char
**
errptr
);
size_t
keylen
,
char
**
errptr
);
extern
C_ROCKSDB_LIBRARY_API
void
crocksdb_single_delete
(
crocksdb_t
*
db
,
const
crocksdb_writeoptions_t
*
options
,
const
char
*
key
,
size_t
keylen
,
char
**
errptr
);
extern
C_ROCKSDB_LIBRARY_API
void
crocksdb_single_delete_cf
(
crocksdb_t
*
db
,
const
crocksdb_writeoptions_t
*
options
,
crocksdb_column_family_handle_t
*
column_family
,
const
char
*
key
,
size_t
keylen
,
char
**
errptr
);
extern
C_ROCKSDB_LIBRARY_API
void
crocksdb_merge
(
extern
C_ROCKSDB_LIBRARY_API
void
crocksdb_merge
(
crocksdb_t
*
db
,
const
crocksdb_writeoptions_t
*
options
,
const
char
*
key
,
crocksdb_t
*
db
,
const
crocksdb_writeoptions_t
*
options
,
const
char
*
key
,
size_t
keylen
,
const
char
*
val
,
size_t
vallen
,
char
**
errptr
);
size_t
keylen
,
const
char
*
val
,
size_t
vallen
,
char
**
errptr
);
...
@@ -418,6 +427,12 @@ extern C_ROCKSDB_LIBRARY_API void crocksdb_writebatch_delete(crocksdb_writebatch
...
@@ -418,6 +427,12 @@ extern C_ROCKSDB_LIBRARY_API void crocksdb_writebatch_delete(crocksdb_writebatch
extern
C_ROCKSDB_LIBRARY_API
void
crocksdb_writebatch_delete_cf
(
extern
C_ROCKSDB_LIBRARY_API
void
crocksdb_writebatch_delete_cf
(
crocksdb_writebatch_t
*
,
crocksdb_column_family_handle_t
*
column_family
,
crocksdb_writebatch_t
*
,
crocksdb_column_family_handle_t
*
column_family
,
const
char
*
key
,
size_t
klen
);
const
char
*
key
,
size_t
klen
);
extern
C_ROCKSDB_LIBRARY_API
void
crocksdb_writebatch_single_delete
(
crocksdb_writebatch_t
*
,
const
char
*
key
,
size_t
klen
);
extern
C_ROCKSDB_LIBRARY_API
void
crocksdb_writebatch_single_delete_cf
(
crocksdb_writebatch_t
*
,
crocksdb_column_family_handle_t
*
column_family
,
const
char
*
key
,
size_t
klen
);
extern
C_ROCKSDB_LIBRARY_API
void
crocksdb_writebatch_deletev
(
extern
C_ROCKSDB_LIBRARY_API
void
crocksdb_writebatch_deletev
(
crocksdb_writebatch_t
*
b
,
int
num_keys
,
const
char
*
const
*
keys_list
,
crocksdb_writebatch_t
*
b
,
int
num_keys
,
const
char
*
const
*
keys_list
,
const
size_t
*
keys_list_sizes
);
const
size_t
*
keys_list_sizes
);
...
...
librocksdb_sys/src/lib.rs
View file @
1c921cc9
...
@@ -269,6 +269,17 @@ extern "C" {
...
@@ -269,6 +269,17 @@ extern "C" {
k
:
*
const
u8
,
k
:
*
const
u8
,
kLen
:
size_t
,
kLen
:
size_t
,
err
:
*
mut
*
mut
c_char
);
err
:
*
mut
*
mut
c_char
);
pub
fn
crocksdb_single_delete
(
db
:
*
mut
DBInstance
,
writeopts
:
*
const
DBWriteOptions
,
k
:
*
const
u8
,
kLen
:
size_t
,
err
:
*
mut
*
mut
c_char
);
pub
fn
crocksdb_single_delete_cf
(
db
:
*
mut
DBInstance
,
writeopts
:
*
const
DBWriteOptions
,
cf
:
*
mut
DBCFHandle
,
k
:
*
const
u8
,
kLen
:
size_t
,
err
:
*
mut
*
mut
c_char
);
pub
fn
crocksdb_close
(
db
:
*
mut
DBInstance
);
pub
fn
crocksdb_close
(
db
:
*
mut
DBInstance
);
pub
fn
crocksdb_destroy_db
(
options
:
*
const
DBOptions
,
pub
fn
crocksdb_destroy_db
(
options
:
*
const
DBOptions
,
path
:
*
const
c_char
,
path
:
*
const
c_char
,
...
@@ -368,6 +379,13 @@ extern "C" {
...
@@ -368,6 +379,13 @@ extern "C" {
cf
:
*
mut
DBCFHandle
,
cf
:
*
mut
DBCFHandle
,
key
:
*
const
u8
,
key
:
*
const
u8
,
klen
:
size_t
);
klen
:
size_t
);
pub
fn
crocksdb_writebatch_single_delete
(
batch
:
*
mut
DBWriteBatch
,
key
:
*
const
u8
,
klen
:
size_t
);
pub
fn
crocksdb_writebatch_single_delete_cf
(
batch
:
*
mut
DBWriteBatch
,
cf
:
*
mut
DBCFHandle
,
key
:
*
const
u8
,
klen
:
size_t
);
pub
fn
crocksdb_writebatch_iterate
(
batch
:
*
mut
DBWriteBatch
,
pub
fn
crocksdb_writebatch_iterate
(
batch
:
*
mut
DBWriteBatch
,
state
:
*
mut
c_void
,
state
:
*
mut
c_void
,
put_fn
:
extern
"C"
fn
(
state
:
*
mut
c_void
,
put_fn
:
extern
"C"
fn
(
state
:
*
mut
c_void
,
...
...
src/rocksdb.rs
View file @
1c921cc9
...
@@ -257,6 +257,8 @@ pub trait Writable {
...
@@ -257,6 +257,8 @@ pub trait Writable {
fn
merge_cf
(
&
self
,
cf
:
&
CFHandle
,
key
:
&
[
u8
],
value
:
&
[
u8
])
->
Result
<
(),
String
>
;
fn
merge_cf
(
&
self
,
cf
:
&
CFHandle
,
key
:
&
[
u8
],
value
:
&
[
u8
])
->
Result
<
(),
String
>
;
fn
delete
(
&
self
,
key
:
&
[
u8
])
->
Result
<
(),
String
>
;
fn
delete
(
&
self
,
key
:
&
[
u8
])
->
Result
<
(),
String
>
;
fn
delete_cf
(
&
self
,
cf
:
&
CFHandle
,
key
:
&
[
u8
])
->
Result
<
(),
String
>
;
fn
delete_cf
(
&
self
,
cf
:
&
CFHandle
,
key
:
&
[
u8
])
->
Result
<
(),
String
>
;
fn
single_delete
(
&
self
,
key
:
&
[
u8
])
->
Result
<
(),
String
>
;
fn
single_delete_cf
(
&
self
,
cf
:
&
CFHandle
,
key
:
&
[
u8
])
->
Result
<
(),
String
>
;
}
}
/// A range of keys, `start_key` is included, but not `end_key`.
/// A range of keys, `start_key` is included, but not `end_key`.
...
@@ -650,6 +652,31 @@ impl DB {
...
@@ -650,6 +652,31 @@ impl DB {
}
}
}
}
fn
single_delete_opt
(
&
self
,
key
:
&
[
u8
],
writeopts
:
&
WriteOptions
)
->
Result
<
(),
String
>
{
unsafe
{
ffi_try!
(
crocksdb_single_delete
(
self
.inner
,
writeopts
.inner
,
key
.as_ptr
(),
key
.len
()
as
size_t
));
Ok
(())
}
}
fn
single_delete_cf_opt
(
&
self
,
cf
:
&
CFHandle
,
key
:
&
[
u8
],
writeopts
:
&
WriteOptions
)
->
Result
<
(),
String
>
{
unsafe
{
ffi_try!
(
crocksdb_single_delete_cf
(
self
.inner
,
writeopts
.inner
,
cf
.inner
,
key
.as_ptr
(),
key
.len
()
as
size_t
));
Ok
(())
}
}
/// Flush all memtable data.
/// Flush all memtable data.
///
///
/// Due to lack of abi, only default cf is supported.
/// Due to lack of abi, only default cf is supported.
...
@@ -892,6 +919,14 @@ impl Writable for DB {
...
@@ -892,6 +919,14 @@ impl Writable for DB {
fn
delete_cf
(
&
self
,
cf
:
&
CFHandle
,
key
:
&
[
u8
])
->
Result
<
(),
String
>
{
fn
delete_cf
(
&
self
,
cf
:
&
CFHandle
,
key
:
&
[
u8
])
->
Result
<
(),
String
>
{
self
.delete_cf_opt
(
cf
,
key
,
&
WriteOptions
::
new
())
self
.delete_cf_opt
(
cf
,
key
,
&
WriteOptions
::
new
())
}
}
fn
single_delete
(
&
self
,
key
:
&
[
u8
])
->
Result
<
(),
String
>
{
self
.single_delete_opt
(
key
,
&
WriteOptions
::
new
())
}
fn
single_delete_cf
(
&
self
,
cf
:
&
CFHandle
,
key
:
&
[
u8
])
->
Result
<
(),
String
>
{
self
.single_delete_cf_opt
(
cf
,
key
,
&
WriteOptions
::
new
())
}
}
}
impl
Default
for
WriteBatch
{
impl
Default
for
WriteBatch
{
...
@@ -1006,6 +1041,25 @@ impl Writable for WriteBatch {
...
@@ -1006,6 +1041,25 @@ impl Writable for WriteBatch {
Ok
(())
Ok
(())
}
}
}
}
fn
single_delete
(
&
self
,
key
:
&
[
u8
])
->
Result
<
(),
String
>
{
unsafe
{
crocksdb_ffi
::
crocksdb_writebatch_single_delete
(
self
.inner
,
key
.as_ptr
(),
key
.len
()
as
size_t
);
Ok
(())
}
}
fn
single_delete_cf
(
&
self
,
cf
:
&
CFHandle
,
key
:
&
[
u8
])
->
Result
<
(),
String
>
{
unsafe
{
crocksdb_ffi
::
crocksdb_writebatch_single_delete_cf
(
self
.inner
,
cf
.inner
,
key
.as_ptr
(),
key
.len
()
as
size_t
);
Ok
(())
}
}
}
}
pub
struct
DBVector
{
pub
struct
DBVector
{
...
@@ -1288,6 +1342,41 @@ mod test {
...
@@ -1288,6 +1342,41 @@ mod test {
assert
!
(
name
.to_str
()
.unwrap
()
.find
(
"LOG"
)
.is_none
());
assert
!
(
name
.to_str
()
.unwrap
()
.find
(
"LOG"
)
.is_none
());
}
}
}
}
#[test]
fn
single_delete_test
()
{
let
path
=
TempDir
::
new
(
"_rust_rocksdb_singledeletetest"
)
.expect
(
""
);
let
db
=
DB
::
open_default
(
path
.path
()
.to_str
()
.unwrap
())
.unwrap
();
db
.put
(
b
"a"
,
b
"v1"
)
.unwrap
();
let
a
=
db
.get
(
b
"a"
);
assert_eq!
(
a
.unwrap
()
.unwrap
()
.to_utf8
()
.unwrap
(),
"v1"
);
db
.single_delete
(
b
"a"
)
.unwrap
();
let
a
=
db
.get
(
b
"a"
);
assert
!
(
a
.unwrap
()
.is_none
());
db
.put
(
b
"a"
,
b
"v2"
)
.unwrap
();
let
a
=
db
.get
(
b
"a"
);
assert_eq!
(
a
.unwrap
()
.unwrap
()
.to_utf8
()
.unwrap
(),
"v2"
);
db
.single_delete
(
b
"a"
)
.unwrap
();
let
a
=
db
.get
(
b
"a"
);
assert
!
(
a
.unwrap
()
.is_none
());
let
cf_handle
=
db
.cf_handle
(
"default"
)
.unwrap
();
db
.put_cf
(
cf_handle
,
b
"a"
,
b
"v3"
)
.unwrap
();
let
a
=
db
.get_cf
(
cf_handle
,
b
"a"
);
assert_eq!
(
a
.unwrap
()
.unwrap
()
.to_utf8
()
.unwrap
(),
"v3"
);
db
.single_delete_cf
(
cf_handle
,
b
"a"
)
.unwrap
();
let
a
=
db
.get_cf
(
cf_handle
,
b
"a"
);
assert
!
(
a
.unwrap
()
.is_none
());
db
.put_cf
(
cf_handle
,
b
"a"
,
b
"v4"
)
.unwrap
();
let
a
=
db
.get_cf
(
cf_handle
,
b
"a"
);
assert_eq!
(
a
.unwrap
()
.unwrap
()
.to_utf8
()
.unwrap
(),
"v4"
);
db
.single_delete_cf
(
cf_handle
,
b
"a"
)
.unwrap
();
let
a
=
db
.get_cf
(
cf_handle
,
b
"a"
);
assert
!
(
a
.unwrap
()
.is_none
());
}
}
}
#[test]
#[test]
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment