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
37e70775
Commit
37e70775
authored
Sep 21, 2016
by
zhangjinpeng1987
Committed by
Jay
Sep 21, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add list_column_families api (#37)
parent
a73ebe88
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
69 additions
and
0 deletions
+69
-0
lib.rs
librocksdb_sys/src/lib.rs
+7
-0
rocksdb.rs
src/rocksdb.rs
+62
-0
No files found.
librocksdb_sys/src/lib.rs
View file @
37e70775
...
...
@@ -432,6 +432,13 @@ extern "C" {
column_family_handle
:
DBCFHandle
,
err
:
*
mut
*
const
i8
);
pub
fn
rocksdb_column_family_handle_destroy
(
column_family_handle
:
DBCFHandle
);
pub
fn
rocksdb_list_column_families
(
db
:
*
const
DBOptions
,
path
:
*
const
i8
,
lencf
:
*
mut
size_t
,
err
:
*
mut
*
const
i8
)
->
*
const
*
const
i8
;
pub
fn
rocksdb_list_column_families_destroy
(
list
:
*
mut
*
mut
i8
,
len
:
size_t
);
// Flush options
pub
fn
rocksdb_flushoptions_create
()
->
DBFlushOptions
;
...
...
src/rocksdb.rs
View file @
37e70775
...
...
@@ -407,6 +407,40 @@ impl DB {
Ok
(())
}
pub
fn
list_column_families
(
opts
:
&
Options
,
path
:
&
str
)
->
Result
<
Vec
<
String
>
,
String
>
{
let
cpath
=
match
CString
::
new
(
path
.as_bytes
())
{
Ok
(
c
)
=>
c
,
Err
(
_
)
=>
{
return
Err
(
"Failed to convert path to CString when list column families"
.to_owned
())
}
};
let
mut
cfs
:
Vec
<
String
>
=
vec!
[];
unsafe
{
let
mut
lencf
:
size_t
=
0
;
let
mut
err
:
*
const
i8
=
0
as
*
const
i8
;
let
list
=
rocksdb_ffi
::
rocksdb_list_column_families
(
opts
.inner
,
cpath
.as_ptr
()
as
*
const
_
,
&
mut
lencf
,
&
mut
err
);
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
let
list_cfs
=
slice
::
from_raw_parts
(
list
,
lencf
);
for
cf_name
in
list_cfs
{
let
len
=
libc
::
strlen
(
*
cf_name
);
let
cf
=
match
String
::
from_utf8
(
slice
::
from_raw_parts
(
*
cf_name
as
*
const
u8
,
len
)
.to_vec
())
{
Ok
(
s
)
=>
s
,
Err
(
_
)
=>
return
Err
(
"Invalid utf8 bytes"
.to_owned
()),
};
cfs
.push
(
cf
);
}
rocksdb_ffi
::
rocksdb_list_column_families_destroy
(
list
as
*
mut
*
mut
_
,
lencf
);
}
Ok
(
cfs
)
}
pub
fn
path
(
&
self
)
->
&
str
{
&
self
.path
}
...
...
@@ -1218,6 +1252,34 @@ mod test {
let
st2
=
db
.get_property_int
(
prop_name
)
.unwrap
();
assert
!
(
st2
>
st1
);
}
#[test]
fn
list_column_families_test
()
{
let
path
=
TempDir
::
new
(
"_rust_rocksdb_list_column_families_test"
)
.expect
(
""
);
let
mut
cfs
=
[
"default"
,
"cf1"
,
"cf2"
,
"cf3"
];
{
let
mut
cfs_opts
=
vec!
[];
for
_
in
0
..
cfs
.len
()
{
cfs_opts
.push
(
Options
::
new
());
}
let
cfs_ref_opts
:
Vec
<&
Options
>
=
cfs_opts
.iter
()
.collect
();
let
mut
opts
=
Options
::
new
();
opts
.create_if_missing
(
true
);
let
mut
db
=
DB
::
open
(
&
opts
,
path
.path
()
.to_str
()
.unwrap
())
.unwrap
();
for
(
&
cf
,
&
cf_opts
)
in
cfs
.iter
()
.zip
(
&
cfs_ref_opts
)
{
if
cf
==
"default"
{
continue
;
}
db
.create_cf
(
cf
,
cf_opts
)
.unwrap
();
}
}
let
opts_list_cfs
=
Options
::
new
();
let
mut
cfs_vec
=
DB
::
list_column_families
(
&
opts_list_cfs
,
path
.path
()
.to_str
()
.unwrap
())
.unwrap
();
cfs_vec
.sort
();
cfs
.sort
();
assert_eq!
(
cfs_vec
,
cfs
);
}
}
#[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