Merge pull request #625 from rdallman/c-slice-parts-support

C: add support for WriteBatch SliceParts params
This commit is contained in:
Igor Canadi 2015-06-08 13:14:44 -04:00
commit 133130a4f5
3 changed files with 151 additions and 0 deletions

98
db/c.cc
View File

@ -65,6 +65,7 @@ using rocksdb::Range;
using rocksdb::ReadOptions; using rocksdb::ReadOptions;
using rocksdb::SequentialFile; using rocksdb::SequentialFile;
using rocksdb::Slice; using rocksdb::Slice;
using rocksdb::SliceParts;
using rocksdb::SliceTransform; using rocksdb::SliceTransform;
using rocksdb::Snapshot; using rocksdb::Snapshot;
using rocksdb::Status; using rocksdb::Status;
@ -1140,6 +1141,43 @@ void rocksdb_writebatch_put_cf(
b->rep.Put(column_family->rep, Slice(key, klen), Slice(val, vlen)); b->rep.Put(column_family->rep, Slice(key, klen), Slice(val, vlen));
} }
void rocksdb_writebatch_putv(
rocksdb_writebatch_t* b,
int num_keys, const char* const* keys_list,
const size_t* keys_list_sizes,
int num_values, const char* const* values_list,
const size_t* values_list_sizes) {
std::vector<Slice> key_slices(num_keys);
for (int i = 0; i < num_keys; i++) {
key_slices[i] = Slice(keys_list[i], keys_list_sizes[i]);
}
std::vector<Slice> value_slices(num_values);
for (int i = 0; i < num_values; i++) {
value_slices[i] = Slice(values_list[i], values_list_sizes[i]);
}
b->rep.Put(SliceParts(key_slices.data(), num_keys),
SliceParts(value_slices.data(), num_values));
}
void rocksdb_writebatch_putv_cf(
rocksdb_writebatch_t* b,
rocksdb_column_family_handle_t* column_family,
int num_keys, const char* const* keys_list,
const size_t* keys_list_sizes,
int num_values, const char* const* values_list,
const size_t* values_list_sizes) {
std::vector<Slice> key_slices(num_keys);
for (int i = 0; i < num_keys; i++) {
key_slices[i] = Slice(keys_list[i], keys_list_sizes[i]);
}
std::vector<Slice> value_slices(num_values);
for (int i = 0; i < num_values; i++) {
value_slices[i] = Slice(values_list[i], values_list_sizes[i]);
}
b->rep.Put(column_family->rep, SliceParts(key_slices.data(), num_keys),
SliceParts(value_slices.data(), num_values));
}
void rocksdb_writebatch_merge( void rocksdb_writebatch_merge(
rocksdb_writebatch_t* b, rocksdb_writebatch_t* b,
const char* key, size_t klen, const char* key, size_t klen,
@ -1155,6 +1193,43 @@ void rocksdb_writebatch_merge_cf(
b->rep.Merge(column_family->rep, Slice(key, klen), Slice(val, vlen)); b->rep.Merge(column_family->rep, Slice(key, klen), Slice(val, vlen));
} }
void rocksdb_writebatch_mergev(
rocksdb_writebatch_t* b,
int num_keys, const char* const* keys_list,
const size_t* keys_list_sizes,
int num_values, const char* const* values_list,
const size_t* values_list_sizes) {
std::vector<Slice> key_slices(num_keys);
for (int i = 0; i < num_keys; i++) {
key_slices[i] = Slice(keys_list[i], keys_list_sizes[i]);
}
std::vector<Slice> value_slices(num_values);
for (int i = 0; i < num_values; i++) {
value_slices[i] = Slice(values_list[i], values_list_sizes[i]);
}
b->rep.Merge(SliceParts(key_slices.data(), num_keys),
SliceParts(value_slices.data(), num_values));
}
void rocksdb_writebatch_mergev_cf(
rocksdb_writebatch_t* b,
rocksdb_column_family_handle_t* column_family,
int num_keys, const char* const* keys_list,
const size_t* keys_list_sizes,
int num_values, const char* const* values_list,
const size_t* values_list_sizes) {
std::vector<Slice> key_slices(num_keys);
for (int i = 0; i < num_keys; i++) {
key_slices[i] = Slice(keys_list[i], keys_list_sizes[i]);
}
std::vector<Slice> value_slices(num_values);
for (int i = 0; i < num_values; i++) {
value_slices[i] = Slice(values_list[i], values_list_sizes[i]);
}
b->rep.Merge(column_family->rep, SliceParts(key_slices.data(), num_keys),
SliceParts(value_slices.data(), num_values));
}
void rocksdb_writebatch_delete( void rocksdb_writebatch_delete(
rocksdb_writebatch_t* b, rocksdb_writebatch_t* b,
const char* key, size_t klen) { const char* key, size_t klen) {
@ -1168,6 +1243,29 @@ void rocksdb_writebatch_delete_cf(
b->rep.Delete(column_family->rep, Slice(key, klen)); b->rep.Delete(column_family->rep, Slice(key, klen));
} }
void rocksdb_writebatch_deletev(
rocksdb_writebatch_t* b,
int num_keys, const char* const* keys_list,
const size_t* keys_list_sizes) {
std::vector<Slice> key_slices(num_keys);
for (int i = 0; i < num_keys; i++) {
key_slices[i] = Slice(keys_list[i], keys_list_sizes[i]);
}
b->rep.Delete(SliceParts(key_slices.data(), num_keys));
}
void rocksdb_writebatch_deletev_cf(
rocksdb_writebatch_t* b,
rocksdb_column_family_handle_t* column_family,
int num_keys, const char* const* keys_list,
const size_t* keys_list_sizes) {
std::vector<Slice> key_slices(num_keys);
for (int i = 0; i < num_keys; i++) {
key_slices[i] = Slice(keys_list[i], keys_list_sizes[i]);
}
b->rep.Delete(column_family->rep, SliceParts(key_slices.data(), num_keys));
}
void rocksdb_writebatch_iterate( void rocksdb_writebatch_iterate(
rocksdb_writebatch_t* b, rocksdb_writebatch_t* b,
void* state, void* state,

View File

@ -465,6 +465,24 @@ int main(int argc, char** argv) {
rocksdb_writebatch_destroy(wb); rocksdb_writebatch_destroy(wb);
} }
StartPhase("writebatch_vectors");
{
rocksdb_writebatch_t* wb = rocksdb_writebatch_create();
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_write(db, woptions, wb, &err);
CheckNoError(err);
CheckGet(db, roptions, "zap", "xyz");
rocksdb_writebatch_delete(wb, "zap", 3);
rocksdb_write(db, woptions, wb, &err);
CheckNoError(err);
CheckGet(db, roptions, "zap", NULL);
rocksdb_writebatch_destroy(wb);
}
StartPhase("writebatch_rep"); StartPhase("writebatch_rep");
{ {
rocksdb_writebatch_t* wb1 = rocksdb_writebatch_create(); rocksdb_writebatch_t* wb1 = rocksdb_writebatch_create();

View File

@ -408,6 +408,19 @@ extern void rocksdb_writebatch_put_cf(
rocksdb_column_family_handle_t* column_family, rocksdb_column_family_handle_t* column_family,
const char* key, size_t klen, const char* key, size_t klen,
const char* val, size_t vlen); const char* val, size_t vlen);
extern void rocksdb_writebatch_putv(
rocksdb_writebatch_t* b,
int num_keys, const char* const* keys_list,
const size_t* keys_list_sizes,
int num_values, const char* const* values_list,
const size_t* values_list_sizes);
extern void rocksdb_writebatch_putv_cf(
rocksdb_writebatch_t* b,
rocksdb_column_family_handle_t* column_family,
int num_keys, const char* const* keys_list,
const size_t* keys_list_sizes,
int num_values, const char* const* values_list,
const size_t* values_list_sizes);
extern void rocksdb_writebatch_merge( extern void rocksdb_writebatch_merge(
rocksdb_writebatch_t*, rocksdb_writebatch_t*,
const char* key, size_t klen, const char* key, size_t klen,
@ -417,6 +430,19 @@ extern void rocksdb_writebatch_merge_cf(
rocksdb_column_family_handle_t* column_family, rocksdb_column_family_handle_t* column_family,
const char* key, size_t klen, const char* key, size_t klen,
const char* val, size_t vlen); const char* val, size_t vlen);
extern void rocksdb_writebatch_mergev(
rocksdb_writebatch_t* b,
int num_keys, const char* const* keys_list,
const size_t* keys_list_sizes,
int num_values, const char* const* values_list,
const size_t* values_list_sizes);
extern void rocksdb_writebatch_mergev_cf(
rocksdb_writebatch_t* b,
rocksdb_column_family_handle_t* column_family,
int num_keys, const char* const* keys_list,
const size_t* keys_list_sizes,
int num_values, const char* const* values_list,
const size_t* values_list_sizes);
extern void rocksdb_writebatch_delete( extern void rocksdb_writebatch_delete(
rocksdb_writebatch_t*, rocksdb_writebatch_t*,
const char* key, size_t klen); const char* key, size_t klen);
@ -424,6 +450,15 @@ extern void rocksdb_writebatch_delete_cf(
rocksdb_writebatch_t*, rocksdb_writebatch_t*,
rocksdb_column_family_handle_t* column_family, rocksdb_column_family_handle_t* column_family,
const char* key, size_t klen); const char* key, size_t klen);
void rocksdb_writebatch_deletev(
rocksdb_writebatch_t* b,
int num_keys, const char* const* keys_list,
const size_t* keys_list_sizes);
void rocksdb_writebatch_deletev_cf(
rocksdb_writebatch_t* b,
rocksdb_column_family_handle_t* column_family,
int num_keys, const char* const* keys_list,
const size_t* keys_list_sizes);
extern void rocksdb_writebatch_iterate( extern void rocksdb_writebatch_iterate(
rocksdb_writebatch_t*, rocksdb_writebatch_t*,
void* state, void* state,