Skip to content

Commit

Permalink
Add rocksdb_create_column_families_with_options to C API.
Browse files Browse the repository at this point in the history
  • Loading branch information
rhubner committed Aug 5, 2024
1 parent d12aaf2 commit 00a1c6a
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 0 deletions.
28 changes: 28 additions & 0 deletions db/c.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1145,6 +1145,34 @@ rocksdb_column_family_handle_t** rocksdb_create_column_families(
return c_handles;
}

rocksdb_column_family_handle_t** rocksdb_create_column_families_with_options(
rocksdb_t* db, int num_column_families,
const char* const* column_family_names,
const rocksdb_options_t* const* column_family_options, size_t* lencfs,
char** errptr) {
std::vector<ColumnFamilyHandle*> handles;

std::vector<ColumnFamilyDescriptor> column_families;
column_families.reserve(num_column_families);
for (int i = 0; i < num_column_families; i++) {
column_families.emplace_back(
std::string(column_family_names[i]),
ColumnFamilyOptions(column_family_options[i]->rep));
}
SaveError(errptr, db->rep->CreateColumnFamilies(column_families, &handles));

*lencfs = handles.size();
rocksdb_column_family_handle_t** c_handles =
static_cast<rocksdb_column_family_handle_t**>(
malloc(sizeof(rocksdb_column_family_handle_t*) * handles.size()));
for (size_t i = 0; i != handles.size(); ++i) {
c_handles[i] = new rocksdb_column_family_handle_t;
c_handles[i]->rep = handles[i];
c_handles[i]->immortal = false;
}
return c_handles;
}

void rocksdb_create_column_families_destroy(
rocksdb_column_family_handle_t** list) {
free(list);
Expand Down
32 changes: 32 additions & 0 deletions db/c_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -1623,6 +1623,37 @@ int main(int argc, char** argv) {
CheckGet(db, roptions, "bar", "fake");
}

StartPhase("CF with option");
{
rocksdb_close(db);
rocksdb_destroy_db(options, dbname, &err);
CheckNoError(err);

rocksdb_options_t* db_options = rocksdb_options_create();
rocksdb_options_set_create_if_missing(db_options, 1);
db = rocksdb_open(db_options, dbname, &err);
CheckNoError(err);

char** list_const_cf_names = (char**)malloc(2 * sizeof(char*));
list_const_cf_names[0] = "cf_with_options";
list_const_cf_names[1] = "cf_with_option";
size_t cflen;
const rocksdb_options_t* create_cf_options[2] = {db_options, db_options};
rocksdb_column_family_handle_t** new_column_family_handle =
rocksdb_create_column_families_with_options(
db, 2, (const char* const*)list_const_cf_names, create_cf_options,
&cflen, &err);
free(list_const_cf_names);
CheckNoError(err);
assert(cflen == 2);

rocksdb_column_family_handle_destroy(new_column_family_handle[0]);
rocksdb_column_family_handle_destroy(new_column_family_handle[1]);

rocksdb_create_column_families_destroy(new_column_family_handle);
rocksdb_options_destroy(db_options);
}

StartPhase("columnfamilies");
{
rocksdb_close(db);
Expand Down Expand Up @@ -3699,6 +3730,7 @@ int main(int argc, char** argv) {
cfh1 = list_cfh[0];
cfh2 = list_cfh[1];
rocksdb_create_column_families_destroy(list_cfh);

txn = rocksdb_optimistictransaction_begin(otxn_db, woptions, otxn_options,
NULL);
rocksdb_transaction_put_cf(txn, cfh1, "key_cf1", 7, "val_cf1", 7, &err);
Expand Down
7 changes: 7 additions & 0 deletions include/rocksdb/c.h
Original file line number Diff line number Diff line change
Expand Up @@ -423,6 +423,13 @@ rocksdb_create_column_families(rocksdb_t* db,
const char* const* column_family_names,
size_t* lencfs, char** errptr);

extern ROCKSDB_LIBRARY_API rocksdb_column_family_handle_t**
rocksdb_create_column_families_with_options(
rocksdb_t* db, int num_column_families,
const char* const* column_family_names,
const rocksdb_options_t* const* column_family_options, size_t* lencfs,
char** errptr);

extern ROCKSDB_LIBRARY_API void rocksdb_create_column_families_destroy(
rocksdb_column_family_handle_t** list);

Expand Down

0 comments on commit 00a1c6a

Please sign in to comment.