Skip to content

Commit 0c2d57b

Browse files
committed
Add rocksdb_create_column_families_with_options to C API.
1 parent a34683b commit 0c2d57b

3 files changed

Lines changed: 67 additions & 0 deletions

File tree

db/c.cc

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1190,6 +1190,34 @@ rocksdb_column_family_handle_t** rocksdb_create_column_families(
11901190
return c_handles;
11911191
}
11921192

1193+
rocksdb_column_family_handle_t** rocksdb_create_column_families_with_options(
1194+
rocksdb_t* db, int num_column_families,
1195+
const char* const* column_family_names,
1196+
const rocksdb_options_t* const* column_family_options, size_t* lencfs,
1197+
char** errptr) {
1198+
std::vector<ColumnFamilyHandle*> handles;
1199+
1200+
std::vector<ColumnFamilyDescriptor> column_families;
1201+
column_families.reserve(num_column_families);
1202+
for (int i = 0; i < num_column_families; i++) {
1203+
column_families.emplace_back(
1204+
std::string(column_family_names[i]),
1205+
ColumnFamilyOptions(column_family_options[i]->rep));
1206+
}
1207+
SaveError(errptr, db->rep->CreateColumnFamilies(column_families, &handles));
1208+
1209+
*lencfs = handles.size();
1210+
rocksdb_column_family_handle_t** c_handles =
1211+
static_cast<rocksdb_column_family_handle_t**>(
1212+
malloc(sizeof(rocksdb_column_family_handle_t*) * handles.size()));
1213+
for (size_t i = 0; i != handles.size(); ++i) {
1214+
c_handles[i] = new rocksdb_column_family_handle_t;
1215+
c_handles[i]->rep = handles[i];
1216+
c_handles[i]->immortal = false;
1217+
}
1218+
return c_handles;
1219+
}
1220+
11931221
void rocksdb_create_column_families_destroy(
11941222
rocksdb_column_family_handle_t** list) {
11951223
free(list);

db/c_test.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1692,6 +1692,37 @@ int main(int argc, char** argv) {
16921692
CheckGet(db, roptions, "bar", "fake");
16931693
}
16941694

1695+
StartPhase("CF with option");
1696+
{
1697+
rocksdb_close(db);
1698+
rocksdb_destroy_db(options, dbname, &err);
1699+
CheckNoError(err);
1700+
1701+
rocksdb_options_t* db_options = rocksdb_options_create();
1702+
rocksdb_options_set_create_if_missing(db_options, 1);
1703+
db = rocksdb_open(db_options, dbname, &err);
1704+
CheckNoError(err);
1705+
1706+
char** list_const_cf_names = (char**)malloc(2 * sizeof(char*));
1707+
list_const_cf_names[0] = "cf_with_options";
1708+
list_const_cf_names[1] = "cf_with_option";
1709+
size_t cflen;
1710+
const rocksdb_options_t* create_cf_options[2] = {db_options, db_options};
1711+
rocksdb_column_family_handle_t** new_column_family_handle =
1712+
rocksdb_create_column_families_with_options(
1713+
db, 2, (const char* const*)list_const_cf_names, create_cf_options,
1714+
&cflen, &err);
1715+
free(list_const_cf_names);
1716+
CheckNoError(err);
1717+
assert(cflen == 2);
1718+
1719+
rocksdb_column_family_handle_destroy(new_column_family_handle[0]);
1720+
rocksdb_column_family_handle_destroy(new_column_family_handle[1]);
1721+
1722+
rocksdb_create_column_families_destroy(new_column_family_handle);
1723+
rocksdb_options_destroy(db_options);
1724+
}
1725+
16951726
StartPhase("columnfamilies");
16961727
{
16971728
rocksdb_close(db);
@@ -3802,6 +3833,7 @@ int main(int argc, char** argv) {
38023833
cfh1 = list_cfh[0];
38033834
cfh2 = list_cfh[1];
38043835
rocksdb_create_column_families_destroy(list_cfh);
3836+
38053837
txn = rocksdb_optimistictransaction_begin(otxn_db, woptions, otxn_options,
38063838
NULL);
38073839
rocksdb_transaction_put_cf(txn, cfh1, "key_cf1", 7, "val_cf1", 7, &err);

include/rocksdb/c.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,13 @@ rocksdb_create_column_families(rocksdb_t* db,
434434
const char* const* column_family_names,
435435
size_t* lencfs, char** errptr);
436436

437+
extern ROCKSDB_LIBRARY_API rocksdb_column_family_handle_t**
438+
rocksdb_create_column_families_with_options(
439+
rocksdb_t* db, int num_column_families,
440+
const char* const* column_family_names,
441+
const rocksdb_options_t* const* column_family_options, size_t* lencfs,
442+
char** errptr);
443+
437444
extern ROCKSDB_LIBRARY_API void rocksdb_create_column_families_destroy(
438445
rocksdb_column_family_handle_t** list);
439446

0 commit comments

Comments
 (0)