From 537da370da627897ed107aafb9528b5c11e5951e Mon Sep 17 00:00:00 2001 From: Jay Lee Date: Fri, 20 Jan 2017 13:15:09 -0800 Subject: [PATCH] c: allow set savepoint to writebatch Summary: Allow set SavePoint to WriteBatch in C ABI. Closes https://github.com/facebook/rocksdb/pull/1698 Differential Revision: D4378556 Pulled By: yiwu-arbug fbshipit-source-id: afca746 --- db/c.cc | 9 +++++++++ db/c_test.c | 17 +++++++++++++++++ include/rocksdb/c.h | 4 ++++ 3 files changed, 30 insertions(+) diff --git a/db/c.cc b/db/c.cc index a1f642d4e..fc4e27cb7 100644 --- a/db/c.cc +++ b/db/c.cc @@ -1336,6 +1336,15 @@ const char* rocksdb_writebatch_data(rocksdb_writebatch_t* b, size_t* size) { return b->rep.Data().c_str(); } +void rocksdb_writebatch_set_save_point(rocksdb_writebatch_t* b) { + b->rep.SetSavePoint(); +} + +void rocksdb_writebatch_rollback_to_save_point(rocksdb_writebatch_t* b, + char** errptr) { + SaveError(errptr, b->rep.RollbackToSavePoint()); +} + rocksdb_block_based_table_options_t* rocksdb_block_based_options_create() { return new rocksdb_block_based_table_options_t; diff --git a/db/c_test.c b/db/c_test.c index e0bf9e112..f30b52752 100644 --- a/db/c_test.c +++ b/db/c_test.c @@ -573,6 +573,23 @@ int main(int argc, char** argv) { rocksdb_writebatch_destroy(wb); } + StartPhase("writebatch_savepoint"); + { + rocksdb_writebatch_t* wb = rocksdb_writebatch_create(); + rocksdb_writebatch_set_save_point(wb); + const char* k_list[2] = {"z", "ap"}; + const size_t k_sizes[2] = {1, 2}; + const char* v_list[3] = {"x", "y", "z"}; + const size_t v_sizes[3] = {1, 1, 1}; + rocksdb_writebatch_putv(wb, 2, k_list, k_sizes, 3, v_list, v_sizes); + rocksdb_writebatch_rollback_to_save_point(wb, &err); + CheckNoError(err); + rocksdb_write(db, woptions, wb, &err); + CheckNoError(err); + CheckGet(db, roptions, "zap", NULL); + rocksdb_writebatch_destroy(wb); + } + StartPhase("writebatch_rep"); { rocksdb_writebatch_t* wb1 = rocksdb_writebatch_create(); diff --git a/include/rocksdb/c.h b/include/rocksdb/c.h index ae2496d02..a298928ff 100644 --- a/include/rocksdb/c.h +++ b/include/rocksdb/c.h @@ -448,6 +448,10 @@ extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_iterate( void (*deleted)(void*, const char* k, size_t klen)); extern ROCKSDB_LIBRARY_API const char* rocksdb_writebatch_data( rocksdb_writebatch_t*, size_t* size); +extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_set_save_point( + rocksdb_writebatch_t*); +extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_rollback_to_save_point( + rocksdb_writebatch_t*, char** errptr); /* Block based table options */ -- GitLab