1
/* Copyright (c) 2011 The LevelDB Authors. All rights reserved.
2
Use of this source code is governed by a BSD-style license that can be
3
found in the LICENSE file. See the AUTHORS file for names of contributors.
5
C bindings for leveldb. May be useful as a stable ABI that can be
6
used by programs that keep leveldb in a shared library, or for
10
. getters for the option types
11
. custom comparators that implement key shortening
12
. capturing post-write-snapshot
13
. custom iter, db, env, cache implementations using just the C bindings
17
(1) We expose just opaque struct pointers and functions to clients.
18
This allows us to change internal representations without having to
21
(2) For simplicity, there is no equivalent to the Slice type. Instead,
22
the caller has to pass the pointer and length as separate
25
(3) Errors are represented by a null-terminated c string. NULL
26
means no error. All operations that can raise an error are passed
27
a "char** errptr" as the last argument. One of the following must
30
*errptr points to a malloc()ed null-terminated error message
31
On success, a leveldb routine leaves *errptr unchanged.
32
On failure, leveldb frees the old value of *errptr and
33
set *errptr to a malloc()ed error message.
35
(4) Bools have the type unsigned char (0 == false; rest == true)
37
(5) All of the pointer arguments must be non-NULL.
40
#ifndef STORAGE_LEVELDB_INCLUDE_C_H_
41
#define STORAGE_LEVELDB_INCLUDE_C_H_
53
typedef struct leveldb_t leveldb_t;
54
typedef struct leveldb_cache_t leveldb_cache_t;
55
typedef struct leveldb_comparator_t leveldb_comparator_t;
56
typedef struct leveldb_env_t leveldb_env_t;
57
typedef struct leveldb_filelock_t leveldb_filelock_t;
58
typedef struct leveldb_iterator_t leveldb_iterator_t;
59
typedef struct leveldb_logger_t leveldb_logger_t;
60
typedef struct leveldb_options_t leveldb_options_t;
61
typedef struct leveldb_randomfile_t leveldb_randomfile_t;
62
typedef struct leveldb_readoptions_t leveldb_readoptions_t;
63
typedef struct leveldb_seqfile_t leveldb_seqfile_t;
64
typedef struct leveldb_snapshot_t leveldb_snapshot_t;
65
typedef struct leveldb_writablefile_t leveldb_writablefile_t;
66
typedef struct leveldb_writebatch_t leveldb_writebatch_t;
67
typedef struct leveldb_writeoptions_t leveldb_writeoptions_t;
71
extern leveldb_t* leveldb_open(
72
const leveldb_options_t* options,
76
extern void leveldb_close(leveldb_t* db);
78
extern void leveldb_put(
80
const leveldb_writeoptions_t* options,
81
const char* key, size_t keylen,
82
const char* val, size_t vallen,
85
extern void leveldb_delete(
87
const leveldb_writeoptions_t* options,
88
const char* key, size_t keylen,
91
extern void leveldb_write(
93
const leveldb_writeoptions_t* options,
94
leveldb_writebatch_t* batch,
97
/* Returns NULL if not found. A malloc()ed array otherwise.
98
Stores the length of the array in *vallen. */
99
extern char* leveldb_get(
101
const leveldb_readoptions_t* options,
102
const char* key, size_t keylen,
106
extern leveldb_iterator_t* leveldb_create_iterator(
108
const leveldb_readoptions_t* options);
110
extern const leveldb_snapshot_t* leveldb_create_snapshot(
113
extern void leveldb_release_snapshot(
115
const leveldb_snapshot_t* snapshot);
117
/* Returns NULL if property name is unknown.
118
Else returns a pointer to a malloc()-ed null-terminated value. */
119
extern char* leveldb_property_value(
121
const char* propname);
123
extern void leveldb_approximate_sizes(
126
const char* const* range_start_key, const size_t* range_start_key_len,
127
const char* const* range_limit_key, const size_t* range_limit_key_len,
130
/* Management operations */
132
extern void leveldb_destroy_db(
133
const leveldb_options_t* options,
137
extern void leveldb_repair_db(
138
const leveldb_options_t* options,
144
extern void leveldb_iter_destroy(leveldb_iterator_t*);
145
extern unsigned char leveldb_iter_valid(const leveldb_iterator_t*);
146
extern void leveldb_iter_seek_to_first(leveldb_iterator_t*);
147
extern void leveldb_iter_seek_to_last(leveldb_iterator_t*);
148
extern void leveldb_iter_seek(leveldb_iterator_t*, const char* k, size_t klen);
149
extern void leveldb_iter_next(leveldb_iterator_t*);
150
extern void leveldb_iter_prev(leveldb_iterator_t*);
151
extern const char* leveldb_iter_key(const leveldb_iterator_t*, size_t* klen);
152
extern const char* leveldb_iter_value(const leveldb_iterator_t*, size_t* vlen);
153
extern void leveldb_iter_get_error(const leveldb_iterator_t*, char** errptr);
157
extern leveldb_writebatch_t* leveldb_writebatch_create();
158
extern void leveldb_writebatch_destroy(leveldb_writebatch_t*);
159
extern void leveldb_writebatch_clear(leveldb_writebatch_t*);
160
extern void leveldb_writebatch_put(
161
leveldb_writebatch_t*,
162
const char* key, size_t klen,
163
const char* val, size_t vlen);
164
extern void leveldb_writebatch_delete(
165
leveldb_writebatch_t*,
166
const char* key, size_t klen);
167
extern void leveldb_writebatch_iterate(
168
leveldb_writebatch_t*,
170
void (*put)(void*, const char* k, size_t klen, const char* v, size_t vlen),
171
void (*deleted)(void*, const char* k, size_t klen));
175
extern leveldb_options_t* leveldb_options_create();
176
extern void leveldb_options_destroy(leveldb_options_t*);
177
extern void leveldb_options_set_comparator(
179
leveldb_comparator_t*);
180
extern void leveldb_options_set_create_if_missing(
181
leveldb_options_t*, unsigned char);
182
extern void leveldb_options_set_error_if_exists(
183
leveldb_options_t*, unsigned char);
184
extern void leveldb_options_set_paranoid_checks(
185
leveldb_options_t*, unsigned char);
186
extern void leveldb_options_set_env(leveldb_options_t*, leveldb_env_t*);
187
extern void leveldb_options_set_info_log(leveldb_options_t*, leveldb_logger_t*);
188
extern void leveldb_options_set_write_buffer_size(leveldb_options_t*, size_t);
189
extern void leveldb_options_set_max_open_files(leveldb_options_t*, int);
190
extern void leveldb_options_set_cache(leveldb_options_t*, leveldb_cache_t*);
191
extern void leveldb_options_set_block_size(leveldb_options_t*, size_t);
192
extern void leveldb_options_set_block_restart_interval(leveldb_options_t*, int);
195
leveldb_no_compression = 0,
196
leveldb_snappy_compression = 1
198
extern void leveldb_options_set_compression(leveldb_options_t*, int);
202
extern leveldb_comparator_t* leveldb_comparator_create(
204
void (*destructor)(void*),
207
const char* a, size_t alen,
208
const char* b, size_t blen),
209
const char* (*name)(void*));
210
extern void leveldb_comparator_destroy(leveldb_comparator_t*);
214
extern leveldb_readoptions_t* leveldb_readoptions_create();
215
extern void leveldb_readoptions_destroy(leveldb_readoptions_t*);
216
extern void leveldb_readoptions_set_verify_checksums(
217
leveldb_readoptions_t*,
219
extern void leveldb_readoptions_set_fill_cache(
220
leveldb_readoptions_t*, unsigned char);
221
extern void leveldb_readoptions_set_snapshot(
222
leveldb_readoptions_t*,
223
const leveldb_snapshot_t*);
227
extern leveldb_writeoptions_t* leveldb_writeoptions_create();
228
extern void leveldb_writeoptions_destroy(leveldb_writeoptions_t*);
229
extern void leveldb_writeoptions_set_sync(
230
leveldb_writeoptions_t*, unsigned char);
234
extern leveldb_cache_t* leveldb_cache_create_lru(size_t capacity);
235
extern void leveldb_cache_destroy(leveldb_cache_t* cache);
239
extern leveldb_env_t* leveldb_create_default_env();
240
extern void leveldb_env_destroy(leveldb_env_t*);
243
} /* end extern "C" */
246
#endif /* STORAGE_LEVELDB_INCLUDE_C_H_ */