Unverified Commit 263b82e8 authored by zhangjinpeng1987's avatar zhangjinpeng1987 Committed by GitHub

pass WriteBatch ref to db.write (#283)

parent 273e27e7
...@@ -1654,6 +1654,11 @@ void crocksdb_writebatch_set_save_point(crocksdb_writebatch_t* b) { ...@@ -1654,6 +1654,11 @@ void crocksdb_writebatch_set_save_point(crocksdb_writebatch_t* b) {
b->rep.SetSavePoint(); b->rep.SetSavePoint();
} }
void crocksdb_writebatch_pop_save_point(crocksdb_writebatch_t* b,
char** errptr) {
SaveError(errptr, b->rep.PopSavePoint());
}
void crocksdb_writebatch_rollback_to_save_point(crocksdb_writebatch_t* b, char** errptr) { void crocksdb_writebatch_rollback_to_save_point(crocksdb_writebatch_t* b, char** errptr) {
SaveError(errptr, b->rep.RollbackToSavePoint()); SaveError(errptr, b->rep.RollbackToSavePoint());
} }
......
...@@ -594,6 +594,8 @@ extern C_ROCKSDB_LIBRARY_API void crocksdb_writebatch_iterate( ...@@ -594,6 +594,8 @@ extern C_ROCKSDB_LIBRARY_API void crocksdb_writebatch_iterate(
extern C_ROCKSDB_LIBRARY_API const char* crocksdb_writebatch_data( extern C_ROCKSDB_LIBRARY_API const char* crocksdb_writebatch_data(
crocksdb_writebatch_t*, size_t* size); crocksdb_writebatch_t*, size_t* size);
extern C_ROCKSDB_LIBRARY_API void crocksdb_writebatch_set_save_point(crocksdb_writebatch_t*); extern C_ROCKSDB_LIBRARY_API void crocksdb_writebatch_set_save_point(crocksdb_writebatch_t*);
extern C_ROCKSDB_LIBRARY_API void crocksdb_writebatch_pop_save_point(
crocksdb_writebatch_t*, char** errptr);
extern C_ROCKSDB_LIBRARY_API void crocksdb_writebatch_rollback_to_save_point(crocksdb_writebatch_t*, char** errptr); extern C_ROCKSDB_LIBRARY_API void crocksdb_writebatch_rollback_to_save_point(crocksdb_writebatch_t*, char** errptr);
/* Block based table options */ /* Block based table options */
......
...@@ -909,6 +909,7 @@ extern "C" { ...@@ -909,6 +909,7 @@ extern "C" {
); );
pub fn crocksdb_writebatch_data(batch: *mut DBWriteBatch, size: *mut size_t) -> *const u8; pub fn crocksdb_writebatch_data(batch: *mut DBWriteBatch, size: *mut size_t) -> *const u8;
pub fn crocksdb_writebatch_set_save_point(batch: *mut DBWriteBatch); pub fn crocksdb_writebatch_set_save_point(batch: *mut DBWriteBatch);
pub fn crocksdb_writebatch_pop_save_point(batch: *mut DBWriteBatch, err: *mut *mut c_char);
pub fn crocksdb_writebatch_rollback_to_save_point( pub fn crocksdb_writebatch_rollback_to_save_point(
batch: *mut DBWriteBatch, batch: *mut DBWriteBatch,
err: *mut *mut c_char, err: *mut *mut c_char,
......
...@@ -659,18 +659,18 @@ impl DB { ...@@ -659,18 +659,18 @@ impl DB {
&self.path &self.path
} }
pub fn write_opt(&self, batch: WriteBatch, writeopts: &WriteOptions) -> Result<(), String> { pub fn write_opt(&self, batch: &WriteBatch, writeopts: &WriteOptions) -> Result<(), String> {
unsafe { unsafe {
ffi_try!(crocksdb_write(self.inner, writeopts.inner, batch.inner)); ffi_try!(crocksdb_write(self.inner, writeopts.inner, batch.inner));
} }
Ok(()) Ok(())
} }
pub fn write(&self, batch: WriteBatch) -> Result<(), String> { pub fn write(&self, batch: &WriteBatch) -> Result<(), String> {
self.write_opt(batch, &WriteOptions::new()) self.write_opt(batch, &WriteOptions::new())
} }
pub fn write_without_wal(&self, batch: WriteBatch) -> Result<(), String> { pub fn write_without_wal(&self, batch: &WriteBatch) -> Result<(), String> {
let mut wo = WriteOptions::new(); let mut wo = WriteOptions::new();
wo.disable_wal(true); wo.disable_wal(true);
self.write_opt(batch, &wo) self.write_opt(batch, &wo)
...@@ -1686,6 +1686,13 @@ impl WriteBatch { ...@@ -1686,6 +1686,13 @@ impl WriteBatch {
} }
Ok(()) Ok(())
} }
pub fn pop_save_point(&mut self) -> Result<(), String> {
unsafe {
ffi_try!(crocksdb_writebatch_pop_save_point(self.inner));
}
Ok(())
}
} }
impl Drop for WriteBatch { impl Drop for WriteBatch {
...@@ -2389,7 +2396,7 @@ mod test { ...@@ -2389,7 +2396,7 @@ mod test {
assert_eq!(batch.count(), 1); assert_eq!(batch.count(), 1);
assert!(!batch.is_empty()); assert!(!batch.is_empty());
assert!(db.get(b"k1").unwrap().is_none()); assert!(db.get(b"k1").unwrap().is_none());
let p = db.write(batch); let p = db.write(&batch);
assert!(p.is_ok()); assert!(p.is_ok());
let r = db.get(b"k1"); let r = db.get(b"k1");
assert_eq!(r.unwrap().unwrap(), b"v1111"); assert_eq!(r.unwrap().unwrap(), b"v1111");
...@@ -2399,7 +2406,7 @@ mod test { ...@@ -2399,7 +2406,7 @@ mod test {
let _ = batch.delete(b"k1"); let _ = batch.delete(b"k1");
assert_eq!(batch.count(), 1); assert_eq!(batch.count(), 1);
assert!(!batch.is_empty()); assert!(!batch.is_empty());
let p = db.write(batch); let p = db.write(&batch);
assert!(p.is_ok()); assert!(p.is_ok());
assert!(db.get(b"k1").unwrap().is_none()); assert!(db.get(b"k1").unwrap().is_none());
...@@ -2412,6 +2419,8 @@ mod test { ...@@ -2412,6 +2419,8 @@ mod test {
// test save point // test save point
let mut batch = WriteBatch::new(); let mut batch = WriteBatch::new();
batch.set_save_point();
batch.pop_save_point().unwrap();
batch.put(b"k10", b"v10").unwrap(); batch.put(b"k10", b"v10").unwrap();
batch.set_save_point(); batch.set_save_point();
batch.put(b"k11", b"v11").unwrap(); batch.put(b"k11", b"v11").unwrap();
...@@ -2421,7 +2430,7 @@ mod test { ...@@ -2421,7 +2430,7 @@ mod test {
batch.put(b"k13", b"v13").unwrap(); batch.put(b"k13", b"v13").unwrap();
batch.rollback_to_save_point().unwrap(); batch.rollback_to_save_point().unwrap();
batch.rollback_to_save_point().unwrap(); batch.rollback_to_save_point().unwrap();
let p = db.write(batch); let p = db.write(&batch);
assert!(p.is_ok()); assert!(p.is_ok());
let r = db.get(b"k10"); let r = db.get(b"k10");
assert_eq!(r.unwrap().unwrap(), b"v10"); assert_eq!(r.unwrap().unwrap(), b"v10");
...@@ -2436,7 +2445,7 @@ mod test { ...@@ -2436,7 +2445,7 @@ mod test {
let batch = WriteBatch::with_capacity(1024); let batch = WriteBatch::with_capacity(1024);
batch.put(b"kc1", b"v1").unwrap(); batch.put(b"kc1", b"v1").unwrap();
batch.put(b"kc2", b"v2").unwrap(); batch.put(b"kc2", b"v2").unwrap();
let p = db.write(batch); let p = db.write(&batch);
assert!(p.is_ok()); assert!(p.is_ok());
let r = db.get(b"kc1"); let r = db.get(b"kc1");
assert!(r.unwrap().is_some()); assert!(r.unwrap().is_some());
......
...@@ -1341,14 +1341,14 @@ fn test_delete_range() { ...@@ -1341,14 +1341,14 @@ fn test_delete_range() {
prepare_data(); prepare_data();
let batch = WriteBatch::new(); let batch = WriteBatch::new();
batch.delete_range(b"a", b"c").unwrap(); batch.delete_range(b"a", b"c").unwrap();
assert!(db.write(batch).is_ok()); assert!(db.write(&batch).is_ok());
check_data(); check_data();
// Test `WriteBatch::delete_range_cf()` // Test `WriteBatch::delete_range_cf()`
prepare_data(); prepare_data();
let batch = WriteBatch::new(); let batch = WriteBatch::new();
batch.delete_range_cf(cf_handle, b"a", b"c").unwrap(); batch.delete_range_cf(cf_handle, b"a", b"c").unwrap();
assert!(db.write(batch).is_ok()); assert!(db.write(&batch).is_ok());
check_data(); check_data();
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment