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
f2c6fc5a
Commit
f2c6fc5a
authored
Jul 12, 2015
by
David Greenberg
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Make writing to a DB a trait
parent
57f490d8
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
55 additions
and
35 deletions
+55
-35
lib.rs
src/lib.rs
+1
-0
main.rs
src/main.rs
+2
-2
merge_operator.rs
src/merge_operator.rs
+1
-1
rocksdb.rs
src/rocksdb.rs
+51
-32
No files found.
src/lib.rs
View file @
f2c6fc5a
...
@@ -34,6 +34,7 @@ pub use rocksdb::{
...
@@ -34,6 +34,7 @@ pub use rocksdb::{
RocksDB
,
RocksDB
,
RocksDBResult
,
RocksDBResult
,
RocksDBVector
,
RocksDBVector
,
Writable
,
};
};
pub
use
rocksdb_options
::{
pub
use
rocksdb_options
::{
RocksDBOptions
,
RocksDBOptions
,
...
...
src/main.rs
View file @
f2c6fc5a
...
@@ -18,7 +18,7 @@
...
@@ -18,7 +18,7 @@
extern
crate
rocksdb
;
extern
crate
rocksdb
;
extern
crate
test
;
extern
crate
test
;
use
rocksdb
::{
RocksDBOptions
,
RocksDB
,
MergeOperands
,
new_bloom_filter
};
use
rocksdb
::{
RocksDBOptions
,
RocksDB
,
MergeOperands
,
new_bloom_filter
,
Writable
};
use
rocksdb
::
RocksDBCompactionStyle
::
RocksDBUniversalCompaction
;
use
rocksdb
::
RocksDBCompactionStyle
::
RocksDBUniversalCompaction
;
fn
main
()
{
fn
main
()
{
...
@@ -88,7 +88,7 @@ mod tests {
...
@@ -88,7 +88,7 @@ mod tests {
use
test
::
Bencher
;
use
test
::
Bencher
;
use
std
::
thread
::
sleep_ms
;
use
std
::
thread
::
sleep_ms
;
use
rocksdb
::{
RocksDBOptions
,
RocksDB
,
MergeOperands
,
new_bloom_filter
};
use
rocksdb
::{
RocksDBOptions
,
RocksDB
,
MergeOperands
,
new_bloom_filter
,
Writable
};
use
rocksdb
::
RocksDBCompactionStyle
::
RocksDBUniversalCompaction
;
use
rocksdb
::
RocksDBCompactionStyle
::
RocksDBUniversalCompaction
;
fn
tuned_for_somebody_elses_disk
()
->
RocksDB
{
fn
tuned_for_somebody_elses_disk
()
->
RocksDB
{
...
...
src/merge_operator.rs
View file @
f2c6fc5a
...
@@ -21,7 +21,7 @@ use std::ptr;
...
@@ -21,7 +21,7 @@ use std::ptr;
use
std
::
slice
;
use
std
::
slice
;
use
rocksdb_options
::{
RocksDBOptions
};
use
rocksdb_options
::{
RocksDBOptions
};
use
rocksdb
::{
RocksDB
,
RocksDBResult
,
RocksDBVector
};
use
rocksdb
::{
RocksDB
,
RocksDBResult
,
RocksDBVector
,
Writable
};
pub
struct
MergeOperatorCallback
{
pub
struct
MergeOperatorCallback
{
pub
name
:
CString
,
pub
name
:
CString
,
...
...
src/rocksdb.rs
View file @
f2c6fc5a
...
@@ -32,6 +32,17 @@ pub struct RocksDB {
...
@@ -32,6 +32,17 @@ pub struct RocksDB {
inner
:
rocksdb_ffi
::
RocksDBInstance
,
inner
:
rocksdb_ffi
::
RocksDBInstance
,
}
}
pub
struct
WriteBatch
{
inner
:
rocksdb_ffi
::
RocksDBWriteBatch
}
// This is for the RocksDB and write batches to share the same API
pub
trait
Writable
{
fn
put
(
&
self
,
key
:
&
[
u8
],
value
:
&
[
u8
])
->
Result
<
(),
&
str
>
;
fn
merge
(
&
self
,
key
:
&
[
u8
],
value
:
&
[
u8
])
->
Result
<
(),
&
str
>
;
fn
delete
(
&
self
,
key
:
&
[
u8
])
->
Result
<
(),
&
str
>
;
}
fn
error_message
<
'a
>
(
ptr
:
*
const
i8
)
->
&
'a
str
{
fn
error_message
<
'a
>
(
ptr
:
*
const
i8
)
->
&
'a
str
{
unsafe
{
unsafe
{
return
from_utf8
(
CStr
::
from_ptr
(
ptr
)
.to_bytes
())
.unwrap
();
return
from_utf8
(
CStr
::
from_ptr
(
ptr
)
.to_bytes
())
.unwrap
();
...
@@ -117,33 +128,11 @@ impl RocksDB {
...
@@ -117,33 +128,11 @@ impl RocksDB {
}
}
}
}
pub
fn
put
(
&
self
,
key
:
&
[
u8
],
value
:
&
[
u8
])
->
Result
<
(),
&
str
>
{
////pub fn create_writebatch(self) -> WriteBatch {
unsafe
{
//// WriteBatch(unsafe {
let
writeopts
=
rocksdb_ffi
::
rocksdb_writeoptions_create
();
//// rocksdb_ffi::rocksdb_writebatch_create()
let
err
=
0
as
*
mut
i8
;
//// })
rocksdb_ffi
::
rocksdb_put
(
self
.inner
,
writeopts
,
key
.as_ptr
(),
////}
key
.len
()
as
size_t
,
value
.as_ptr
(),
value
.len
()
as
size_t
,
err
);
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
return
Ok
(())
}
}
pub
fn
merge
(
&
self
,
key
:
&
[
u8
],
value
:
&
[
u8
])
->
Result
<
(),
&
str
>
{
unsafe
{
let
writeopts
=
rocksdb_ffi
::
rocksdb_writeoptions_create
();
let
err
=
0
as
*
mut
i8
;
rocksdb_ffi
::
rocksdb_merge
(
self
.inner
,
writeopts
,
key
.as_ptr
(),
key
.len
()
as
size_t
,
value
.as_ptr
(),
value
.len
()
as
size_t
,
err
);
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
return
Ok
(())
}
}
pub
fn
get
(
&
self
,
key
:
&
[
u8
])
->
RocksDBResult
<
RocksDBVector
,
&
str
>
{
pub
fn
get
(
&
self
,
key
:
&
[
u8
])
->
RocksDBResult
<
RocksDBVector
,
&
str
>
{
unsafe
{
unsafe
{
...
@@ -172,12 +161,33 @@ impl RocksDB {
...
@@ -172,12 +161,33 @@ impl RocksDB {
}
}
}
}
pub
fn
delete
(
&
self
,
key
:
&
[
u8
])
->
Result
<
(),
&
str
>
{
pub
fn
close
(
&
self
)
{
unsafe
{
rocksdb_ffi
::
rocksdb_close
(
self
.inner
);
}
}
}
impl
Writable
for
RocksDB
{
fn
put
(
&
self
,
key
:
&
[
u8
],
value
:
&
[
u8
])
->
Result
<
(),
&
str
>
{
unsafe
{
let
writeopts
=
rocksdb_ffi
::
rocksdb_writeoptions_create
();
let
err
=
0
as
*
mut
i8
;
rocksdb_ffi
::
rocksdb_put
(
self
.inner
,
writeopts
,
key
.as_ptr
(),
key
.len
()
as
size_t
,
value
.as_ptr
(),
value
.len
()
as
size_t
,
err
);
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
return
Ok
(())
}
}
fn
merge
(
&
self
,
key
:
&
[
u8
],
value
:
&
[
u8
])
->
Result
<
(),
&
str
>
{
unsafe
{
unsafe
{
let
writeopts
=
rocksdb_ffi
::
rocksdb_writeoptions_create
();
let
writeopts
=
rocksdb_ffi
::
rocksdb_writeoptions_create
();
let
err
=
0
as
*
mut
i8
;
let
err
=
0
as
*
mut
i8
;
rocksdb_ffi
::
rocksdb_delete
(
self
.inner
,
writeopts
,
key
.as_ptr
(),
rocksdb_ffi
::
rocksdb_merge
(
self
.inner
,
writeopts
,
key
.as_ptr
(),
key
.len
()
as
size_t
,
err
);
key
.len
()
as
size_t
,
value
.as_ptr
(),
value
.len
()
as
size_t
,
err
);
if
!
err
.is_null
()
{
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
return
Err
(
error_message
(
err
));
}
}
...
@@ -185,8 +195,17 @@ impl RocksDB {
...
@@ -185,8 +195,17 @@ impl RocksDB {
}
}
}
}
pub
fn
close
(
&
self
)
{
fn
delete
(
&
self
,
key
:
&
[
u8
])
->
Result
<
(),
&
str
>
{
unsafe
{
rocksdb_ffi
::
rocksdb_close
(
self
.inner
);
}
unsafe
{
let
writeopts
=
rocksdb_ffi
::
rocksdb_writeoptions_create
();
let
err
=
0
as
*
mut
i8
;
rocksdb_ffi
::
rocksdb_delete
(
self
.inner
,
writeopts
,
key
.as_ptr
(),
key
.len
()
as
size_t
,
err
);
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
}
return
Ok
(())
}
}
}
}
}
...
...
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