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
41468f31
Commit
41468f31
authored
Sep 30, 2016
by
Jay
Committed by
GitHub
Sep 30, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add ffi_try to simplify error handle (#46)
parent
a09bd206
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
130 additions
and
183 deletions
+130
-183
lib.rs
librocksdb_sys/src/lib.rs
+16
-2
lib.rs
src/lib.rs
+1
-0
rocksdb.rs
src/rocksdb.rs
+88
-180
rocksdb_options.rs
src/rocksdb_options.rs
+25
-1
No files found.
librocksdb_sys/src/lib.rs
View file @
41468f31
...
@@ -86,6 +86,19 @@ pub fn error_message(ptr: *mut c_char) -> String {
...
@@ -86,6 +86,19 @@ pub fn error_message(ptr: *mut c_char) -> String {
s
s
}
}
#[macro_export]
macro_rules!
ffi_try
{
(
$func:ident
(
$
(
$arg:expr
),
*
))
=>
({
use
std
::
ptr
;
let
mut
err
=
ptr
::
null_mut
();
let
res
=
$crate
::
$func
(
$
(
$arg
),
*
,
&
mut
err
);
if
!
err
.is_null
()
{
return
Err
(
$crate
::
error_message
(
err
));
}
res
})
}
// TODO audit the use of boolean arguments, b/c I think they need to be u8
// TODO audit the use of boolean arguments, b/c I think they need to be u8
// instead...
// instead...
#[link(name
=
"rocksdb"
)]
#[link(name
=
"rocksdb"
)]
...
@@ -482,7 +495,8 @@ extern "C" {
...
@@ -482,7 +495,8 @@ extern "C" {
mod
test
{
mod
test
{
use
super
::
*
;
use
super
::
*
;
use
std
::
ffi
::{
CStr
,
CString
};
use
std
::
ffi
::{
CStr
,
CString
};
use
libc
::{
self
,
c_void
,
c_char
};
use
std
::
ptr
;
use
libc
::{
self
,
c_void
};
use
tempdir
::
TempDir
;
use
tempdir
::
TempDir
;
#[test]
#[test]
...
@@ -501,7 +515,7 @@ mod test {
...
@@ -501,7 +515,7 @@ mod test {
.unwrap
();
.unwrap
();
let
cpath_ptr
=
cpath
.as_ptr
();
let
cpath_ptr
=
cpath
.as_ptr
();
let
mut
err
=
0
as
*
mut
c_char
;
let
mut
err
=
ptr
::
null_mut
()
;
let
db
=
rocksdb_open
(
opts
,
cpath_ptr
,
&
mut
err
);
let
db
=
rocksdb_open
(
opts
,
cpath_ptr
,
&
mut
err
);
assert
!
(
err
.is_null
(),
error_message
(
err
));
assert
!
(
err
.is_null
(),
error_message
(
err
));
...
...
src/lib.rs
View file @
41468f31
...
@@ -17,6 +17,7 @@ extern crate libc;
...
@@ -17,6 +17,7 @@ extern crate libc;
#[cfg(test)]
#[cfg(test)]
extern
crate
tempdir
;
extern
crate
tempdir
;
#[macro_use]
pub
extern
crate
librocksdb_sys
;
pub
extern
crate
librocksdb_sys
;
pub
mod
rocksdb
;
pub
mod
rocksdb
;
...
...
src/rocksdb.rs
View file @
41468f31
...
@@ -14,19 +14,20 @@
...
@@ -14,19 +14,20 @@
//
//
use
libc
::{
self
,
c_int
,
c_void
,
size_t
,
c_char
};
use
libc
::{
self
,
c_int
,
c_void
,
size_t
};
use
rocksdb_ffi
::{
self
,
DBWriteBatch
,
DBCFHandle
,
error_message
,
DBInstance
};
use
rocksdb_ffi
::{
self
,
DBWriteBatch
,
DBCFHandle
,
DBInstance
};
use
rocksdb_options
::{
Options
,
ReadOptions
,
UnsafeSnap
,
WriteOptions
};
use
rocksdb_options
::{
Options
,
ReadOptions
,
UnsafeSnap
,
WriteOptions
,
FlushOptions
};
use
std
::
collections
::
BTreeMap
;
use
std
::
collections
::
BTreeMap
;
use
std
::
collections
::
btree_map
::
Entry
;
use
std
::
collections
::
btree_map
::
Entry
;
use
std
::
ffi
::{
CStr
,
CString
};
use
std
::
ffi
::{
CStr
,
CString
};
use
std
::
fs
;
use
std
::
fs
;
use
std
::
ops
::
Deref
;
use
std
::
ops
::
Deref
;
use
std
::
path
::
Path
;
use
std
::
path
::
Path
;
use
std
::
ptr
;
use
std
::
slice
;
use
std
::
slice
;
use
std
::
str
::
from_utf8
;
use
std
::
str
::
from_utf8
;
use
std
::
ptr
;
const
DEFAULT_COLUMN_FAMILY
:
&
'static
str
=
"default"
;
const
DEFAULT_COLUMN_FAMILY
:
&
'static
str
=
"default"
;
...
@@ -348,19 +349,14 @@ impl DB {
...
@@ -348,19 +349,14 @@ impl DB {
.map
(|
x
|
x
.inner
as
*
const
rocksdb_ffi
::
DBOptions
)
.map
(|
x
|
x
.inner
as
*
const
rocksdb_ffi
::
DBOptions
)
.collect
();
.collect
();
let
mut
err
=
0
as
*
mut
c_char
;
let
db
=
unsafe
{
let
db
=
unsafe
{
rocksdb_ffi
::
rocksdb_open_column_families
(
opts
.inner
,
ffi_try!
(
rocksdb_open_column_families
(
opts
.inner
,
cpath
.as_ptr
(),
cpath
.as_ptr
(),
cfs_v
.len
()
as
c_int
,
cfs_v
.len
()
as
c_int
,
cfnames
.as_ptr
(),
cfnames
.as_ptr
(),
cfopts
.as_ptr
(),
cfopts
.as_ptr
(),
cfhandles
.as_ptr
(),
cfhandles
.as_ptr
()))
&
mut
err
)
};
};
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
for
handle
in
&
cfhandles
{
for
handle
in
&
cfhandles
{
if
handle
.is_null
()
{
if
handle
.is_null
()
{
...
@@ -387,28 +383,16 @@ impl DB {
...
@@ -387,28 +383,16 @@ impl DB {
pub
fn
destroy
(
opts
:
&
Options
,
path
:
&
str
)
->
Result
<
(),
String
>
{
pub
fn
destroy
(
opts
:
&
Options
,
path
:
&
str
)
->
Result
<
(),
String
>
{
let
cpath
=
CString
::
new
(
path
.as_bytes
())
.unwrap
();
let
cpath
=
CString
::
new
(
path
.as_bytes
())
.unwrap
();
let
mut
err
=
0
as
*
mut
c_char
;
unsafe
{
unsafe
{
rocksdb_ffi
::
rocksdb_destroy_db
(
opts
.inner
,
ffi_try!
(
rocksdb_destroy_db
(
opts
.inner
,
cpath
.as_ptr
()));
cpath
.as_ptr
(),
&
mut
err
);
}
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
}
Ok
(())
Ok
(())
}
}
pub
fn
repair
(
opts
:
Options
,
path
:
&
str
)
->
Result
<
(),
String
>
{
pub
fn
repair
(
opts
:
Options
,
path
:
&
str
)
->
Result
<
(),
String
>
{
let
cpath
=
CString
::
new
(
path
.as_bytes
())
.unwrap
();
let
cpath
=
CString
::
new
(
path
.as_bytes
())
.unwrap
();
let
mut
err
=
0
as
*
mut
c_char
;
unsafe
{
unsafe
{
rocksdb_ffi
::
rocksdb_repair_db
(
opts
.inner
,
ffi_try!
(
rocksdb_repair_db
(
opts
.inner
,
cpath
.as_ptr
()));
cpath
.as_ptr
(),
&
mut
err
);
}
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
}
Ok
(())
Ok
(())
}
}
...
@@ -428,15 +412,9 @@ impl DB {
...
@@ -428,15 +412,9 @@ impl DB {
let
mut
cfs
:
Vec
<
String
>
=
vec!
[];
let
mut
cfs
:
Vec
<
String
>
=
vec!
[];
unsafe
{
unsafe
{
let
mut
lencf
:
size_t
=
0
;
let
mut
lencf
:
size_t
=
0
;
let
mut
err
=
0
as
*
mut
c_char
;
let
list
=
ffi_try!
(
rocksdb_list_column_families
(
opts
.inner
,
let
list
=
cpath
.as_ptr
(),
rocksdb_ffi
::
rocksdb_list_column_families
(
opts
.inner
,
&
mut
lencf
));
cpath
.as_ptr
(),
&
mut
lencf
,
&
mut
err
);
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
let
list_cfs
=
slice
::
from_raw_parts
(
list
,
lencf
);
let
list_cfs
=
slice
::
from_raw_parts
(
list
,
lencf
);
for
&
cf_name
in
list_cfs
{
for
&
cf_name
in
list_cfs
{
let
cf
=
let
cf
=
...
@@ -462,15 +440,8 @@ impl DB {
...
@@ -462,15 +440,8 @@ impl DB {
batch
:
WriteBatch
,
batch
:
WriteBatch
,
writeopts
:
&
WriteOptions
)
writeopts
:
&
WriteOptions
)
->
Result
<
(),
String
>
{
->
Result
<
(),
String
>
{
let
mut
err
=
0
as
*
mut
c_char
;
unsafe
{
unsafe
{
rocksdb_ffi
::
rocksdb_write
(
self
.inner
,
ffi_try!
(
rocksdb_write
(
self
.inner
,
writeopts
.inner
,
batch
.inner
));
writeopts
.inner
,
batch
.inner
,
&
mut
err
);
}
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
}
Ok
(())
Ok
(())
}
}
...
@@ -492,16 +463,11 @@ impl DB {
...
@@ -492,16 +463,11 @@ impl DB {
unsafe
{
unsafe
{
let
val_len
:
size_t
=
0
;
let
val_len
:
size_t
=
0
;
let
val_len_ptr
=
&
val_len
as
*
const
size_t
;
let
val_len_ptr
=
&
val_len
as
*
const
size_t
;
let
mut
err
=
0
as
*
mut
c_char
;
let
val
=
ffi_try!
(
rocksdb_get
(
self
.inner
,
let
val
=
rocksdb_ffi
::
rocksdb_get
(
self
.inner
,
readopts
.get_inner
(),
readopts
.get_inner
(),
key
.as_ptr
(),
key
.as_ptr
(),
key
.len
()
as
size_t
,
key
.len
()
as
size_t
,
val_len_ptr
));
val_len_ptr
,
&
mut
err
);
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
if
val
.is_null
()
{
if
val
.is_null
()
{
Ok
(
None
)
Ok
(
None
)
}
else
{
}
else
{
...
@@ -522,17 +488,12 @@ impl DB {
...
@@ -522,17 +488,12 @@ impl DB {
unsafe
{
unsafe
{
let
val_len
:
size_t
=
0
;
let
val_len
:
size_t
=
0
;
let
val_len_ptr
=
&
val_len
as
*
const
size_t
;
let
val_len_ptr
=
&
val_len
as
*
const
size_t
;
let
mut
err
=
0
as
*
mut
c_char
;
let
val
=
ffi_try!
(
rocksdb_get_cf
(
self
.inner
,
let
val
=
rocksdb_ffi
::
rocksdb_get_cf
(
self
.inner
,
readopts
.get_inner
(),
readopts
.get_inner
(),
cf
.inner
,
cf
.inner
,
key
.as_ptr
(),
key
.as_ptr
(),
key
.len
()
as
size_t
,
key
.len
()
as
size_t
,
val_len_ptr
));
val_len_ptr
,
&
mut
err
);
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
if
val
.is_null
()
{
if
val
.is_null
()
{
Ok
(
None
)
Ok
(
None
)
}
else
{
}
else
{
...
@@ -561,17 +522,10 @@ impl DB {
...
@@ -561,17 +522,10 @@ impl DB {
}
}
};
};
let
cname_ptr
=
cname
.as_ptr
();
let
cname_ptr
=
cname
.as_ptr
();
let
mut
err
=
0
as
*
mut
c_char
;
unsafe
{
unsafe
{
let
cf_handler
=
let
cf_handler
=
ffi_try!
(
rocksdb_create_column_family
(
self
.inner
,
rocksdb_ffi
::
rocksdb_create_column_family
(
self
.inner
,
opts
.inner
,
opts
.inner
,
cname_ptr
));
cname_ptr
,
&
mut
err
);
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
let
handle
=
CFHandle
{
inner
:
cf_handler
};
let
handle
=
CFHandle
{
inner
:
cf_handler
};
Ok
(
match
self
.cfs
.entry
(
name
.to_owned
())
{
Ok
(
match
self
.cfs
.entry
(
name
.to_owned
())
{
Entry
::
Occupied
(
mut
e
)
=>
{
Entry
::
Occupied
(
mut
e
)
=>
{
...
@@ -589,14 +543,8 @@ impl DB {
...
@@ -589,14 +543,8 @@ impl DB {
return
Err
(
format!
(
"Invalid column family: {}"
,
name
)
.clone
());
return
Err
(
format!
(
"Invalid column family: {}"
,
name
)
.clone
());
}
}
let
mut
err
=
0
as
*
mut
c_char
;
unsafe
{
unsafe
{
rocksdb_ffi
::
rocksdb_drop_column_family
(
self
.inner
,
ffi_try!
(
rocksdb_drop_column_family
(
self
.inner
,
cf
.unwrap
()
.inner
));
cf
.unwrap
()
.inner
,
&
mut
err
);
}
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
}
Ok
(())
Ok
(())
...
@@ -643,17 +591,12 @@ impl DB {
...
@@ -643,17 +591,12 @@ impl DB {
writeopts
:
&
WriteOptions
)
writeopts
:
&
WriteOptions
)
->
Result
<
(),
String
>
{
->
Result
<
(),
String
>
{
unsafe
{
unsafe
{
let
mut
err
=
0
as
*
mut
c_char
;
ffi_try!
(
rocksdb_put
(
self
.inner
,
rocksdb_ffi
::
rocksdb_put
(
self
.inner
,
writeopts
.inner
,
writeopts
.inner
,
key
.as_ptr
(),
key
.as_ptr
(),
key
.len
()
as
size_t
,
key
.len
()
as
size_t
,
value
.as_ptr
(),
value
.as_ptr
(),
value
.len
()
as
size_t
));
value
.len
()
as
size_t
,
&
mut
err
);
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
Ok
(())
Ok
(())
}
}
}
}
...
@@ -665,18 +608,13 @@ impl DB {
...
@@ -665,18 +608,13 @@ impl DB {
writeopts
:
&
WriteOptions
)
writeopts
:
&
WriteOptions
)
->
Result
<
(),
String
>
{
->
Result
<
(),
String
>
{
unsafe
{
unsafe
{
let
mut
err
=
0
as
*
mut
c_char
;
ffi_try!
(
rocksdb_put_cf
(
self
.inner
,
rocksdb_ffi
::
rocksdb_put_cf
(
self
.inner
,
writeopts
.inner
,
writeopts
.inner
,
cf
.inner
,
cf
.inner
,
key
.as_ptr
(),
key
.as_ptr
(),
key
.len
()
as
size_t
,
key
.len
()
as
size_t
,
value
.as_ptr
(),
value
.as_ptr
(),
value
.len
()
as
size_t
));
value
.len
()
as
size_t
,
&
mut
err
);
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
Ok
(())
Ok
(())
}
}
}
}
...
@@ -686,17 +624,12 @@ impl DB {
...
@@ -686,17 +624,12 @@ impl DB {
writeopts
:
&
WriteOptions
)
writeopts
:
&
WriteOptions
)
->
Result
<
(),
String
>
{
->
Result
<
(),
String
>
{
unsafe
{
unsafe
{
let
mut
err
=
0
as
*
mut
c_char
;
ffi_try!
(
rocksdb_merge
(
self
.inner
,
rocksdb_ffi
::
rocksdb_merge
(
self
.inner
,
writeopts
.inner
,
writeopts
.inner
,
key
.as_ptr
(),
key
.as_ptr
(),
key
.len
()
as
size_t
,
key
.len
()
as
size_t
,
value
.as_ptr
(),
value
.as_ptr
(),
value
.len
()
as
size_t
));
value
.len
()
as
size_t
,
&
mut
err
);
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
Ok
(())
Ok
(())
}
}
}
}
...
@@ -707,18 +640,13 @@ impl DB {
...
@@ -707,18 +640,13 @@ impl DB {
writeopts
:
&
WriteOptions
)
writeopts
:
&
WriteOptions
)
->
Result
<
(),
String
>
{
->
Result
<
(),
String
>
{
unsafe
{
unsafe
{
let
mut
err
=
0
as
*
mut
c_char
;
ffi_try!
(
rocksdb_merge_cf
(
self
.inner
,
rocksdb_ffi
::
rocksdb_merge_cf
(
self
.inner
,
writeopts
.inner
,
writeopts
.inner
,
cf
.inner
,
cf
.inner
,
key
.as_ptr
(),
key
.as_ptr
(),
key
.len
()
as
size_t
,
key
.len
()
as
size_t
,
value
.as_ptr
(),
value
.as_ptr
(),
value
.len
()
as
size_t
));
value
.len
()
as
size_t
,
&
mut
err
);
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
Ok
(())
Ok
(())
}
}
}
}
...
@@ -727,15 +655,10 @@ impl DB {
...
@@ -727,15 +655,10 @@ impl DB {
writeopts
:
&
WriteOptions
)
writeopts
:
&
WriteOptions
)
->
Result
<
(),
String
>
{
->
Result
<
(),
String
>
{
unsafe
{
unsafe
{
let
mut
err
=
0
as
*
mut
c_char
;
ffi_try!
(
rocksdb_delete
(
self
.inner
,
rocksdb_ffi
::
rocksdb_delete
(
self
.inner
,
writeopts
.inner
,
writeopts
.inner
,
key
.as_ptr
(),
key
.as_ptr
(),
key
.len
()
as
size_t
));
key
.len
()
as
size_t
,
&
mut
err
);
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
Ok
(())
Ok
(())
}
}
}
}
...
@@ -746,16 +669,11 @@ impl DB {
...
@@ -746,16 +669,11 @@ impl DB {
writeopts
:
&
WriteOptions
)
writeopts
:
&
WriteOptions
)
->
Result
<
(),
String
>
{
->
Result
<
(),
String
>
{
unsafe
{
unsafe
{
let
mut
err
=
0
as
*
mut
c_char
;
ffi_try!
(
rocksdb_delete_cf
(
self
.inner
,
rocksdb_ffi
::
rocksdb_delete_cf
(
self
.inner
,
writeopts
.inner
,
writeopts
.inner
,
cf
.inner
,
cf
.inner
,
key
.as_ptr
(),
key
.as_ptr
(),
key
.len
()
as
size_t
));
key
.len
()
as
size_t
,
&
mut
err
);
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
Ok
(())
Ok
(())
}
}
}
}
...
@@ -767,14 +685,9 @@ impl DB {
...
@@ -767,14 +685,9 @@ impl DB {
/// If sync, the flush will wait until the flush is done.
/// If sync, the flush will wait until the flush is done.
pub
fn
flush
(
&
self
,
sync
:
bool
)
->
Result
<
(),
String
>
{
pub
fn
flush
(
&
self
,
sync
:
bool
)
->
Result
<
(),
String
>
{
unsafe
{
unsafe
{
let
opts
=
rocksdb_ffi
::
rocksdb_flushoptions_create
();
let
mut
opts
=
FlushOptions
::
new
();
rocksdb_ffi
::
rocksdb_flushoptions_set_wait
(
opts
,
sync
);
opts
.set_wait
(
sync
);
let
mut
err
=
0
as
*
mut
c_char
;
ffi_try!
(
rocksdb_flush
(
self
.inner
,
opts
.inner
));
rocksdb_ffi
::
rocksdb_flush
(
self
.inner
,
opts
,
&
mut
err
);
rocksdb_ffi
::
rocksdb_flushoptions_destroy
(
opts
);
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
Ok
(())
Ok
(())
}
}
}
}
...
@@ -849,10 +762,14 @@ impl DB {
...
@@ -849,10 +762,14 @@ impl DB {
sizes
sizes
}
}
pub
fn
compact_range
(
&
self
,
start_key
:
Option
<&
[
u8
]
>
,
end_key
:
Option
<&
[
u8
]
>
)
{
pub
fn
compact_range
(
&
self
,
start_key
:
Option
<&
[
u8
]
>
,
end_key
:
Option
<&
[
u8
]
>
)
{
unsafe
{
unsafe
{
let
(
start
,
s_len
)
=
start_key
.map_or
((
ptr
::
null
(),
0
),
|
k
|
(
k
.as_ptr
(),
k
.len
()));
let
(
start
,
s_len
)
=
let
(
end
,
e_len
)
=
end_key
.map_or
((
ptr
::
null
(),
0
),
|
k
|
(
k
.as_ptr
(),
k
.len
()));
start_key
.map_or
((
ptr
::
null
(),
0
),
|
k
|
(
k
.as_ptr
(),
k
.len
()));
let
(
end
,
e_len
)
=
end_key
.map_or
((
ptr
::
null
(),
0
),
|
k
|
(
k
.as_ptr
(),
k
.len
()));
rocksdb_ffi
::
rocksdb_compact_range
(
self
.inner
,
rocksdb_ffi
::
rocksdb_compact_range
(
self
.inner
,
start
,
start
,
s_len
,
s_len
,
...
@@ -866,8 +783,10 @@ impl DB {
...
@@ -866,8 +783,10 @@ impl DB {
start_key
:
Option
<&
[
u8
]
>
,
start_key
:
Option
<&
[
u8
]
>
,
end_key
:
Option
<&
[
u8
]
>
)
{
end_key
:
Option
<&
[
u8
]
>
)
{
unsafe
{
unsafe
{
let
(
start
,
s_len
)
=
start_key
.map_or
((
ptr
::
null
(),
0
),
|
k
|
(
k
.as_ptr
(),
k
.len
()));
let
(
start
,
s_len
)
=
let
(
end
,
e_len
)
=
end_key
.map_or
((
ptr
::
null
(),
0
),
|
k
|
(
k
.as_ptr
(),
k
.len
()));
start_key
.map_or
((
ptr
::
null
(),
0
),
|
k
|
(
k
.as_ptr
(),
k
.len
()));
let
(
end
,
e_len
)
=
end_key
.map_or
((
ptr
::
null
(),
0
),
|
k
|
(
k
.as_ptr
(),
k
.len
()));
rocksdb_ffi
::
rocksdb_compact_range_cf
(
self
.inner
,
rocksdb_ffi
::
rocksdb_compact_range_cf
(
self
.inner
,
cf
.inner
,
cf
.inner
,
start
,
start
,
...
@@ -882,17 +801,11 @@ impl DB {
...
@@ -882,17 +801,11 @@ impl DB {
end_key
:
&
[
u8
])
end_key
:
&
[
u8
])
->
Result
<
(),
String
>
{
->
Result
<
(),
String
>
{
unsafe
{
unsafe
{
let
mut
err
=
0
as
*
mut
c_char
;
ffi_try!
(
rocksdb_delete_file_in_range
(
self
.inner
,
start_key
.as_ptr
(),
rocksdb_ffi
::
rocksdb_delete_file_in_range
(
self
.inner
,
start_key
.len
()
as
size_t
,
start_key
.as_ptr
(),
end_key
.as_ptr
(),
start_key
.len
()
as
size_t
,
end_key
.len
()
as
size_t
));
end_key
.as_ptr
(),
end_key
.len
()
as
size_t
,
&
mut
err
);
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
Ok
(())
Ok
(())
}
}
}
}
...
@@ -903,17 +816,12 @@ impl DB {
...
@@ -903,17 +816,12 @@ impl DB {
end_key
:
&
[
u8
])
end_key
:
&
[
u8
])
->
Result
<
(),
String
>
{
->
Result
<
(),
String
>
{
unsafe
{
unsafe
{
let
mut
err
=
0
as
*
mut
c_char
;
ffi_try!
(
rocksdb_delete_file_in_range_cf
(
self
.inner
,
rocksdb_ffi
::
rocksdb_delete_file_in_range_cf
(
self
.inner
,
cf
.inner
,
cf
.inner
,
start_key
.as_ptr
(),
start_key
.as_ptr
(),
start_key
.len
()
as
size_t
,
start_key
.len
()
as
size_t
,
end_key
.as_ptr
(),
end_key
.as_ptr
(),
end_key
.len
()
as
size_t
,
end_key
.len
()
as
size_t
));
&
mut
err
);
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
Ok
(())
Ok
(())
}
}
}
}
...
...
src/rocksdb_options.rs
View file @
41468f31
...
@@ -23,7 +23,7 @@ use merge_operator::MergeFn;
...
@@ -23,7 +23,7 @@ use merge_operator::MergeFn;
use
rocksdb_ffi
::{
self
,
DBOptions
,
DBWriteOptions
,
DBBlockBasedTableOptions
,
use
rocksdb_ffi
::{
self
,
DBOptions
,
DBWriteOptions
,
DBBlockBasedTableOptions
,
DBReadOptions
,
DBCompressionType
,
DBRecoveryMode
,
DBReadOptions
,
DBCompressionType
,
DBRecoveryMode
,
DBSnapshot
,
DBInstance
};
DBSnapshot
,
DBInstance
,
DBFlushOptions
};
use
std
::
ffi
::
CString
;
use
std
::
ffi
::
CString
;
use
std
::
mem
;
use
std
::
mem
;
...
@@ -565,6 +565,30 @@ impl Options {
...
@@ -565,6 +565,30 @@ impl Options {
}
}
}
}
pub
struct
FlushOptions
{
pub
inner
:
*
mut
DBFlushOptions
,
}
impl
FlushOptions
{
pub
fn
new
()
->
FlushOptions
{
unsafe
{
FlushOptions
{
inner
:
rocksdb_ffi
::
rocksdb_flushoptions_create
(),
}
}
}
pub
fn
set_wait
(
&
mut
self
,
wait
:
bool
)
{
unsafe
{
rocksdb_ffi
::
rocksdb_flushoptions_set_wait
(
self
.inner
,
wait
);}
}
}
impl
Drop
for
FlushOptions
{
fn
drop
(
&
mut
self
)
{
unsafe
{
rocksdb_ffi
::
rocksdb_flushoptions_destroy
(
self
.inner
);}
}
}
#[cfg(test)]
#[cfg(test)]
mod
tests
{
mod
tests
{
use
super
::
Options
;
use
super
::
Options
;
...
...
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