@@ -2338,6 +2338,48 @@ void rocksdb_batched_multi_get_cf_slice(
23382338 delete[] statuses;
23392339}
23402340
2341+ void rocksdb_batched_multi_get_multi_cf (rocksdb_t * db,
2342+ const rocksdb_readoptions_t * options,
2343+ size_t num_keys,
2344+ rocksdb_column_family_handle_t ** column_families,
2345+ const char * const * keys_list,
2346+ const size_t * keys_list_sizes,
2347+ rocksdb_pinnableslice_t ** values,
2348+ char ** errs,
2349+ const bool sorted_input) {
2350+ Status* statuses = new Status[num_keys];
2351+ Slice* key_slices = new Slice[num_keys];
2352+ PinnableSlice* value_slices = new PinnableSlice[num_keys];
2353+ ColumnFamilyHandle **cfs = new ColumnFamilyHandle*[num_keys];
2354+ for (size_t i = 0 ; i < num_keys; ++i) {
2355+ key_slices[i] = Slice (keys_list[i], keys_list_sizes[i]);
2356+ cfs[i] = column_families[i]->rep ;
2357+ }
2358+
2359+ db->rep ->MultiGet (options->rep , num_keys, cfs, key_slices,
2360+ value_slices, statuses, sorted_input);
2361+
2362+ for (size_t i = 0 ; i < num_keys; ++i) {
2363+ if (statuses[i].ok ()) {
2364+ values[i] = new (rocksdb_pinnableslice_t );
2365+ values[i]->rep = std::move (value_slices[i]);
2366+ errs[i] = nullptr ;
2367+ } else {
2368+ values[i] = nullptr ;
2369+ if (!statuses[i].IsNotFound ()) {
2370+ errs[i] = strdup (statuses[i].ToString ().c_str ());
2371+ } else {
2372+ errs[i] = nullptr ;
2373+ }
2374+ }
2375+ }
2376+
2377+ delete[] cfs;
2378+ delete[] value_slices;
2379+ delete[] key_slices;
2380+ delete[] statuses;
2381+ }
2382+
23412383unsigned char rocksdb_key_may_exist (rocksdb_t * db,
23422384 const rocksdb_readoptions_t * options,
23432385 const char * key, size_t key_len,
0 commit comments