1 //  Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.
2 //  This source code is licensed under both the GPLv2 (found in the
3 //  COPYING file in the root directory) and Apache 2.0 License
4 //  (found in the LICENSE.Apache file in the root directory).
5 
6 /* Copyright (c) 2011 The LevelDB Authors. All rights reserved.
7   Use of this source code is governed by a BSD-style license that can be
8   found in the LICENSE file. See the AUTHORS file for names of contributors.
9 
10   C bindings for rocksdb.  May be useful as a stable ABI that can be
11   used by programs that keep rocksdb in a shared library, or for
12   a JNI api.
13 
14   Does not support:
15   . getters for the option types
16   . custom comparators that implement key shortening
17   . capturing post-write-snapshot
18   . custom iter, db, env, cache implementations using just the C bindings
19 
20   Some conventions:
21 
22   (1) We expose just opaque struct pointers and functions to clients.
23   This allows us to change internal representations without having to
24   recompile clients.
25 
26   (2) For simplicity, there is no equivalent to the Slice type.  Instead,
27   the caller has to pass the pointer and length as separate
28   arguments.
29 
30   (3) Errors are represented by a null-terminated c string.  NULL
31   means no error.  All operations that can raise an error are passed
32   a "char** errptr" as the last argument.  One of the following must
33   be true on entry:
34      *errptr == NULL
35      *errptr points to a malloc()ed null-terminated error message
36   On success, a leveldb routine leaves *errptr unchanged.
37   On failure, leveldb frees the old value of *errptr and
38   set *errptr to a malloc()ed error message.
39 
40   (4) Bools have the type unsigned char (0 == false; rest == true)
41 
42   (5) All of the pointer arguments must be non-NULL.
43 */
44 
45 #pragma once
46 
47 #ifdef _WIN32
48 #ifdef ROCKSDB_DLL
49 #ifdef ROCKSDB_LIBRARY_EXPORTS
50 #define ROCKSDB_LIBRARY_API __declspec(dllexport)
51 #else
52 #define ROCKSDB_LIBRARY_API __declspec(dllimport)
53 #endif
54 #else
55 #define ROCKSDB_LIBRARY_API
56 #endif
57 #else
58 #define ROCKSDB_LIBRARY_API
59 #endif
60 
61 #ifdef __cplusplus
62 extern "C" {
63 #endif
64 
65 #include <stdarg.h>
66 #include <stddef.h>
67 #include <stdint.h>
68 
69 /* Exported types */
70 
71 typedef struct rocksdb_t                 rocksdb_t;
72 typedef struct rocksdb_backup_engine_t   rocksdb_backup_engine_t;
73 typedef struct rocksdb_backup_engine_info_t   rocksdb_backup_engine_info_t;
74 typedef struct rocksdb_restore_options_t rocksdb_restore_options_t;
75 typedef struct rocksdb_cache_t           rocksdb_cache_t;
76 typedef struct rocksdb_compactionfilter_t rocksdb_compactionfilter_t;
77 typedef struct rocksdb_compactionfiltercontext_t
78     rocksdb_compactionfiltercontext_t;
79 typedef struct rocksdb_compactionfilterfactory_t
80     rocksdb_compactionfilterfactory_t;
81 typedef struct rocksdb_comparator_t      rocksdb_comparator_t;
82 typedef struct rocksdb_dbpath_t          rocksdb_dbpath_t;
83 typedef struct rocksdb_env_t             rocksdb_env_t;
84 typedef struct rocksdb_fifo_compaction_options_t rocksdb_fifo_compaction_options_t;
85 typedef struct rocksdb_filelock_t        rocksdb_filelock_t;
86 typedef struct rocksdb_filterpolicy_t    rocksdb_filterpolicy_t;
87 typedef struct rocksdb_flushoptions_t    rocksdb_flushoptions_t;
88 typedef struct rocksdb_iterator_t        rocksdb_iterator_t;
89 typedef struct rocksdb_logger_t          rocksdb_logger_t;
90 typedef struct rocksdb_mergeoperator_t   rocksdb_mergeoperator_t;
91 typedef struct rocksdb_options_t         rocksdb_options_t;
92 typedef struct rocksdb_compactoptions_t rocksdb_compactoptions_t;
93 typedef struct rocksdb_block_based_table_options_t
94     rocksdb_block_based_table_options_t;
95 typedef struct rocksdb_cuckoo_table_options_t
96     rocksdb_cuckoo_table_options_t;
97 typedef struct rocksdb_randomfile_t      rocksdb_randomfile_t;
98 typedef struct rocksdb_readoptions_t     rocksdb_readoptions_t;
99 typedef struct rocksdb_seqfile_t         rocksdb_seqfile_t;
100 typedef struct rocksdb_slicetransform_t  rocksdb_slicetransform_t;
101 typedef struct rocksdb_snapshot_t        rocksdb_snapshot_t;
102 typedef struct rocksdb_writablefile_t    rocksdb_writablefile_t;
103 typedef struct rocksdb_writebatch_t      rocksdb_writebatch_t;
104 typedef struct rocksdb_writebatch_wi_t   rocksdb_writebatch_wi_t;
105 typedef struct rocksdb_writeoptions_t    rocksdb_writeoptions_t;
106 typedef struct rocksdb_universal_compaction_options_t rocksdb_universal_compaction_options_t;
107 typedef struct rocksdb_livefiles_t     rocksdb_livefiles_t;
108 typedef struct rocksdb_column_family_handle_t rocksdb_column_family_handle_t;
109 typedef struct rocksdb_envoptions_t      rocksdb_envoptions_t;
110 typedef struct rocksdb_ingestexternalfileoptions_t rocksdb_ingestexternalfileoptions_t;
111 typedef struct rocksdb_sstfilewriter_t   rocksdb_sstfilewriter_t;
112 typedef struct rocksdb_ratelimiter_t     rocksdb_ratelimiter_t;
113 typedef struct rocksdb_perfcontext_t     rocksdb_perfcontext_t;
114 typedef struct rocksdb_pinnableslice_t rocksdb_pinnableslice_t;
115 typedef struct rocksdb_transactiondb_options_t rocksdb_transactiondb_options_t;
116 typedef struct rocksdb_transactiondb_t rocksdb_transactiondb_t;
117 typedef struct rocksdb_transaction_options_t rocksdb_transaction_options_t;
118 typedef struct rocksdb_optimistictransactiondb_t
119     rocksdb_optimistictransactiondb_t;
120 typedef struct rocksdb_optimistictransaction_options_t
121     rocksdb_optimistictransaction_options_t;
122 typedef struct rocksdb_transaction_t rocksdb_transaction_t;
123 typedef struct rocksdb_checkpoint_t rocksdb_checkpoint_t;
124 typedef struct rocksdb_wal_iterator_t rocksdb_wal_iterator_t;
125 typedef struct rocksdb_wal_readoptions_t rocksdb_wal_readoptions_t;
126 typedef struct rocksdb_memory_consumers_t rocksdb_memory_consumers_t;
127 typedef struct rocksdb_memory_usage_t rocksdb_memory_usage_t;
128 
129 /* DB operations */
130 
131 extern ROCKSDB_LIBRARY_API rocksdb_t* rocksdb_open(
132     const rocksdb_options_t* options, const char* name, char** errptr);
133 
134 extern ROCKSDB_LIBRARY_API rocksdb_t* rocksdb_open_with_ttl(
135     const rocksdb_options_t* options, const char* name, int ttl, char** errptr);
136 
137 extern ROCKSDB_LIBRARY_API rocksdb_t* rocksdb_open_for_read_only(
138     const rocksdb_options_t* options, const char* name,
139     unsigned char error_if_log_file_exist, char** errptr);
140 
141 extern ROCKSDB_LIBRARY_API rocksdb_t* rocksdb_open_as_secondary(
142     const rocksdb_options_t* options, const char* name,
143     const char* secondary_path, char** errptr);
144 
145 extern ROCKSDB_LIBRARY_API rocksdb_backup_engine_t* rocksdb_backup_engine_open(
146     const rocksdb_options_t* options, const char* path, char** errptr);
147 
148 extern ROCKSDB_LIBRARY_API void rocksdb_backup_engine_create_new_backup(
149     rocksdb_backup_engine_t* be, rocksdb_t* db, char** errptr);
150 
151 extern ROCKSDB_LIBRARY_API void rocksdb_backup_engine_create_new_backup_flush(
152     rocksdb_backup_engine_t* be, rocksdb_t* db, unsigned char flush_before_backup,
153     char** errptr);
154 
155 extern ROCKSDB_LIBRARY_API void rocksdb_backup_engine_purge_old_backups(
156     rocksdb_backup_engine_t* be, uint32_t num_backups_to_keep, char** errptr);
157 
158 extern ROCKSDB_LIBRARY_API rocksdb_restore_options_t*
159 rocksdb_restore_options_create();
160 extern ROCKSDB_LIBRARY_API void rocksdb_restore_options_destroy(
161     rocksdb_restore_options_t* opt);
162 extern ROCKSDB_LIBRARY_API void rocksdb_restore_options_set_keep_log_files(
163     rocksdb_restore_options_t* opt, int v);
164 
165 extern ROCKSDB_LIBRARY_API void
166 rocksdb_backup_engine_verify_backup(rocksdb_backup_engine_t* be,
167     uint32_t backup_id, char** errptr);
168 
169 extern ROCKSDB_LIBRARY_API void
170 rocksdb_backup_engine_restore_db_from_latest_backup(
171     rocksdb_backup_engine_t* be, const char* db_dir, const char* wal_dir,
172     const rocksdb_restore_options_t* restore_options, char** errptr);
173 
174 extern ROCKSDB_LIBRARY_API const rocksdb_backup_engine_info_t*
175 rocksdb_backup_engine_get_backup_info(rocksdb_backup_engine_t* be);
176 
177 extern ROCKSDB_LIBRARY_API int rocksdb_backup_engine_info_count(
178     const rocksdb_backup_engine_info_t* info);
179 
180 extern ROCKSDB_LIBRARY_API int64_t
181 rocksdb_backup_engine_info_timestamp(const rocksdb_backup_engine_info_t* info,
182                                      int index);
183 
184 extern ROCKSDB_LIBRARY_API uint32_t
185 rocksdb_backup_engine_info_backup_id(const rocksdb_backup_engine_info_t* info,
186                                      int index);
187 
188 extern ROCKSDB_LIBRARY_API uint64_t
189 rocksdb_backup_engine_info_size(const rocksdb_backup_engine_info_t* info,
190                                 int index);
191 
192 extern ROCKSDB_LIBRARY_API uint32_t rocksdb_backup_engine_info_number_files(
193     const rocksdb_backup_engine_info_t* info, int index);
194 
195 extern ROCKSDB_LIBRARY_API void rocksdb_backup_engine_info_destroy(
196     const rocksdb_backup_engine_info_t* info);
197 
198 extern ROCKSDB_LIBRARY_API void rocksdb_backup_engine_close(
199     rocksdb_backup_engine_t* be);
200 
201 extern ROCKSDB_LIBRARY_API rocksdb_checkpoint_t*
202 rocksdb_checkpoint_object_create(rocksdb_t* db, char** errptr);
203 
204 extern ROCKSDB_LIBRARY_API void rocksdb_checkpoint_create(
205     rocksdb_checkpoint_t* checkpoint, const char* checkpoint_dir,
206     uint64_t log_size_for_flush, char** errptr);
207 
208 extern ROCKSDB_LIBRARY_API void rocksdb_checkpoint_object_destroy(
209     rocksdb_checkpoint_t* checkpoint);
210 
211 extern ROCKSDB_LIBRARY_API rocksdb_t* rocksdb_open_column_families(
212     const rocksdb_options_t* options, const char* name, int num_column_families,
213     const char* const* column_family_names,
214     const rocksdb_options_t* const* column_family_options,
215     rocksdb_column_family_handle_t** column_family_handles, char** errptr);
216 
217 extern ROCKSDB_LIBRARY_API rocksdb_t*
218 rocksdb_open_for_read_only_column_families(
219     const rocksdb_options_t* options, const char* name, int num_column_families,
220     const char* const* column_family_names,
221     const rocksdb_options_t* const* column_family_options,
222     rocksdb_column_family_handle_t** column_family_handles,
223     unsigned char error_if_log_file_exist, char** errptr);
224 
225 extern ROCKSDB_LIBRARY_API rocksdb_t* rocksdb_open_as_secondary_column_families(
226     const rocksdb_options_t* options, const char* name,
227     const char* secondary_path, int num_column_families,
228     const char* const* column_family_names,
229     const rocksdb_options_t* const* column_family_options,
230     rocksdb_column_family_handle_t** colummn_family_handles, char** errptr);
231 
232 extern ROCKSDB_LIBRARY_API char** rocksdb_list_column_families(
233     const rocksdb_options_t* options, const char* name, size_t* lencf,
234     char** errptr);
235 
236 extern ROCKSDB_LIBRARY_API void rocksdb_list_column_families_destroy(
237     char** list, size_t len);
238 
239 extern ROCKSDB_LIBRARY_API rocksdb_column_family_handle_t*
240 rocksdb_create_column_family(rocksdb_t* db,
241                              const rocksdb_options_t* column_family_options,
242                              const char* column_family_name, char** errptr);
243 
244 extern ROCKSDB_LIBRARY_API void rocksdb_drop_column_family(
245     rocksdb_t* db, rocksdb_column_family_handle_t* handle, char** errptr);
246 
247 extern ROCKSDB_LIBRARY_API void rocksdb_column_family_handle_destroy(
248     rocksdb_column_family_handle_t*);
249 
250 extern ROCKSDB_LIBRARY_API void rocksdb_close(rocksdb_t* db);
251 
252 extern ROCKSDB_LIBRARY_API void rocksdb_put(
253     rocksdb_t* db, const rocksdb_writeoptions_t* options, const char* key,
254     size_t keylen, const char* val, size_t vallen, char** errptr);
255 
256 extern ROCKSDB_LIBRARY_API void rocksdb_put_cf(
257     rocksdb_t* db, const rocksdb_writeoptions_t* options,
258     rocksdb_column_family_handle_t* column_family, const char* key,
259     size_t keylen, const char* val, size_t vallen, char** errptr);
260 
261 extern ROCKSDB_LIBRARY_API void rocksdb_delete(
262     rocksdb_t* db, const rocksdb_writeoptions_t* options, const char* key,
263     size_t keylen, char** errptr);
264 
265 extern ROCKSDB_LIBRARY_API void rocksdb_delete_cf(
266     rocksdb_t* db, const rocksdb_writeoptions_t* options,
267     rocksdb_column_family_handle_t* column_family, const char* key,
268     size_t keylen, char** errptr);
269 
270 extern ROCKSDB_LIBRARY_API void rocksdb_delete_range_cf(
271     rocksdb_t* db, const rocksdb_writeoptions_t* options,
272     rocksdb_column_family_handle_t* column_family, const char* start_key,
273     size_t start_key_len, const char* end_key, size_t end_key_len,
274     char** errptr);
275 
276 extern ROCKSDB_LIBRARY_API void rocksdb_merge(
277     rocksdb_t* db, const rocksdb_writeoptions_t* options, const char* key,
278     size_t keylen, const char* val, size_t vallen, char** errptr);
279 
280 extern ROCKSDB_LIBRARY_API void rocksdb_merge_cf(
281     rocksdb_t* db, const rocksdb_writeoptions_t* options,
282     rocksdb_column_family_handle_t* column_family, const char* key,
283     size_t keylen, const char* val, size_t vallen, char** errptr);
284 
285 extern ROCKSDB_LIBRARY_API void rocksdb_write(
286     rocksdb_t* db, const rocksdb_writeoptions_t* options,
287     rocksdb_writebatch_t* batch, char** errptr);
288 
289 /* Returns NULL if not found.  A malloc()ed array otherwise.
290    Stores the length of the array in *vallen. */
291 extern ROCKSDB_LIBRARY_API char* rocksdb_get(
292     rocksdb_t* db, const rocksdb_readoptions_t* options, const char* key,
293     size_t keylen, size_t* vallen, char** errptr);
294 
295 extern ROCKSDB_LIBRARY_API char* rocksdb_get_cf(
296     rocksdb_t* db, const rocksdb_readoptions_t* options,
297     rocksdb_column_family_handle_t* column_family, const char* key,
298     size_t keylen, size_t* vallen, char** errptr);
299 
300 // if values_list[i] == NULL and errs[i] == NULL,
301 // then we got status.IsNotFound(), which we will not return.
302 // all errors except status status.ok() and status.IsNotFound() are returned.
303 //
304 // errs, values_list and values_list_sizes must be num_keys in length,
305 // allocated by the caller.
306 // errs is a list of strings as opposed to the conventional one error,
307 // where errs[i] is the status for retrieval of keys_list[i].
308 // each non-NULL errs entry is a malloc()ed, null terminated string.
309 // each non-NULL values_list entry is a malloc()ed array, with
310 // the length for each stored in values_list_sizes[i].
311 extern ROCKSDB_LIBRARY_API void rocksdb_multi_get(
312     rocksdb_t* db, const rocksdb_readoptions_t* options, size_t num_keys,
313     const char* const* keys_list, const size_t* keys_list_sizes,
314     char** values_list, size_t* values_list_sizes, char** errs);
315 
316 extern ROCKSDB_LIBRARY_API void rocksdb_multi_get_cf(
317     rocksdb_t* db, const rocksdb_readoptions_t* options,
318     const rocksdb_column_family_handle_t* const* column_families,
319     size_t num_keys, const char* const* keys_list,
320     const size_t* keys_list_sizes, char** values_list,
321     size_t* values_list_sizes, char** errs);
322 
323 extern ROCKSDB_LIBRARY_API rocksdb_iterator_t* rocksdb_create_iterator(
324     rocksdb_t* db, const rocksdb_readoptions_t* options);
325 
326 extern ROCKSDB_LIBRARY_API rocksdb_wal_iterator_t* rocksdb_get_updates_since(
327         rocksdb_t* db, uint64_t seq_number,
328         const rocksdb_wal_readoptions_t* options,
329         char** errptr
330 );
331 
332 extern ROCKSDB_LIBRARY_API rocksdb_iterator_t* rocksdb_create_iterator_cf(
333     rocksdb_t* db, const rocksdb_readoptions_t* options,
334     rocksdb_column_family_handle_t* column_family);
335 
336 extern ROCKSDB_LIBRARY_API void rocksdb_create_iterators(
337     rocksdb_t *db, rocksdb_readoptions_t* opts,
338     rocksdb_column_family_handle_t** column_families,
339     rocksdb_iterator_t** iterators, size_t size, char** errptr);
340 
341 extern ROCKSDB_LIBRARY_API const rocksdb_snapshot_t* rocksdb_create_snapshot(
342     rocksdb_t* db);
343 
344 extern ROCKSDB_LIBRARY_API void rocksdb_release_snapshot(
345     rocksdb_t* db, const rocksdb_snapshot_t* snapshot);
346 
347 /* Returns NULL if property name is unknown.
348    Else returns a pointer to a malloc()-ed null-terminated value. */
349 extern ROCKSDB_LIBRARY_API char* rocksdb_property_value(rocksdb_t* db,
350                                                         const char* propname);
351 /* returns 0 on success, -1 otherwise */
352 int rocksdb_property_int(
353     rocksdb_t* db,
354     const char* propname, uint64_t *out_val);
355 
356 /* returns 0 on success, -1 otherwise */
357 int rocksdb_property_int_cf(
358     rocksdb_t* db, rocksdb_column_family_handle_t* column_family,
359     const char* propname, uint64_t *out_val);
360 
361 extern ROCKSDB_LIBRARY_API char* rocksdb_property_value_cf(
362     rocksdb_t* db, rocksdb_column_family_handle_t* column_family,
363     const char* propname);
364 
365 extern ROCKSDB_LIBRARY_API void rocksdb_approximate_sizes(
366     rocksdb_t* db, int num_ranges, const char* const* range_start_key,
367     const size_t* range_start_key_len, const char* const* range_limit_key,
368     const size_t* range_limit_key_len, uint64_t* sizes);
369 
370 extern ROCKSDB_LIBRARY_API void rocksdb_approximate_sizes_cf(
371     rocksdb_t* db, rocksdb_column_family_handle_t* column_family,
372     int num_ranges, const char* const* range_start_key,
373     const size_t* range_start_key_len, const char* const* range_limit_key,
374     const size_t* range_limit_key_len, uint64_t* sizes);
375 
376 extern ROCKSDB_LIBRARY_API void rocksdb_compact_range(rocksdb_t* db,
377                                                       const char* start_key,
378                                                       size_t start_key_len,
379                                                       const char* limit_key,
380                                                       size_t limit_key_len);
381 
382 extern ROCKSDB_LIBRARY_API void rocksdb_compact_range_cf(
383     rocksdb_t* db, rocksdb_column_family_handle_t* column_family,
384     const char* start_key, size_t start_key_len, const char* limit_key,
385     size_t limit_key_len);
386 
387 extern ROCKSDB_LIBRARY_API void rocksdb_compact_range_opt(
388     rocksdb_t* db, rocksdb_compactoptions_t* opt, const char* start_key,
389     size_t start_key_len, const char* limit_key, size_t limit_key_len);
390 
391 extern ROCKSDB_LIBRARY_API void rocksdb_compact_range_cf_opt(
392     rocksdb_t* db, rocksdb_column_family_handle_t* column_family,
393     rocksdb_compactoptions_t* opt, const char* start_key, size_t start_key_len,
394     const char* limit_key, size_t limit_key_len);
395 
396 extern ROCKSDB_LIBRARY_API void rocksdb_delete_file(rocksdb_t* db,
397                                                     const char* name);
398 
399 extern ROCKSDB_LIBRARY_API const rocksdb_livefiles_t* rocksdb_livefiles(
400     rocksdb_t* db);
401 
402 extern ROCKSDB_LIBRARY_API void rocksdb_flush(
403     rocksdb_t* db, const rocksdb_flushoptions_t* options, char** errptr);
404 
405 extern ROCKSDB_LIBRARY_API void rocksdb_flush_cf(
406     rocksdb_t* db, const rocksdb_flushoptions_t* options,
407     rocksdb_column_family_handle_t* column_family, char** errptr);
408 
409 extern ROCKSDB_LIBRARY_API void rocksdb_disable_file_deletions(rocksdb_t* db,
410                                                                char** errptr);
411 
412 extern ROCKSDB_LIBRARY_API void rocksdb_enable_file_deletions(
413     rocksdb_t* db, unsigned char force, char** errptr);
414 
415 /* Management operations */
416 
417 extern ROCKSDB_LIBRARY_API void rocksdb_destroy_db(
418     const rocksdb_options_t* options, const char* name, char** errptr);
419 
420 extern ROCKSDB_LIBRARY_API void rocksdb_repair_db(
421     const rocksdb_options_t* options, const char* name, char** errptr);
422 
423 /* Iterator */
424 
425 extern ROCKSDB_LIBRARY_API void rocksdb_iter_destroy(rocksdb_iterator_t*);
426 extern ROCKSDB_LIBRARY_API unsigned char rocksdb_iter_valid(
427     const rocksdb_iterator_t*);
428 extern ROCKSDB_LIBRARY_API void rocksdb_iter_seek_to_first(rocksdb_iterator_t*);
429 extern ROCKSDB_LIBRARY_API void rocksdb_iter_seek_to_last(rocksdb_iterator_t*);
430 extern ROCKSDB_LIBRARY_API void rocksdb_iter_seek(rocksdb_iterator_t*,
431                                                   const char* k, size_t klen);
432 extern ROCKSDB_LIBRARY_API void rocksdb_iter_seek_for_prev(rocksdb_iterator_t*,
433                                                            const char* k,
434                                                            size_t klen);
435 extern ROCKSDB_LIBRARY_API void rocksdb_iter_next(rocksdb_iterator_t*);
436 extern ROCKSDB_LIBRARY_API void rocksdb_iter_prev(rocksdb_iterator_t*);
437 extern ROCKSDB_LIBRARY_API const char* rocksdb_iter_key(
438     const rocksdb_iterator_t*, size_t* klen);
439 extern ROCKSDB_LIBRARY_API const char* rocksdb_iter_value(
440     const rocksdb_iterator_t*, size_t* vlen);
441 extern ROCKSDB_LIBRARY_API void rocksdb_iter_get_error(
442     const rocksdb_iterator_t*, char** errptr);
443 
444 extern ROCKSDB_LIBRARY_API void rocksdb_wal_iter_next(rocksdb_wal_iterator_t* iter);
445 extern ROCKSDB_LIBRARY_API unsigned char rocksdb_wal_iter_valid(
446         const rocksdb_wal_iterator_t*);
447 extern ROCKSDB_LIBRARY_API void rocksdb_wal_iter_status (const rocksdb_wal_iterator_t* iter, char** errptr) ;
448 extern ROCKSDB_LIBRARY_API rocksdb_writebatch_t* rocksdb_wal_iter_get_batch (const rocksdb_wal_iterator_t* iter, uint64_t* seq) ;
449 extern ROCKSDB_LIBRARY_API uint64_t rocksdb_get_latest_sequence_number (rocksdb_t *db);
450 extern ROCKSDB_LIBRARY_API void rocksdb_wal_iter_destroy (const rocksdb_wal_iterator_t* iter) ;
451 
452 /* Write batch */
453 
454 extern ROCKSDB_LIBRARY_API rocksdb_writebatch_t* rocksdb_writebatch_create();
455 extern ROCKSDB_LIBRARY_API rocksdb_writebatch_t* rocksdb_writebatch_create_from(
456     const char* rep, size_t size);
457 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_destroy(
458     rocksdb_writebatch_t*);
459 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_clear(rocksdb_writebatch_t*);
460 extern ROCKSDB_LIBRARY_API int rocksdb_writebatch_count(rocksdb_writebatch_t*);
461 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_put(rocksdb_writebatch_t*,
462                                                        const char* key,
463                                                        size_t klen,
464                                                        const char* val,
465                                                        size_t vlen);
466 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_put_cf(
467     rocksdb_writebatch_t*, rocksdb_column_family_handle_t* column_family,
468     const char* key, size_t klen, const char* val, size_t vlen);
469 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_putv(
470     rocksdb_writebatch_t* b, int num_keys, const char* const* keys_list,
471     const size_t* keys_list_sizes, int num_values,
472     const char* const* values_list, const size_t* values_list_sizes);
473 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_putv_cf(
474     rocksdb_writebatch_t* b, rocksdb_column_family_handle_t* column_family,
475     int num_keys, const char* const* keys_list, const size_t* keys_list_sizes,
476     int num_values, const char* const* values_list,
477     const size_t* values_list_sizes);
478 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_merge(rocksdb_writebatch_t*,
479                                                          const char* key,
480                                                          size_t klen,
481                                                          const char* val,
482                                                          size_t vlen);
483 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_merge_cf(
484     rocksdb_writebatch_t*, rocksdb_column_family_handle_t* column_family,
485     const char* key, size_t klen, const char* val, size_t vlen);
486 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_mergev(
487     rocksdb_writebatch_t* b, int num_keys, const char* const* keys_list,
488     const size_t* keys_list_sizes, int num_values,
489     const char* const* values_list, const size_t* values_list_sizes);
490 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_mergev_cf(
491     rocksdb_writebatch_t* b, rocksdb_column_family_handle_t* column_family,
492     int num_keys, const char* const* keys_list, const size_t* keys_list_sizes,
493     int num_values, const char* const* values_list,
494     const size_t* values_list_sizes);
495 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_delete(rocksdb_writebatch_t*,
496                                                           const char* key,
497                                                           size_t klen);
498 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_delete_cf(
499     rocksdb_writebatch_t*, rocksdb_column_family_handle_t* column_family,
500     const char* key, size_t klen);
501 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_deletev(
502     rocksdb_writebatch_t* b, int num_keys, const char* const* keys_list,
503     const size_t* keys_list_sizes);
504 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_deletev_cf(
505     rocksdb_writebatch_t* b, rocksdb_column_family_handle_t* column_family,
506     int num_keys, const char* const* keys_list, const size_t* keys_list_sizes);
507 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_delete_range(
508     rocksdb_writebatch_t* b, const char* start_key, size_t start_key_len,
509     const char* end_key, size_t end_key_len);
510 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_delete_range_cf(
511     rocksdb_writebatch_t* b, rocksdb_column_family_handle_t* column_family,
512     const char* start_key, size_t start_key_len, const char* end_key,
513     size_t end_key_len);
514 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_delete_rangev(
515     rocksdb_writebatch_t* b, int num_keys, const char* const* start_keys_list,
516     const size_t* start_keys_list_sizes, const char* const* end_keys_list,
517     const size_t* end_keys_list_sizes);
518 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_delete_rangev_cf(
519     rocksdb_writebatch_t* b, rocksdb_column_family_handle_t* column_family,
520     int num_keys, const char* const* start_keys_list,
521     const size_t* start_keys_list_sizes, const char* const* end_keys_list,
522     const size_t* end_keys_list_sizes);
523 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_put_log_data(
524     rocksdb_writebatch_t*, const char* blob, size_t len);
525 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_iterate(
526     rocksdb_writebatch_t*, void* state,
527     void (*put)(void*, const char* k, size_t klen, const char* v, size_t vlen),
528     void (*deleted)(void*, const char* k, size_t klen));
529 extern ROCKSDB_LIBRARY_API const char* rocksdb_writebatch_data(
530     rocksdb_writebatch_t*, size_t* size);
531 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_set_save_point(
532     rocksdb_writebatch_t*);
533 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_rollback_to_save_point(
534     rocksdb_writebatch_t*, char** errptr);
535 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_pop_save_point(
536     rocksdb_writebatch_t*, char** errptr);
537 
538 /* Write batch with index */
539 
540 extern ROCKSDB_LIBRARY_API rocksdb_writebatch_wi_t* rocksdb_writebatch_wi_create(
541                                                        size_t reserved_bytes,
542                                                        unsigned char overwrite_keys);
543 extern ROCKSDB_LIBRARY_API rocksdb_writebatch_wi_t* rocksdb_writebatch_wi_create_from(
544     const char* rep, size_t size);
545 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_destroy(
546     rocksdb_writebatch_wi_t*);
547 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_clear(rocksdb_writebatch_wi_t*);
548 extern ROCKSDB_LIBRARY_API int rocksdb_writebatch_wi_count(rocksdb_writebatch_wi_t* b);
549 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_put(rocksdb_writebatch_wi_t*,
550                                                        const char* key,
551                                                        size_t klen,
552                                                        const char* val,
553                                                        size_t vlen);
554 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_put_cf(
555     rocksdb_writebatch_wi_t*, rocksdb_column_family_handle_t* column_family,
556     const char* key, size_t klen, const char* val, size_t vlen);
557 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_putv(
558     rocksdb_writebatch_wi_t* b, int num_keys, const char* const* keys_list,
559     const size_t* keys_list_sizes, int num_values,
560     const char* const* values_list, const size_t* values_list_sizes);
561 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_putv_cf(
562     rocksdb_writebatch_wi_t* b, rocksdb_column_family_handle_t* column_family,
563     int num_keys, const char* const* keys_list, const size_t* keys_list_sizes,
564     int num_values, const char* const* values_list,
565     const size_t* values_list_sizes);
566 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_merge(rocksdb_writebatch_wi_t*,
567                                                          const char* key,
568                                                          size_t klen,
569                                                          const char* val,
570                                                          size_t vlen);
571 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_merge_cf(
572     rocksdb_writebatch_wi_t*, rocksdb_column_family_handle_t* column_family,
573     const char* key, size_t klen, const char* val, size_t vlen);
574 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_mergev(
575     rocksdb_writebatch_wi_t* b, int num_keys, const char* const* keys_list,
576     const size_t* keys_list_sizes, int num_values,
577     const char* const* values_list, const size_t* values_list_sizes);
578 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_mergev_cf(
579     rocksdb_writebatch_wi_t* b, rocksdb_column_family_handle_t* column_family,
580     int num_keys, const char* const* keys_list, const size_t* keys_list_sizes,
581     int num_values, const char* const* values_list,
582     const size_t* values_list_sizes);
583 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_delete(rocksdb_writebatch_wi_t*,
584                                                           const char* key,
585                                                           size_t klen);
586 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_delete_cf(
587     rocksdb_writebatch_wi_t*, rocksdb_column_family_handle_t* column_family,
588     const char* key, size_t klen);
589 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_deletev(
590     rocksdb_writebatch_wi_t* b, int num_keys, const char* const* keys_list,
591     const size_t* keys_list_sizes);
592 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_deletev_cf(
593     rocksdb_writebatch_wi_t* b, rocksdb_column_family_handle_t* column_family,
594     int num_keys, const char* const* keys_list, const size_t* keys_list_sizes);
595 // DO NOT USE - rocksdb_writebatch_wi_delete_range is not yet supported
596 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_delete_range(
597     rocksdb_writebatch_wi_t* b, const char* start_key, size_t start_key_len,
598     const char* end_key, size_t end_key_len);
599 // DO NOT USE - rocksdb_writebatch_wi_delete_range_cf is not yet supported
600 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_delete_range_cf(
601     rocksdb_writebatch_wi_t* b, rocksdb_column_family_handle_t* column_family,
602     const char* start_key, size_t start_key_len, const char* end_key,
603     size_t end_key_len);
604 // DO NOT USE - rocksdb_writebatch_wi_delete_rangev is not yet supported
605 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_delete_rangev(
606     rocksdb_writebatch_wi_t* b, int num_keys, const char* const* start_keys_list,
607     const size_t* start_keys_list_sizes, const char* const* end_keys_list,
608     const size_t* end_keys_list_sizes);
609 // DO NOT USE - rocksdb_writebatch_wi_delete_rangev_cf is not yet supported
610 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_delete_rangev_cf(
611     rocksdb_writebatch_wi_t* b, rocksdb_column_family_handle_t* column_family,
612     int num_keys, const char* const* start_keys_list,
613     const size_t* start_keys_list_sizes, const char* const* end_keys_list,
614     const size_t* end_keys_list_sizes);
615 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_put_log_data(
616     rocksdb_writebatch_wi_t*, const char* blob, size_t len);
617 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_iterate(
618     rocksdb_writebatch_wi_t* b,
619     void* state,
620     void (*put)(void*, const char* k, size_t klen, const char* v, size_t vlen),
621     void (*deleted)(void*, const char* k, size_t klen));
622 extern ROCKSDB_LIBRARY_API const char* rocksdb_writebatch_wi_data(
623     rocksdb_writebatch_wi_t* b,
624     size_t* size);
625 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_set_save_point(
626     rocksdb_writebatch_wi_t*);
627 extern ROCKSDB_LIBRARY_API void rocksdb_writebatch_wi_rollback_to_save_point(
628     rocksdb_writebatch_wi_t*, char** errptr);
629 extern ROCKSDB_LIBRARY_API char* rocksdb_writebatch_wi_get_from_batch(
630     rocksdb_writebatch_wi_t* wbwi,
631     const rocksdb_options_t* options,
632     const char* key, size_t keylen,
633     size_t* vallen,
634     char** errptr);
635 extern ROCKSDB_LIBRARY_API char* rocksdb_writebatch_wi_get_from_batch_cf(
636     rocksdb_writebatch_wi_t* wbwi,
637     const rocksdb_options_t* options,
638     rocksdb_column_family_handle_t* column_family,
639     const char* key, size_t keylen,
640     size_t* vallen,
641     char** errptr);
642 extern ROCKSDB_LIBRARY_API char* rocksdb_writebatch_wi_get_from_batch_and_db(
643     rocksdb_writebatch_wi_t* wbwi,
644     rocksdb_t* db,
645     const rocksdb_readoptions_t* options,
646     const char* key, size_t keylen,
647     size_t* vallen,
648     char** errptr);
649 extern ROCKSDB_LIBRARY_API char* rocksdb_writebatch_wi_get_from_batch_and_db_cf(
650     rocksdb_writebatch_wi_t* wbwi,
651     rocksdb_t* db,
652     const rocksdb_readoptions_t* options,
653     rocksdb_column_family_handle_t* column_family,
654     const char* key, size_t keylen,
655     size_t* vallen,
656     char** errptr);
657 extern ROCKSDB_LIBRARY_API void rocksdb_write_writebatch_wi(
658     rocksdb_t* db,
659     const rocksdb_writeoptions_t* options,
660     rocksdb_writebatch_wi_t* wbwi,
661     char** errptr);
662 extern ROCKSDB_LIBRARY_API rocksdb_iterator_t* rocksdb_writebatch_wi_create_iterator_with_base(
663     rocksdb_writebatch_wi_t* wbwi,
664     rocksdb_iterator_t* base_iterator);
665 extern ROCKSDB_LIBRARY_API rocksdb_iterator_t* rocksdb_writebatch_wi_create_iterator_with_base_cf(
666     rocksdb_writebatch_wi_t* wbwi,
667     rocksdb_iterator_t* base_iterator,
668     rocksdb_column_family_handle_t* cf);
669 
670 /* Block based table options */
671 
672 extern ROCKSDB_LIBRARY_API rocksdb_block_based_table_options_t*
673 rocksdb_block_based_options_create();
674 extern ROCKSDB_LIBRARY_API void rocksdb_block_based_options_destroy(
675     rocksdb_block_based_table_options_t* options);
676 extern ROCKSDB_LIBRARY_API void rocksdb_block_based_options_set_block_size(
677     rocksdb_block_based_table_options_t* options, size_t block_size);
678 extern ROCKSDB_LIBRARY_API void
679 rocksdb_block_based_options_set_block_size_deviation(
680     rocksdb_block_based_table_options_t* options, int block_size_deviation);
681 extern ROCKSDB_LIBRARY_API void
682 rocksdb_block_based_options_set_block_restart_interval(
683     rocksdb_block_based_table_options_t* options, int block_restart_interval);
684 extern ROCKSDB_LIBRARY_API void
685 rocksdb_block_based_options_set_index_block_restart_interval(
686     rocksdb_block_based_table_options_t* options, int index_block_restart_interval);
687 extern ROCKSDB_LIBRARY_API void
688 rocksdb_block_based_options_set_metadata_block_size(
689     rocksdb_block_based_table_options_t* options, uint64_t metadata_block_size);
690 extern ROCKSDB_LIBRARY_API void
691 rocksdb_block_based_options_set_partition_filters(
692     rocksdb_block_based_table_options_t* options, unsigned char partition_filters);
693 extern ROCKSDB_LIBRARY_API void
694 rocksdb_block_based_options_set_use_delta_encoding(
695     rocksdb_block_based_table_options_t* options, unsigned char use_delta_encoding);
696 extern ROCKSDB_LIBRARY_API void rocksdb_block_based_options_set_filter_policy(
697     rocksdb_block_based_table_options_t* options,
698     rocksdb_filterpolicy_t* filter_policy);
699 extern ROCKSDB_LIBRARY_API void rocksdb_block_based_options_set_no_block_cache(
700     rocksdb_block_based_table_options_t* options, unsigned char no_block_cache);
701 extern ROCKSDB_LIBRARY_API void rocksdb_block_based_options_set_block_cache(
702     rocksdb_block_based_table_options_t* options, rocksdb_cache_t* block_cache);
703 extern ROCKSDB_LIBRARY_API void
704 rocksdb_block_based_options_set_block_cache_compressed(
705     rocksdb_block_based_table_options_t* options,
706     rocksdb_cache_t* block_cache_compressed);
707 extern ROCKSDB_LIBRARY_API void
708 rocksdb_block_based_options_set_whole_key_filtering(
709     rocksdb_block_based_table_options_t*, unsigned char);
710 extern ROCKSDB_LIBRARY_API void rocksdb_block_based_options_set_format_version(
711     rocksdb_block_based_table_options_t*, int);
712 enum {
713   rocksdb_block_based_table_index_type_binary_search = 0,
714   rocksdb_block_based_table_index_type_hash_search = 1,
715   rocksdb_block_based_table_index_type_two_level_index_search = 2,
716 };
717 extern ROCKSDB_LIBRARY_API void rocksdb_block_based_options_set_index_type(
718     rocksdb_block_based_table_options_t*, int);  // uses one of the above enums
719 enum {
720   rocksdb_block_based_table_data_block_index_type_binary_search = 0,
721   rocksdb_block_based_table_data_block_index_type_binary_search_and_hash = 1,
722 };
723 extern ROCKSDB_LIBRARY_API void rocksdb_block_based_options_set_data_block_index_type(
724     rocksdb_block_based_table_options_t*, int);  // uses one of the above enums
725 extern ROCKSDB_LIBRARY_API void rocksdb_block_based_options_set_data_block_hash_ratio(
726     rocksdb_block_based_table_options_t* options, double v);
727 extern ROCKSDB_LIBRARY_API void
728 rocksdb_block_based_options_set_hash_index_allow_collision(
729     rocksdb_block_based_table_options_t*, unsigned char);
730 extern ROCKSDB_LIBRARY_API void
731 rocksdb_block_based_options_set_cache_index_and_filter_blocks(
732     rocksdb_block_based_table_options_t*, unsigned char);
733 extern ROCKSDB_LIBRARY_API void
734 rocksdb_block_based_options_set_cache_index_and_filter_blocks_with_high_priority(
735     rocksdb_block_based_table_options_t*, unsigned char);
736 extern ROCKSDB_LIBRARY_API void
737 rocksdb_block_based_options_set_pin_l0_filter_and_index_blocks_in_cache(
738     rocksdb_block_based_table_options_t*, unsigned char);
739 extern ROCKSDB_LIBRARY_API void
740 rocksdb_block_based_options_set_pin_top_level_index_and_filter(
741     rocksdb_block_based_table_options_t*, unsigned char);
742 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_block_based_table_factory(
743     rocksdb_options_t* opt, rocksdb_block_based_table_options_t* table_options);
744 
745 /* Cuckoo table options */
746 
747 extern ROCKSDB_LIBRARY_API rocksdb_cuckoo_table_options_t*
748 rocksdb_cuckoo_options_create();
749 extern ROCKSDB_LIBRARY_API void rocksdb_cuckoo_options_destroy(
750     rocksdb_cuckoo_table_options_t* options);
751 extern ROCKSDB_LIBRARY_API void rocksdb_cuckoo_options_set_hash_ratio(
752     rocksdb_cuckoo_table_options_t* options, double v);
753 extern ROCKSDB_LIBRARY_API void rocksdb_cuckoo_options_set_max_search_depth(
754     rocksdb_cuckoo_table_options_t* options, uint32_t v);
755 extern ROCKSDB_LIBRARY_API void rocksdb_cuckoo_options_set_cuckoo_block_size(
756     rocksdb_cuckoo_table_options_t* options, uint32_t v);
757 extern ROCKSDB_LIBRARY_API void
758 rocksdb_cuckoo_options_set_identity_as_first_hash(
759     rocksdb_cuckoo_table_options_t* options, unsigned char v);
760 extern ROCKSDB_LIBRARY_API void rocksdb_cuckoo_options_set_use_module_hash(
761     rocksdb_cuckoo_table_options_t* options, unsigned char v);
762 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_cuckoo_table_factory(
763     rocksdb_options_t* opt, rocksdb_cuckoo_table_options_t* table_options);
764 
765 /* Options */
766 extern ROCKSDB_LIBRARY_API void rocksdb_set_options(
767     rocksdb_t* db, int count, const char* const keys[], const char* const values[], char** errptr);
768 
769 extern ROCKSDB_LIBRARY_API void rocksdb_set_options_cf(
770     rocksdb_t* db, rocksdb_column_family_handle_t* handle, int count, const char* const keys[], const char* const values[], char** errptr);
771 
772 extern ROCKSDB_LIBRARY_API rocksdb_options_t* rocksdb_options_create();
773 extern ROCKSDB_LIBRARY_API void rocksdb_options_destroy(rocksdb_options_t*);
774 extern ROCKSDB_LIBRARY_API void rocksdb_options_increase_parallelism(
775     rocksdb_options_t* opt, int total_threads);
776 extern ROCKSDB_LIBRARY_API void rocksdb_options_optimize_for_point_lookup(
777     rocksdb_options_t* opt, uint64_t block_cache_size_mb);
778 extern ROCKSDB_LIBRARY_API void rocksdb_options_optimize_level_style_compaction(
779     rocksdb_options_t* opt, uint64_t memtable_memory_budget);
780 extern ROCKSDB_LIBRARY_API void
781 rocksdb_options_optimize_universal_style_compaction(
782     rocksdb_options_t* opt, uint64_t memtable_memory_budget);
783 extern ROCKSDB_LIBRARY_API void
784 rocksdb_options_set_allow_ingest_behind(rocksdb_options_t*,
785                                                    unsigned char);
786 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_compaction_filter(
787     rocksdb_options_t*, rocksdb_compactionfilter_t*);
788 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_compaction_filter_factory(
789     rocksdb_options_t*, rocksdb_compactionfilterfactory_t*);
790 extern ROCKSDB_LIBRARY_API void rocksdb_options_compaction_readahead_size(
791     rocksdb_options_t*, size_t);
792 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_comparator(
793     rocksdb_options_t*, rocksdb_comparator_t*);
794 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_merge_operator(
795     rocksdb_options_t*, rocksdb_mergeoperator_t*);
796 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_uint64add_merge_operator(
797     rocksdb_options_t*);
798 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_compression_per_level(
799     rocksdb_options_t* opt, int* level_values, size_t num_levels);
800 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_create_if_missing(
801     rocksdb_options_t*, unsigned char);
802 extern ROCKSDB_LIBRARY_API void
803 rocksdb_options_set_create_missing_column_families(rocksdb_options_t*,
804                                                    unsigned char);
805 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_error_if_exists(
806     rocksdb_options_t*, unsigned char);
807 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_paranoid_checks(
808     rocksdb_options_t*, unsigned char);
809 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_db_paths(rocksdb_options_t*,
810                                                              const rocksdb_dbpath_t** path_values,
811                                                              size_t num_paths);
812 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_env(rocksdb_options_t*,
813                                                         rocksdb_env_t*);
814 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_info_log(rocksdb_options_t*,
815                                                              rocksdb_logger_t*);
816 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_info_log_level(
817     rocksdb_options_t*, int);
818 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_write_buffer_size(
819     rocksdb_options_t*, size_t);
820 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_db_write_buffer_size(
821     rocksdb_options_t*, size_t);
822 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_max_open_files(
823     rocksdb_options_t*, int);
824 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_max_file_opening_threads(
825     rocksdb_options_t*, int);
826 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_max_total_wal_size(
827     rocksdb_options_t* opt, uint64_t n);
828 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_compression_options(
829     rocksdb_options_t*, int, int, int, int);
830 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_prefix_extractor(
831     rocksdb_options_t*, rocksdb_slicetransform_t*);
832 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_num_levels(
833     rocksdb_options_t*, int);
834 extern ROCKSDB_LIBRARY_API void
835 rocksdb_options_set_level0_file_num_compaction_trigger(rocksdb_options_t*, int);
836 extern ROCKSDB_LIBRARY_API void
837 rocksdb_options_set_level0_slowdown_writes_trigger(rocksdb_options_t*, int);
838 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_level0_stop_writes_trigger(
839     rocksdb_options_t*, int);
840 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_max_mem_compaction_level(
841     rocksdb_options_t*, int);
842 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_target_file_size_base(
843     rocksdb_options_t*, uint64_t);
844 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_target_file_size_multiplier(
845     rocksdb_options_t*, int);
846 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_max_bytes_for_level_base(
847     rocksdb_options_t*, uint64_t);
848 extern ROCKSDB_LIBRARY_API void
849 rocksdb_options_set_level_compaction_dynamic_level_bytes(rocksdb_options_t*,
850                                                          unsigned char);
851 extern ROCKSDB_LIBRARY_API void
852 rocksdb_options_set_max_bytes_for_level_multiplier(rocksdb_options_t*, double);
853 extern ROCKSDB_LIBRARY_API void
854 rocksdb_options_set_max_bytes_for_level_multiplier_additional(
855     rocksdb_options_t*, int* level_values, size_t num_levels);
856 extern ROCKSDB_LIBRARY_API void rocksdb_options_enable_statistics(
857     rocksdb_options_t*);
858 extern ROCKSDB_LIBRARY_API void
859 rocksdb_options_set_skip_stats_update_on_db_open(rocksdb_options_t* opt,
860                                                  unsigned char val);
861 extern ROCKSDB_LIBRARY_API void
862 rocksdb_options_set_skip_checking_sst_file_sizes_on_db_open(
863     rocksdb_options_t* opt, unsigned char val);
864 
865 /* returns a pointer to a malloc()-ed, null terminated string */
866 extern ROCKSDB_LIBRARY_API char* rocksdb_options_statistics_get_string(
867     rocksdb_options_t* opt);
868 
869 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_max_write_buffer_number(
870     rocksdb_options_t*, int);
871 extern ROCKSDB_LIBRARY_API void
872 rocksdb_options_set_min_write_buffer_number_to_merge(rocksdb_options_t*, int);
873 extern ROCKSDB_LIBRARY_API void
874 rocksdb_options_set_max_write_buffer_number_to_maintain(rocksdb_options_t*,
875                                                         int);
876 extern ROCKSDB_LIBRARY_API void
877 rocksdb_options_set_max_write_buffer_size_to_maintain(rocksdb_options_t*,
878                                                       int64_t);
879 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_enable_pipelined_write(
880     rocksdb_options_t*, unsigned char);
881 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_unordered_write(
882     rocksdb_options_t*, unsigned char);
883 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_max_subcompactions(
884     rocksdb_options_t*, uint32_t);
885 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_max_background_jobs(
886     rocksdb_options_t*, int);
887 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_max_background_compactions(
888     rocksdb_options_t*, int);
889 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_base_background_compactions(
890     rocksdb_options_t*, int);
891 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_max_background_flushes(
892     rocksdb_options_t*, int);
893 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_max_log_file_size(
894     rocksdb_options_t*, size_t);
895 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_log_file_time_to_roll(
896     rocksdb_options_t*, size_t);
897 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_keep_log_file_num(
898     rocksdb_options_t*, size_t);
899 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_recycle_log_file_num(
900     rocksdb_options_t*, size_t);
901 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_soft_rate_limit(
902     rocksdb_options_t*, double);
903 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_hard_rate_limit(
904     rocksdb_options_t*, double);
905 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_soft_pending_compaction_bytes_limit(
906     rocksdb_options_t* opt, size_t v);
907 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_hard_pending_compaction_bytes_limit(
908     rocksdb_options_t* opt, size_t v);
909 extern ROCKSDB_LIBRARY_API void
910 rocksdb_options_set_rate_limit_delay_max_milliseconds(rocksdb_options_t*,
911                                                       unsigned int);
912 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_max_manifest_file_size(
913     rocksdb_options_t*, size_t);
914 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_table_cache_numshardbits(
915     rocksdb_options_t*, int);
916 extern ROCKSDB_LIBRARY_API void
917 rocksdb_options_set_table_cache_remove_scan_count_limit(rocksdb_options_t*,
918                                                         int);
919 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_arena_block_size(
920     rocksdb_options_t*, size_t);
921 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_use_fsync(
922     rocksdb_options_t*, int);
923 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_db_log_dir(
924     rocksdb_options_t*, const char*);
925 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_wal_dir(rocksdb_options_t*,
926                                                             const char*);
927 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_WAL_ttl_seconds(
928     rocksdb_options_t*, uint64_t);
929 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_WAL_size_limit_MB(
930     rocksdb_options_t*, uint64_t);
931 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_manifest_preallocation_size(
932     rocksdb_options_t*, size_t);
933 extern ROCKSDB_LIBRARY_API void
934 rocksdb_options_set_purge_redundant_kvs_while_flush(rocksdb_options_t*,
935                                                     unsigned char);
936 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_allow_mmap_reads(
937     rocksdb_options_t*, unsigned char);
938 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_allow_mmap_writes(
939     rocksdb_options_t*, unsigned char);
940 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_use_direct_reads(
941     rocksdb_options_t*, unsigned char);
942 extern ROCKSDB_LIBRARY_API void
943 rocksdb_options_set_use_direct_io_for_flush_and_compaction(rocksdb_options_t*,
944                                                            unsigned char);
945 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_is_fd_close_on_exec(
946     rocksdb_options_t*, unsigned char);
947 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_skip_log_error_on_recovery(
948     rocksdb_options_t*, unsigned char);
949 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_stats_dump_period_sec(
950     rocksdb_options_t*, unsigned int);
951 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_advise_random_on_open(
952     rocksdb_options_t*, unsigned char);
953 extern ROCKSDB_LIBRARY_API void
954 rocksdb_options_set_access_hint_on_compaction_start(rocksdb_options_t*, int);
955 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_use_adaptive_mutex(
956     rocksdb_options_t*, unsigned char);
957 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_bytes_per_sync(
958     rocksdb_options_t*, uint64_t);
959 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_wal_bytes_per_sync(
960         rocksdb_options_t*, uint64_t);
961 extern ROCKSDB_LIBRARY_API void
962 rocksdb_options_set_writable_file_max_buffer_size(rocksdb_options_t*, uint64_t);
963 extern ROCKSDB_LIBRARY_API void
964 rocksdb_options_set_allow_concurrent_memtable_write(rocksdb_options_t*,
965                                                     unsigned char);
966 extern ROCKSDB_LIBRARY_API void
967 rocksdb_options_set_enable_write_thread_adaptive_yield(rocksdb_options_t*,
968                                                        unsigned char);
969 extern ROCKSDB_LIBRARY_API void
970 rocksdb_options_set_max_sequential_skip_in_iterations(rocksdb_options_t*,
971                                                       uint64_t);
972 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_disable_auto_compactions(
973     rocksdb_options_t*, int);
974 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_optimize_filters_for_hits(
975     rocksdb_options_t*, int);
976 extern ROCKSDB_LIBRARY_API void
977 rocksdb_options_set_delete_obsolete_files_period_micros(rocksdb_options_t*,
978                                                         uint64_t);
979 extern ROCKSDB_LIBRARY_API void rocksdb_options_prepare_for_bulk_load(
980     rocksdb_options_t*);
981 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_memtable_vector_rep(
982     rocksdb_options_t*);
983 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_memtable_prefix_bloom_size_ratio(
984     rocksdb_options_t*, double);
985 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_max_compaction_bytes(
986     rocksdb_options_t*, uint64_t);
987 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_hash_skip_list_rep(
988     rocksdb_options_t*, size_t, int32_t, int32_t);
989 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_hash_link_list_rep(
990     rocksdb_options_t*, size_t);
991 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_plain_table_factory(
992     rocksdb_options_t*, uint32_t, int, double, size_t);
993 
994 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_min_level_to_compress(
995     rocksdb_options_t* opt, int level);
996 
997 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_memtable_huge_page_size(
998     rocksdb_options_t*, size_t);
999 
1000 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_max_successive_merges(
1001     rocksdb_options_t*, size_t);
1002 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_bloom_locality(
1003     rocksdb_options_t*, uint32_t);
1004 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_inplace_update_support(
1005     rocksdb_options_t*, unsigned char);
1006 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_inplace_update_num_locks(
1007     rocksdb_options_t*, size_t);
1008 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_report_bg_io_stats(
1009     rocksdb_options_t*, int);
1010 
1011 enum {
1012   rocksdb_tolerate_corrupted_tail_records_recovery = 0,
1013   rocksdb_absolute_consistency_recovery = 1,
1014   rocksdb_point_in_time_recovery = 2,
1015   rocksdb_skip_any_corrupted_records_recovery = 3
1016 };
1017 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_wal_recovery_mode(
1018     rocksdb_options_t*, int);
1019 
1020 enum {
1021   rocksdb_no_compression = 0,
1022   rocksdb_snappy_compression = 1,
1023   rocksdb_zlib_compression = 2,
1024   rocksdb_bz2_compression = 3,
1025   rocksdb_lz4_compression = 4,
1026   rocksdb_lz4hc_compression = 5,
1027   rocksdb_xpress_compression = 6,
1028   rocksdb_zstd_compression = 7
1029 };
1030 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_compression(
1031     rocksdb_options_t*, int);
1032 
1033 enum {
1034   rocksdb_level_compaction = 0,
1035   rocksdb_universal_compaction = 1,
1036   rocksdb_fifo_compaction = 2
1037 };
1038 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_compaction_style(
1039     rocksdb_options_t*, int);
1040 extern ROCKSDB_LIBRARY_API void
1041 rocksdb_options_set_universal_compaction_options(
1042     rocksdb_options_t*, rocksdb_universal_compaction_options_t*);
1043 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_fifo_compaction_options(
1044     rocksdb_options_t* opt, rocksdb_fifo_compaction_options_t* fifo);
1045 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_ratelimiter(
1046     rocksdb_options_t* opt, rocksdb_ratelimiter_t* limiter);
1047 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_atomic_flush(
1048     rocksdb_options_t* opt, unsigned char);
1049 
1050 extern ROCKSDB_LIBRARY_API void rocksdb_options_set_row_cache(
1051     rocksdb_options_t* opt, rocksdb_cache_t* cache
1052 );
1053 
1054 /* RateLimiter */
1055 extern ROCKSDB_LIBRARY_API rocksdb_ratelimiter_t* rocksdb_ratelimiter_create(
1056     int64_t rate_bytes_per_sec, int64_t refill_period_us, int32_t fairness);
1057 extern ROCKSDB_LIBRARY_API void rocksdb_ratelimiter_destroy(rocksdb_ratelimiter_t*);
1058 
1059 /* PerfContext */
1060 enum {
1061   rocksdb_uninitialized = 0,
1062   rocksdb_disable = 1,
1063   rocksdb_enable_count = 2,
1064   rocksdb_enable_time_except_for_mutex = 3,
1065   rocksdb_enable_time = 4,
1066   rocksdb_out_of_bounds = 5
1067 };
1068 
1069 enum {
1070   rocksdb_user_key_comparison_count = 0,
1071   rocksdb_block_cache_hit_count,
1072   rocksdb_block_read_count,
1073   rocksdb_block_read_byte,
1074   rocksdb_block_read_time,
1075   rocksdb_block_checksum_time,
1076   rocksdb_block_decompress_time,
1077   rocksdb_get_read_bytes,
1078   rocksdb_multiget_read_bytes,
1079   rocksdb_iter_read_bytes,
1080   rocksdb_internal_key_skipped_count,
1081   rocksdb_internal_delete_skipped_count,
1082   rocksdb_internal_recent_skipped_count,
1083   rocksdb_internal_merge_count,
1084   rocksdb_get_snapshot_time,
1085   rocksdb_get_from_memtable_time,
1086   rocksdb_get_from_memtable_count,
1087   rocksdb_get_post_process_time,
1088   rocksdb_get_from_output_files_time,
1089   rocksdb_seek_on_memtable_time,
1090   rocksdb_seek_on_memtable_count,
1091   rocksdb_next_on_memtable_count,
1092   rocksdb_prev_on_memtable_count,
1093   rocksdb_seek_child_seek_time,
1094   rocksdb_seek_child_seek_count,
1095   rocksdb_seek_min_heap_time,
1096   rocksdb_seek_max_heap_time,
1097   rocksdb_seek_internal_seek_time,
1098   rocksdb_find_next_user_entry_time,
1099   rocksdb_write_wal_time,
1100   rocksdb_write_memtable_time,
1101   rocksdb_write_delay_time,
1102   rocksdb_write_pre_and_post_process_time,
1103   rocksdb_db_mutex_lock_nanos,
1104   rocksdb_db_condition_wait_nanos,
1105   rocksdb_merge_operator_time_nanos,
1106   rocksdb_read_index_block_nanos,
1107   rocksdb_read_filter_block_nanos,
1108   rocksdb_new_table_block_iter_nanos,
1109   rocksdb_new_table_iterator_nanos,
1110   rocksdb_block_seek_nanos,
1111   rocksdb_find_table_nanos,
1112   rocksdb_bloom_memtable_hit_count,
1113   rocksdb_bloom_memtable_miss_count,
1114   rocksdb_bloom_sst_hit_count,
1115   rocksdb_bloom_sst_miss_count,
1116   rocksdb_key_lock_wait_time,
1117   rocksdb_key_lock_wait_count,
1118   rocksdb_env_new_sequential_file_nanos,
1119   rocksdb_env_new_random_access_file_nanos,
1120   rocksdb_env_new_writable_file_nanos,
1121   rocksdb_env_reuse_writable_file_nanos,
1122   rocksdb_env_new_random_rw_file_nanos,
1123   rocksdb_env_new_directory_nanos,
1124   rocksdb_env_file_exists_nanos,
1125   rocksdb_env_get_children_nanos,
1126   rocksdb_env_get_children_file_attributes_nanos,
1127   rocksdb_env_delete_file_nanos,
1128   rocksdb_env_create_dir_nanos,
1129   rocksdb_env_create_dir_if_missing_nanos,
1130   rocksdb_env_delete_dir_nanos,
1131   rocksdb_env_get_file_size_nanos,
1132   rocksdb_env_get_file_modification_time_nanos,
1133   rocksdb_env_rename_file_nanos,
1134   rocksdb_env_link_file_nanos,
1135   rocksdb_env_lock_file_nanos,
1136   rocksdb_env_unlock_file_nanos,
1137   rocksdb_env_new_logger_nanos,
1138   rocksdb_total_metric_count = 68
1139 };
1140 
1141 extern ROCKSDB_LIBRARY_API void rocksdb_set_perf_level(int);
1142 extern ROCKSDB_LIBRARY_API rocksdb_perfcontext_t* rocksdb_perfcontext_create();
1143 extern ROCKSDB_LIBRARY_API void rocksdb_perfcontext_reset(
1144     rocksdb_perfcontext_t* context);
1145 extern ROCKSDB_LIBRARY_API char* rocksdb_perfcontext_report(
1146     rocksdb_perfcontext_t* context, unsigned char exclude_zero_counters);
1147 extern ROCKSDB_LIBRARY_API uint64_t rocksdb_perfcontext_metric(
1148     rocksdb_perfcontext_t* context, int metric);
1149 extern ROCKSDB_LIBRARY_API void rocksdb_perfcontext_destroy(
1150     rocksdb_perfcontext_t* context);
1151 
1152 /* Compaction Filter */
1153 
1154 extern ROCKSDB_LIBRARY_API rocksdb_compactionfilter_t*
1155 rocksdb_compactionfilter_create(
1156     void* state, void (*destructor)(void*),
1157     unsigned char (*filter)(void*, int level, const char* key,
1158                             size_t key_length, const char* existing_value,
1159                             size_t value_length, char** new_value,
1160                             size_t* new_value_length,
1161                             unsigned char* value_changed),
1162     const char* (*name)(void*));
1163 extern ROCKSDB_LIBRARY_API void rocksdb_compactionfilter_set_ignore_snapshots(
1164     rocksdb_compactionfilter_t*, unsigned char);
1165 extern ROCKSDB_LIBRARY_API void rocksdb_compactionfilter_destroy(
1166     rocksdb_compactionfilter_t*);
1167 
1168 /* Compaction Filter Context */
1169 
1170 extern ROCKSDB_LIBRARY_API unsigned char
1171 rocksdb_compactionfiltercontext_is_full_compaction(
1172     rocksdb_compactionfiltercontext_t* context);
1173 
1174 extern ROCKSDB_LIBRARY_API unsigned char
1175 rocksdb_compactionfiltercontext_is_manual_compaction(
1176     rocksdb_compactionfiltercontext_t* context);
1177 
1178 /* Compaction Filter Factory */
1179 
1180 extern ROCKSDB_LIBRARY_API rocksdb_compactionfilterfactory_t*
1181 rocksdb_compactionfilterfactory_create(
1182     void* state, void (*destructor)(void*),
1183     rocksdb_compactionfilter_t* (*create_compaction_filter)(
1184         void*, rocksdb_compactionfiltercontext_t* context),
1185     const char* (*name)(void*));
1186 extern ROCKSDB_LIBRARY_API void rocksdb_compactionfilterfactory_destroy(
1187     rocksdb_compactionfilterfactory_t*);
1188 
1189 /* Comparator */
1190 
1191 extern ROCKSDB_LIBRARY_API rocksdb_comparator_t* rocksdb_comparator_create(
1192     void* state, void (*destructor)(void*),
1193     int (*compare)(void*, const char* a, size_t alen, const char* b,
1194                    size_t blen),
1195     const char* (*name)(void*));
1196 extern ROCKSDB_LIBRARY_API void rocksdb_comparator_destroy(
1197     rocksdb_comparator_t*);
1198 
1199 /* Filter policy */
1200 
1201 extern ROCKSDB_LIBRARY_API rocksdb_filterpolicy_t* rocksdb_filterpolicy_create(
1202     void* state, void (*destructor)(void*),
1203     char* (*create_filter)(void*, const char* const* key_array,
1204                            const size_t* key_length_array, int num_keys,
1205                            size_t* filter_length),
1206     unsigned char (*key_may_match)(void*, const char* key, size_t length,
1207                                    const char* filter, size_t filter_length),
1208     void (*delete_filter)(void*, const char* filter, size_t filter_length),
1209     const char* (*name)(void*));
1210 extern ROCKSDB_LIBRARY_API void rocksdb_filterpolicy_destroy(
1211     rocksdb_filterpolicy_t*);
1212 
1213 extern ROCKSDB_LIBRARY_API rocksdb_filterpolicy_t*
1214 rocksdb_filterpolicy_create_bloom(int bits_per_key);
1215 extern ROCKSDB_LIBRARY_API rocksdb_filterpolicy_t*
1216 rocksdb_filterpolicy_create_bloom_full(int bits_per_key);
1217 
1218 /* Merge Operator */
1219 
1220 extern ROCKSDB_LIBRARY_API rocksdb_mergeoperator_t*
1221 rocksdb_mergeoperator_create(
1222     void* state, void (*destructor)(void*),
1223     char* (*full_merge)(void*, const char* key, size_t key_length,
1224                         const char* existing_value,
1225                         size_t existing_value_length,
1226                         const char* const* operands_list,
1227                         const size_t* operands_list_length, int num_operands,
1228                         unsigned char* success, size_t* new_value_length),
1229     char* (*partial_merge)(void*, const char* key, size_t key_length,
1230                            const char* const* operands_list,
1231                            const size_t* operands_list_length, int num_operands,
1232                            unsigned char* success, size_t* new_value_length),
1233     void (*delete_value)(void*, const char* value, size_t value_length),
1234     const char* (*name)(void*));
1235 extern ROCKSDB_LIBRARY_API void rocksdb_mergeoperator_destroy(
1236     rocksdb_mergeoperator_t*);
1237 
1238 /* Read options */
1239 
1240 extern ROCKSDB_LIBRARY_API rocksdb_readoptions_t* rocksdb_readoptions_create();
1241 extern ROCKSDB_LIBRARY_API void rocksdb_readoptions_destroy(
1242     rocksdb_readoptions_t*);
1243 extern ROCKSDB_LIBRARY_API void rocksdb_readoptions_set_verify_checksums(
1244     rocksdb_readoptions_t*, unsigned char);
1245 extern ROCKSDB_LIBRARY_API void rocksdb_readoptions_set_fill_cache(
1246     rocksdb_readoptions_t*, unsigned char);
1247 extern ROCKSDB_LIBRARY_API void rocksdb_readoptions_set_snapshot(
1248     rocksdb_readoptions_t*, const rocksdb_snapshot_t*);
1249 extern ROCKSDB_LIBRARY_API void rocksdb_readoptions_set_iterate_upper_bound(
1250     rocksdb_readoptions_t*, const char* key, size_t keylen);
1251 extern ROCKSDB_LIBRARY_API void rocksdb_readoptions_set_iterate_lower_bound(
1252     rocksdb_readoptions_t*, const char* key, size_t keylen);
1253 extern ROCKSDB_LIBRARY_API void rocksdb_readoptions_set_read_tier(
1254     rocksdb_readoptions_t*, int);
1255 extern ROCKSDB_LIBRARY_API void rocksdb_readoptions_set_tailing(
1256     rocksdb_readoptions_t*, unsigned char);
1257 // The functionality that this option controlled has been removed.
1258 extern ROCKSDB_LIBRARY_API void rocksdb_readoptions_set_managed(
1259     rocksdb_readoptions_t*, unsigned char);
1260 extern ROCKSDB_LIBRARY_API void rocksdb_readoptions_set_readahead_size(
1261     rocksdb_readoptions_t*, size_t);
1262 extern ROCKSDB_LIBRARY_API void rocksdb_readoptions_set_prefix_same_as_start(
1263     rocksdb_readoptions_t*, unsigned char);
1264 extern ROCKSDB_LIBRARY_API void rocksdb_readoptions_set_pin_data(
1265     rocksdb_readoptions_t*, unsigned char);
1266 extern ROCKSDB_LIBRARY_API void rocksdb_readoptions_set_total_order_seek(
1267     rocksdb_readoptions_t*, unsigned char);
1268 extern ROCKSDB_LIBRARY_API void rocksdb_readoptions_set_max_skippable_internal_keys(
1269     rocksdb_readoptions_t*, uint64_t);
1270 extern ROCKSDB_LIBRARY_API void rocksdb_readoptions_set_background_purge_on_iterator_cleanup(
1271     rocksdb_readoptions_t*, unsigned char);
1272 extern ROCKSDB_LIBRARY_API void rocksdb_readoptions_set_ignore_range_deletions(
1273     rocksdb_readoptions_t*, unsigned char);
1274 
1275 /* Write options */
1276 
1277 extern ROCKSDB_LIBRARY_API rocksdb_writeoptions_t*
1278 rocksdb_writeoptions_create();
1279 extern ROCKSDB_LIBRARY_API void rocksdb_writeoptions_destroy(
1280     rocksdb_writeoptions_t*);
1281 extern ROCKSDB_LIBRARY_API void rocksdb_writeoptions_set_sync(
1282     rocksdb_writeoptions_t*, unsigned char);
1283 extern ROCKSDB_LIBRARY_API void rocksdb_writeoptions_disable_WAL(
1284     rocksdb_writeoptions_t* opt, int disable);
1285 extern ROCKSDB_LIBRARY_API void rocksdb_writeoptions_set_ignore_missing_column_families(
1286     rocksdb_writeoptions_t*, unsigned char);
1287 extern ROCKSDB_LIBRARY_API void rocksdb_writeoptions_set_no_slowdown(
1288     rocksdb_writeoptions_t*, unsigned char);
1289 extern ROCKSDB_LIBRARY_API void rocksdb_writeoptions_set_low_pri(
1290     rocksdb_writeoptions_t*, unsigned char);
1291 extern ROCKSDB_LIBRARY_API void
1292 rocksdb_writeoptions_set_memtable_insert_hint_per_batch(rocksdb_writeoptions_t*,
1293                                                         unsigned char);
1294 
1295 /* Compact range options */
1296 
1297 extern ROCKSDB_LIBRARY_API rocksdb_compactoptions_t*
1298 rocksdb_compactoptions_create();
1299 extern ROCKSDB_LIBRARY_API void rocksdb_compactoptions_destroy(
1300     rocksdb_compactoptions_t*);
1301 extern ROCKSDB_LIBRARY_API void
1302 rocksdb_compactoptions_set_exclusive_manual_compaction(
1303     rocksdb_compactoptions_t*, unsigned char);
1304 extern ROCKSDB_LIBRARY_API void
1305 rocksdb_compactoptions_set_bottommost_level_compaction(
1306     rocksdb_compactoptions_t*, unsigned char);
1307 extern ROCKSDB_LIBRARY_API void rocksdb_compactoptions_set_change_level(
1308     rocksdb_compactoptions_t*, unsigned char);
1309 extern ROCKSDB_LIBRARY_API void rocksdb_compactoptions_set_target_level(
1310     rocksdb_compactoptions_t*, int);
1311 
1312 /* Flush options */
1313 
1314 extern ROCKSDB_LIBRARY_API rocksdb_flushoptions_t*
1315 rocksdb_flushoptions_create();
1316 extern ROCKSDB_LIBRARY_API void rocksdb_flushoptions_destroy(
1317     rocksdb_flushoptions_t*);
1318 extern ROCKSDB_LIBRARY_API void rocksdb_flushoptions_set_wait(
1319     rocksdb_flushoptions_t*, unsigned char);
1320 
1321 /* Cache */
1322 
1323 extern ROCKSDB_LIBRARY_API rocksdb_cache_t* rocksdb_cache_create_lru(
1324     size_t capacity);
1325 extern ROCKSDB_LIBRARY_API void rocksdb_cache_destroy(rocksdb_cache_t* cache);
1326 extern ROCKSDB_LIBRARY_API void rocksdb_cache_set_capacity(
1327     rocksdb_cache_t* cache, size_t capacity);
1328 extern ROCKSDB_LIBRARY_API size_t
1329 rocksdb_cache_get_usage(rocksdb_cache_t* cache);
1330 extern ROCKSDB_LIBRARY_API size_t
1331 rocksdb_cache_get_pinned_usage(rocksdb_cache_t* cache);
1332 
1333 /* DBPath */
1334 
1335 extern ROCKSDB_LIBRARY_API rocksdb_dbpath_t* rocksdb_dbpath_create(const char* path, uint64_t target_size);
1336 extern ROCKSDB_LIBRARY_API void rocksdb_dbpath_destroy(rocksdb_dbpath_t*);
1337 
1338 /* Env */
1339 
1340 extern ROCKSDB_LIBRARY_API rocksdb_env_t* rocksdb_create_default_env();
1341 extern ROCKSDB_LIBRARY_API rocksdb_env_t* rocksdb_create_mem_env();
1342 extern ROCKSDB_LIBRARY_API void rocksdb_env_set_background_threads(
1343     rocksdb_env_t* env, int n);
1344 extern ROCKSDB_LIBRARY_API void
1345 rocksdb_env_set_high_priority_background_threads(rocksdb_env_t* env, int n);
1346 extern ROCKSDB_LIBRARY_API void rocksdb_env_join_all_threads(
1347     rocksdb_env_t* env);
1348 extern ROCKSDB_LIBRARY_API void rocksdb_env_lower_thread_pool_io_priority(rocksdb_env_t* env);
1349 extern ROCKSDB_LIBRARY_API void rocksdb_env_lower_high_priority_thread_pool_io_priority(rocksdb_env_t* env);
1350 extern ROCKSDB_LIBRARY_API void rocksdb_env_lower_thread_pool_cpu_priority(rocksdb_env_t* env);
1351 extern ROCKSDB_LIBRARY_API void rocksdb_env_lower_high_priority_thread_pool_cpu_priority(rocksdb_env_t* env);
1352 
1353 extern ROCKSDB_LIBRARY_API void rocksdb_env_destroy(rocksdb_env_t*);
1354 
1355 extern ROCKSDB_LIBRARY_API rocksdb_envoptions_t* rocksdb_envoptions_create();
1356 extern ROCKSDB_LIBRARY_API void rocksdb_envoptions_destroy(
1357     rocksdb_envoptions_t* opt);
1358 
1359 /* SstFile */
1360 
1361 extern ROCKSDB_LIBRARY_API rocksdb_sstfilewriter_t*
1362 rocksdb_sstfilewriter_create(const rocksdb_envoptions_t* env,
1363                              const rocksdb_options_t* io_options);
1364 extern ROCKSDB_LIBRARY_API rocksdb_sstfilewriter_t*
1365 rocksdb_sstfilewriter_create_with_comparator(
1366     const rocksdb_envoptions_t* env, const rocksdb_options_t* io_options,
1367     const rocksdb_comparator_t* comparator);
1368 extern ROCKSDB_LIBRARY_API void rocksdb_sstfilewriter_open(
1369     rocksdb_sstfilewriter_t* writer, const char* name, char** errptr);
1370 extern ROCKSDB_LIBRARY_API void rocksdb_sstfilewriter_add(
1371     rocksdb_sstfilewriter_t* writer, const char* key, size_t keylen,
1372     const char* val, size_t vallen, char** errptr);
1373 extern ROCKSDB_LIBRARY_API void rocksdb_sstfilewriter_put(
1374     rocksdb_sstfilewriter_t* writer, const char* key, size_t keylen,
1375     const char* val, size_t vallen, char** errptr);
1376 extern ROCKSDB_LIBRARY_API void rocksdb_sstfilewriter_merge(
1377     rocksdb_sstfilewriter_t* writer, const char* key, size_t keylen,
1378     const char* val, size_t vallen, char** errptr);
1379 extern ROCKSDB_LIBRARY_API void rocksdb_sstfilewriter_delete(
1380     rocksdb_sstfilewriter_t* writer, const char* key, size_t keylen,
1381     char** errptr);
1382 extern ROCKSDB_LIBRARY_API void rocksdb_sstfilewriter_finish(
1383     rocksdb_sstfilewriter_t* writer, char** errptr);
1384 extern ROCKSDB_LIBRARY_API void rocksdb_sstfilewriter_file_size(
1385     rocksdb_sstfilewriter_t* writer, uint64_t* file_size);
1386 extern ROCKSDB_LIBRARY_API void rocksdb_sstfilewriter_destroy(
1387     rocksdb_sstfilewriter_t* writer);
1388 
1389 extern ROCKSDB_LIBRARY_API rocksdb_ingestexternalfileoptions_t*
1390 rocksdb_ingestexternalfileoptions_create();
1391 extern ROCKSDB_LIBRARY_API void
1392 rocksdb_ingestexternalfileoptions_set_move_files(
1393     rocksdb_ingestexternalfileoptions_t* opt, unsigned char move_files);
1394 extern ROCKSDB_LIBRARY_API void
1395 rocksdb_ingestexternalfileoptions_set_snapshot_consistency(
1396     rocksdb_ingestexternalfileoptions_t* opt,
1397     unsigned char snapshot_consistency);
1398 extern ROCKSDB_LIBRARY_API void
1399 rocksdb_ingestexternalfileoptions_set_allow_global_seqno(
1400     rocksdb_ingestexternalfileoptions_t* opt, unsigned char allow_global_seqno);
1401 extern ROCKSDB_LIBRARY_API void
1402 rocksdb_ingestexternalfileoptions_set_allow_blocking_flush(
1403     rocksdb_ingestexternalfileoptions_t* opt,
1404     unsigned char allow_blocking_flush);
1405 extern ROCKSDB_LIBRARY_API void
1406 rocksdb_ingestexternalfileoptions_set_ingest_behind(
1407     rocksdb_ingestexternalfileoptions_t* opt,
1408     unsigned char ingest_behind);
1409 extern ROCKSDB_LIBRARY_API void rocksdb_ingestexternalfileoptions_destroy(
1410     rocksdb_ingestexternalfileoptions_t* opt);
1411 
1412 extern ROCKSDB_LIBRARY_API void rocksdb_ingest_external_file(
1413     rocksdb_t* db, const char* const* file_list, const size_t list_len,
1414     const rocksdb_ingestexternalfileoptions_t* opt, char** errptr);
1415 extern ROCKSDB_LIBRARY_API void rocksdb_ingest_external_file_cf(
1416     rocksdb_t* db, rocksdb_column_family_handle_t* handle,
1417     const char* const* file_list, const size_t list_len,
1418     const rocksdb_ingestexternalfileoptions_t* opt, char** errptr);
1419 
1420 extern ROCKSDB_LIBRARY_API void rocksdb_try_catch_up_with_primary(
1421     rocksdb_t* db, char** errptr);
1422 
1423 /* SliceTransform */
1424 
1425 extern ROCKSDB_LIBRARY_API rocksdb_slicetransform_t*
1426 rocksdb_slicetransform_create(
1427     void* state, void (*destructor)(void*),
1428     char* (*transform)(void*, const char* key, size_t length,
1429                        size_t* dst_length),
1430     unsigned char (*in_domain)(void*, const char* key, size_t length),
1431     unsigned char (*in_range)(void*, const char* key, size_t length),
1432     const char* (*name)(void*));
1433 extern ROCKSDB_LIBRARY_API rocksdb_slicetransform_t*
1434     rocksdb_slicetransform_create_fixed_prefix(size_t);
1435 extern ROCKSDB_LIBRARY_API rocksdb_slicetransform_t*
1436 rocksdb_slicetransform_create_noop();
1437 extern ROCKSDB_LIBRARY_API void rocksdb_slicetransform_destroy(
1438     rocksdb_slicetransform_t*);
1439 
1440 /* Universal Compaction options */
1441 
1442 enum {
1443   rocksdb_similar_size_compaction_stop_style = 0,
1444   rocksdb_total_size_compaction_stop_style = 1
1445 };
1446 
1447 extern ROCKSDB_LIBRARY_API rocksdb_universal_compaction_options_t*
1448 rocksdb_universal_compaction_options_create();
1449 extern ROCKSDB_LIBRARY_API void
1450 rocksdb_universal_compaction_options_set_size_ratio(
1451     rocksdb_universal_compaction_options_t*, int);
1452 extern ROCKSDB_LIBRARY_API void
1453 rocksdb_universal_compaction_options_set_min_merge_width(
1454     rocksdb_universal_compaction_options_t*, int);
1455 extern ROCKSDB_LIBRARY_API void
1456 rocksdb_universal_compaction_options_set_max_merge_width(
1457     rocksdb_universal_compaction_options_t*, int);
1458 extern ROCKSDB_LIBRARY_API void
1459 rocksdb_universal_compaction_options_set_max_size_amplification_percent(
1460     rocksdb_universal_compaction_options_t*, int);
1461 extern ROCKSDB_LIBRARY_API void
1462 rocksdb_universal_compaction_options_set_compression_size_percent(
1463     rocksdb_universal_compaction_options_t*, int);
1464 extern ROCKSDB_LIBRARY_API void
1465 rocksdb_universal_compaction_options_set_stop_style(
1466     rocksdb_universal_compaction_options_t*, int);
1467 extern ROCKSDB_LIBRARY_API void rocksdb_universal_compaction_options_destroy(
1468     rocksdb_universal_compaction_options_t*);
1469 
1470 extern ROCKSDB_LIBRARY_API rocksdb_fifo_compaction_options_t*
1471 rocksdb_fifo_compaction_options_create();
1472 extern ROCKSDB_LIBRARY_API void
1473 rocksdb_fifo_compaction_options_set_max_table_files_size(
1474     rocksdb_fifo_compaction_options_t* fifo_opts, uint64_t size);
1475 extern ROCKSDB_LIBRARY_API void rocksdb_fifo_compaction_options_destroy(
1476     rocksdb_fifo_compaction_options_t* fifo_opts);
1477 
1478 extern ROCKSDB_LIBRARY_API int rocksdb_livefiles_count(
1479     const rocksdb_livefiles_t*);
1480 extern ROCKSDB_LIBRARY_API const char* rocksdb_livefiles_name(
1481     const rocksdb_livefiles_t*, int index);
1482 extern ROCKSDB_LIBRARY_API int rocksdb_livefiles_level(
1483     const rocksdb_livefiles_t*, int index);
1484 extern ROCKSDB_LIBRARY_API size_t
1485 rocksdb_livefiles_size(const rocksdb_livefiles_t*, int index);
1486 extern ROCKSDB_LIBRARY_API const char* rocksdb_livefiles_smallestkey(
1487     const rocksdb_livefiles_t*, int index, size_t* size);
1488 extern ROCKSDB_LIBRARY_API const char* rocksdb_livefiles_largestkey(
1489     const rocksdb_livefiles_t*, int index, size_t* size);
1490 extern ROCKSDB_LIBRARY_API uint64_t rocksdb_livefiles_entries(
1491     const rocksdb_livefiles_t*, int index);
1492 extern ROCKSDB_LIBRARY_API uint64_t rocksdb_livefiles_deletions(
1493     const rocksdb_livefiles_t*, int index);
1494 extern ROCKSDB_LIBRARY_API void rocksdb_livefiles_destroy(
1495     const rocksdb_livefiles_t*);
1496 
1497 /* Utility Helpers */
1498 
1499 extern ROCKSDB_LIBRARY_API void rocksdb_get_options_from_string(
1500     const rocksdb_options_t* base_options, const char* opts_str,
1501     rocksdb_options_t* new_options, char** errptr);
1502 
1503 extern ROCKSDB_LIBRARY_API void rocksdb_delete_file_in_range(
1504     rocksdb_t* db, const char* start_key, size_t start_key_len,
1505     const char* limit_key, size_t limit_key_len, char** errptr);
1506 
1507 extern ROCKSDB_LIBRARY_API void rocksdb_delete_file_in_range_cf(
1508     rocksdb_t* db, rocksdb_column_family_handle_t* column_family,
1509     const char* start_key, size_t start_key_len, const char* limit_key,
1510     size_t limit_key_len, char** errptr);
1511 
1512 /* Transactions */
1513 
1514 extern ROCKSDB_LIBRARY_API rocksdb_column_family_handle_t*
1515 rocksdb_transactiondb_create_column_family(
1516     rocksdb_transactiondb_t* txn_db,
1517     const rocksdb_options_t* column_family_options,
1518     const char* column_family_name, char** errptr);
1519 
1520 extern ROCKSDB_LIBRARY_API rocksdb_transactiondb_t* rocksdb_transactiondb_open(
1521     const rocksdb_options_t* options,
1522     const rocksdb_transactiondb_options_t* txn_db_options, const char* name,
1523     char** errptr);
1524 
1525 rocksdb_transactiondb_t* rocksdb_transactiondb_open_column_families(
1526     const rocksdb_options_t* options,
1527     const rocksdb_transactiondb_options_t* txn_db_options, const char* name,
1528     int num_column_families, const char* const* column_family_names,
1529     const rocksdb_options_t* const* column_family_options,
1530     rocksdb_column_family_handle_t** column_family_handles, char** errptr);
1531 
1532 extern ROCKSDB_LIBRARY_API const rocksdb_snapshot_t*
1533 rocksdb_transactiondb_create_snapshot(rocksdb_transactiondb_t* txn_db);
1534 
1535 extern ROCKSDB_LIBRARY_API void rocksdb_transactiondb_release_snapshot(
1536     rocksdb_transactiondb_t* txn_db, const rocksdb_snapshot_t* snapshot);
1537 
1538 extern ROCKSDB_LIBRARY_API rocksdb_transaction_t* rocksdb_transaction_begin(
1539     rocksdb_transactiondb_t* txn_db,
1540     const rocksdb_writeoptions_t* write_options,
1541     const rocksdb_transaction_options_t* txn_options,
1542     rocksdb_transaction_t* old_txn);
1543 
1544 extern ROCKSDB_LIBRARY_API void rocksdb_transaction_commit(
1545     rocksdb_transaction_t* txn, char** errptr);
1546 
1547 extern ROCKSDB_LIBRARY_API void rocksdb_transaction_rollback(
1548     rocksdb_transaction_t* txn, char** errptr);
1549 
1550 extern ROCKSDB_LIBRARY_API void rocksdb_transaction_set_savepoint(
1551     rocksdb_transaction_t* txn);
1552 
1553 extern ROCKSDB_LIBRARY_API void rocksdb_transaction_rollback_to_savepoint(
1554     rocksdb_transaction_t* txn, char** errptr);
1555 
1556 extern ROCKSDB_LIBRARY_API void rocksdb_transaction_destroy(
1557     rocksdb_transaction_t* txn);
1558 
1559 // This snapshot should be freed using rocksdb_free
1560 extern ROCKSDB_LIBRARY_API const rocksdb_snapshot_t*
1561 rocksdb_transaction_get_snapshot(rocksdb_transaction_t* txn);
1562 
1563 extern ROCKSDB_LIBRARY_API char* rocksdb_transaction_get(
1564     rocksdb_transaction_t* txn, const rocksdb_readoptions_t* options,
1565     const char* key, size_t klen, size_t* vlen, char** errptr);
1566 
1567 extern ROCKSDB_LIBRARY_API char* rocksdb_transaction_get_cf(
1568     rocksdb_transaction_t* txn, const rocksdb_readoptions_t* options,
1569     rocksdb_column_family_handle_t* column_family, const char* key, size_t klen,
1570     size_t* vlen, char** errptr);
1571 
1572 extern ROCKSDB_LIBRARY_API char* rocksdb_transaction_get_for_update(
1573     rocksdb_transaction_t* txn, const rocksdb_readoptions_t* options,
1574     const char* key, size_t klen, size_t* vlen, unsigned char exclusive,
1575     char** errptr);
1576 
1577 char* rocksdb_transaction_get_for_update_cf(
1578     rocksdb_transaction_t* txn, const rocksdb_readoptions_t* options,
1579     rocksdb_column_family_handle_t* column_family, const char* key, size_t klen,
1580     size_t* vlen, unsigned char exclusive, char** errptr);
1581 
1582 extern ROCKSDB_LIBRARY_API char* rocksdb_transactiondb_get(
1583     rocksdb_transactiondb_t* txn_db, const rocksdb_readoptions_t* options,
1584     const char* key, size_t klen, size_t* vlen, char** errptr);
1585 
1586 extern ROCKSDB_LIBRARY_API char* rocksdb_transactiondb_get_cf(
1587     rocksdb_transactiondb_t* txn_db, const rocksdb_readoptions_t* options,
1588     rocksdb_column_family_handle_t* column_family, const char* key,
1589     size_t keylen, size_t* vallen, char** errptr);
1590 
1591 extern ROCKSDB_LIBRARY_API void rocksdb_transaction_put(
1592     rocksdb_transaction_t* txn, const char* key, size_t klen, const char* val,
1593     size_t vlen, char** errptr);
1594 
1595 extern ROCKSDB_LIBRARY_API void rocksdb_transaction_put_cf(
1596     rocksdb_transaction_t* txn, rocksdb_column_family_handle_t* column_family,
1597     const char* key, size_t klen, const char* val, size_t vlen, char** errptr);
1598 
1599 extern ROCKSDB_LIBRARY_API void rocksdb_transactiondb_put(
1600     rocksdb_transactiondb_t* txn_db, const rocksdb_writeoptions_t* options,
1601     const char* key, size_t klen, const char* val, size_t vlen, char** errptr);
1602 
1603 extern ROCKSDB_LIBRARY_API void rocksdb_transactiondb_put_cf(
1604     rocksdb_transactiondb_t* txn_db, const rocksdb_writeoptions_t* options,
1605     rocksdb_column_family_handle_t* column_family, const char* key,
1606     size_t keylen, const char* val, size_t vallen, char** errptr);
1607 
1608 extern ROCKSDB_LIBRARY_API void rocksdb_transactiondb_write(
1609     rocksdb_transactiondb_t* txn_db, const rocksdb_writeoptions_t* options,
1610     rocksdb_writebatch_t *batch, char** errptr);
1611 
1612 extern ROCKSDB_LIBRARY_API void rocksdb_transaction_merge(
1613     rocksdb_transaction_t* txn, const char* key, size_t klen, const char* val,
1614     size_t vlen, char** errptr);
1615 
1616 extern ROCKSDB_LIBRARY_API void rocksdb_transaction_merge_cf(
1617     rocksdb_transaction_t* txn, rocksdb_column_family_handle_t* column_family,
1618     const char* key, size_t klen, const char* val, size_t vlen, char** errptr);
1619 
1620 extern ROCKSDB_LIBRARY_API void rocksdb_transactiondb_merge(
1621     rocksdb_transactiondb_t* txn_db, const rocksdb_writeoptions_t* options,
1622     const char* key, size_t klen, const char* val, size_t vlen, char** errptr);
1623 
1624 extern ROCKSDB_LIBRARY_API void rocksdb_transactiondb_merge_cf(
1625     rocksdb_transactiondb_t* txn_db, const rocksdb_writeoptions_t* options,
1626     rocksdb_column_family_handle_t* column_family, const char* key, size_t klen,
1627     const char* val, size_t vlen, char** errptr);
1628 
1629 extern ROCKSDB_LIBRARY_API void rocksdb_transaction_delete(
1630     rocksdb_transaction_t* txn, const char* key, size_t klen, char** errptr);
1631 
1632 extern ROCKSDB_LIBRARY_API void rocksdb_transaction_delete_cf(
1633     rocksdb_transaction_t* txn, rocksdb_column_family_handle_t* column_family,
1634     const char* key, size_t klen, char** errptr);
1635 
1636 extern ROCKSDB_LIBRARY_API void rocksdb_transactiondb_delete(
1637     rocksdb_transactiondb_t* txn_db, const rocksdb_writeoptions_t* options,
1638     const char* key, size_t klen, char** errptr);
1639 
1640 extern ROCKSDB_LIBRARY_API void rocksdb_transactiondb_delete_cf(
1641     rocksdb_transactiondb_t* txn_db, const rocksdb_writeoptions_t* options,
1642     rocksdb_column_family_handle_t* column_family, const char* key,
1643     size_t keylen, char** errptr);
1644 
1645 extern ROCKSDB_LIBRARY_API rocksdb_iterator_t*
1646 rocksdb_transaction_create_iterator(rocksdb_transaction_t* txn,
1647                                     const rocksdb_readoptions_t* options);
1648 
1649 extern ROCKSDB_LIBRARY_API rocksdb_iterator_t*
1650 rocksdb_transaction_create_iterator_cf(
1651     rocksdb_transaction_t* txn, const rocksdb_readoptions_t* options,
1652     rocksdb_column_family_handle_t* column_family);
1653 
1654 extern ROCKSDB_LIBRARY_API rocksdb_iterator_t*
1655 rocksdb_transactiondb_create_iterator(rocksdb_transactiondb_t* txn_db,
1656                                       const rocksdb_readoptions_t* options);
1657 
1658 extern ROCKSDB_LIBRARY_API rocksdb_iterator_t*
1659 rocksdb_transactiondb_create_iterator_cf(
1660     rocksdb_transactiondb_t* txn_db, const rocksdb_readoptions_t* options,
1661     rocksdb_column_family_handle_t* column_family);
1662 
1663 extern ROCKSDB_LIBRARY_API void rocksdb_transactiondb_close(
1664     rocksdb_transactiondb_t* txn_db);
1665 
1666 extern ROCKSDB_LIBRARY_API rocksdb_checkpoint_t*
1667 rocksdb_transactiondb_checkpoint_object_create(rocksdb_transactiondb_t* txn_db,
1668                                                char** errptr);
1669 
1670 extern ROCKSDB_LIBRARY_API rocksdb_optimistictransactiondb_t*
1671 rocksdb_optimistictransactiondb_open(const rocksdb_options_t* options,
1672                                      const char* name, char** errptr);
1673 
1674 extern ROCKSDB_LIBRARY_API rocksdb_optimistictransactiondb_t*
1675 rocksdb_optimistictransactiondb_open_column_families(
1676     const rocksdb_options_t* options, const char* name, int num_column_families,
1677     const char* const* column_family_names,
1678     const rocksdb_options_t* const* column_family_options,
1679     rocksdb_column_family_handle_t** column_family_handles, char** errptr);
1680 
1681 extern ROCKSDB_LIBRARY_API rocksdb_t*
1682 rocksdb_optimistictransactiondb_get_base_db(
1683     rocksdb_optimistictransactiondb_t* otxn_db);
1684 
1685 extern ROCKSDB_LIBRARY_API void rocksdb_optimistictransactiondb_close_base_db(
1686     rocksdb_t* base_db);
1687 
1688 extern ROCKSDB_LIBRARY_API rocksdb_transaction_t*
1689 rocksdb_optimistictransaction_begin(
1690     rocksdb_optimistictransactiondb_t* otxn_db,
1691     const rocksdb_writeoptions_t* write_options,
1692     const rocksdb_optimistictransaction_options_t* otxn_options,
1693     rocksdb_transaction_t* old_txn);
1694 
1695 extern ROCKSDB_LIBRARY_API void rocksdb_optimistictransactiondb_close(
1696     rocksdb_optimistictransactiondb_t* otxn_db);
1697 
1698 /* Transaction Options */
1699 
1700 extern ROCKSDB_LIBRARY_API rocksdb_transactiondb_options_t*
1701 rocksdb_transactiondb_options_create();
1702 
1703 extern ROCKSDB_LIBRARY_API void rocksdb_transactiondb_options_destroy(
1704     rocksdb_transactiondb_options_t* opt);
1705 
1706 extern ROCKSDB_LIBRARY_API void rocksdb_transactiondb_options_set_max_num_locks(
1707     rocksdb_transactiondb_options_t* opt, int64_t max_num_locks);
1708 
1709 extern ROCKSDB_LIBRARY_API void rocksdb_transactiondb_options_set_num_stripes(
1710     rocksdb_transactiondb_options_t* opt, size_t num_stripes);
1711 
1712 extern ROCKSDB_LIBRARY_API void
1713 rocksdb_transactiondb_options_set_transaction_lock_timeout(
1714     rocksdb_transactiondb_options_t* opt, int64_t txn_lock_timeout);
1715 
1716 extern ROCKSDB_LIBRARY_API void
1717 rocksdb_transactiondb_options_set_default_lock_timeout(
1718     rocksdb_transactiondb_options_t* opt, int64_t default_lock_timeout);
1719 
1720 extern ROCKSDB_LIBRARY_API rocksdb_transaction_options_t*
1721 rocksdb_transaction_options_create();
1722 
1723 extern ROCKSDB_LIBRARY_API void rocksdb_transaction_options_destroy(
1724     rocksdb_transaction_options_t* opt);
1725 
1726 extern ROCKSDB_LIBRARY_API void rocksdb_transaction_options_set_set_snapshot(
1727     rocksdb_transaction_options_t* opt, unsigned char v);
1728 
1729 extern ROCKSDB_LIBRARY_API void rocksdb_transaction_options_set_deadlock_detect(
1730     rocksdb_transaction_options_t* opt, unsigned char v);
1731 
1732 extern ROCKSDB_LIBRARY_API void rocksdb_transaction_options_set_lock_timeout(
1733     rocksdb_transaction_options_t* opt, int64_t lock_timeout);
1734 
1735 extern ROCKSDB_LIBRARY_API void rocksdb_transaction_options_set_expiration(
1736     rocksdb_transaction_options_t* opt, int64_t expiration);
1737 
1738 extern ROCKSDB_LIBRARY_API void
1739 rocksdb_transaction_options_set_deadlock_detect_depth(
1740     rocksdb_transaction_options_t* opt, int64_t depth);
1741 
1742 extern ROCKSDB_LIBRARY_API void
1743 rocksdb_transaction_options_set_max_write_batch_size(
1744     rocksdb_transaction_options_t* opt, size_t size);
1745 
1746 extern ROCKSDB_LIBRARY_API rocksdb_optimistictransaction_options_t*
1747 rocksdb_optimistictransaction_options_create();
1748 
1749 extern ROCKSDB_LIBRARY_API void rocksdb_optimistictransaction_options_destroy(
1750     rocksdb_optimistictransaction_options_t* opt);
1751 
1752 extern ROCKSDB_LIBRARY_API void
1753 rocksdb_optimistictransaction_options_set_set_snapshot(
1754     rocksdb_optimistictransaction_options_t* opt, unsigned char v);
1755 
1756 // referring to convention (3), this should be used by client
1757 // to free memory that was malloc()ed
1758 extern ROCKSDB_LIBRARY_API void rocksdb_free(void* ptr);
1759 
1760 extern ROCKSDB_LIBRARY_API rocksdb_pinnableslice_t* rocksdb_get_pinned(
1761     rocksdb_t* db, const rocksdb_readoptions_t* options, const char* key,
1762     size_t keylen, char** errptr);
1763 extern ROCKSDB_LIBRARY_API rocksdb_pinnableslice_t* rocksdb_get_pinned_cf(
1764     rocksdb_t* db, const rocksdb_readoptions_t* options,
1765     rocksdb_column_family_handle_t* column_family, const char* key,
1766     size_t keylen, char** errptr);
1767 extern ROCKSDB_LIBRARY_API void rocksdb_pinnableslice_destroy(
1768     rocksdb_pinnableslice_t* v);
1769 extern ROCKSDB_LIBRARY_API const char* rocksdb_pinnableslice_value(
1770     const rocksdb_pinnableslice_t* t, size_t* vlen);
1771 
1772 extern ROCKSDB_LIBRARY_API rocksdb_memory_consumers_t*
1773     rocksdb_memory_consumers_create();
1774 extern ROCKSDB_LIBRARY_API void rocksdb_memory_consumers_add_db(
1775     rocksdb_memory_consumers_t* consumers, rocksdb_t* db);
1776 extern ROCKSDB_LIBRARY_API void rocksdb_memory_consumers_add_cache(
1777     rocksdb_memory_consumers_t* consumers, rocksdb_cache_t* cache);
1778 extern ROCKSDB_LIBRARY_API void rocksdb_memory_consumers_destroy(
1779     rocksdb_memory_consumers_t* consumers);
1780 extern ROCKSDB_LIBRARY_API rocksdb_memory_usage_t*
1781 rocksdb_approximate_memory_usage_create(rocksdb_memory_consumers_t* consumers,
1782                                        char** errptr);
1783 extern ROCKSDB_LIBRARY_API void rocksdb_approximate_memory_usage_destroy(
1784     rocksdb_memory_usage_t* usage);
1785 
1786 extern ROCKSDB_LIBRARY_API uint64_t
1787 rocksdb_approximate_memory_usage_get_mem_table_total(
1788     rocksdb_memory_usage_t* memory_usage);
1789 extern ROCKSDB_LIBRARY_API uint64_t
1790 rocksdb_approximate_memory_usage_get_mem_table_unflushed(
1791     rocksdb_memory_usage_t* memory_usage);
1792 extern ROCKSDB_LIBRARY_API uint64_t
1793 rocksdb_approximate_memory_usage_get_mem_table_readers_total(
1794     rocksdb_memory_usage_t* memory_usage);
1795 extern ROCKSDB_LIBRARY_API uint64_t
1796 rocksdb_approximate_memory_usage_get_cache_total(
1797     rocksdb_memory_usage_t* memory_usage);
1798 
1799 #ifdef __cplusplus
1800 }  /* end extern "C" */
1801 #endif
1802