27 using leveldb::kMajorVersion;
28 using leveldb::kMinorVersion;
65 const char* a,
size_t alen,
66 const char* b,
size_t blen);
67 const char* (*name_)(
void*);
77 virtual const char*
Name()
const {
89 const char* (*name_)(
void*);
92 const char*
const* key_array,
const size_t* key_length_array,
94 size_t* filter_length);
97 const char* key,
size_t length,
98 const char* filter,
size_t filter_length);
104 virtual const char*
Name()
const {
109 std::vector<const char*> key_pointers(n);
110 std::vector<size_t> key_sizes(n);
111 for (
int i = 0; i < n; i++) {
112 key_pointers[i] = keys[i].
data();
113 key_sizes[i] = keys[i].
size();
116 char* filter = (*create_)(
state_, &key_pointers[0], &key_sizes[0], n, &len);
117 dst->append(filter, len);
132 static bool SaveError(
char** errptr,
const Status& s) {
133 assert(errptr != NULL);
136 }
else if (*errptr == NULL) {
137 *errptr = strdup(s.
ToString().c_str());
141 *errptr = strdup(s.
ToString().c_str());
146 static char* CopyString(
const std::string& str) {
147 char* result =
reinterpret_cast<char*
>(malloc(
sizeof(
char) * str.size()));
148 memcpy(result, str.data(),
sizeof(char) * str.size());
157 if (SaveError(errptr, DB::Open(options->
rep, std::string(name), &db))) {
173 const char* key,
size_t keylen,
174 const char* val,
size_t vallen,
183 const char* key,
size_t keylen,
200 const char* key,
size_t keylen,
207 *vallen = tmp.size();
208 result = CopyString(tmp);
212 SaveError(errptr, s);
242 const char* propname) {
246 return strdup(tmp.c_str());
255 const char*
const* range_start_key,
const size_t* range_start_key_len,
256 const char*
const* range_limit_key,
const size_t* range_limit_key_len,
259 for (
int i = 0; i < num_ranges; i++) {
260 ranges[i].
start =
Slice(range_start_key[i], range_start_key_len[i]);
261 ranges[i].
limit =
Slice(range_limit_key[i], range_limit_key_len[i]);
269 const char* start_key,
size_t start_key_len,
270 const char* limit_key,
size_t limit_key_len) {
274 (start_key ? (a =
Slice(start_key, start_key_len), &a) : NULL),
275 (limit_key ? (b =
Slice(limit_key, limit_key_len), &b) : NULL));
351 const char* key,
size_t klen,
352 const char* val,
size_t vlen) {
358 const char* key,
size_t klen) {
365 void (*put)(
void*,
const char* k,
size_t klen,
const char* v,
size_t vlen),
366 void (*deleted)(
void*,
const char* k,
size_t klen)) {
367 class H :
public WriteBatch::Handler {
370 void (*put_)(
void*,
const char* k,
size_t klen,
const char* v,
size_t vlen);
371 void (*deleted_)(
void*,
const char* k,
size_t klen);
375 virtual void Delete(
const Slice& key) {
376 (*deleted_)(state_, key.
data(), key.
size());
380 handler.state_ =
state;
382 handler.deleted_ = deleted;
455 void (*destructor)(
void*),
458 const char* a,
size_t alen,
459 const char* b,
size_t blen),
460 const char* (*
name)(
void*)) {
475 void (*destructor)(
void*),
476 char* (*create_filter)(
478 const char*
const* key_array,
const size_t* key_length_array,
480 size_t* filter_length),
481 unsigned char (*key_may_match)(
483 const char* key,
size_t length,
484 const char* filter,
size_t filter_length),
485 const char* (*
name)(
void*)) {
489 result->
create_ = create_filter;
505 ~Wrapper() {
delete rep_; }
506 const char*
Name()
const {
return rep_->
Name(); }
513 static void DoNothing(
void*) { }
515 Wrapper* wrapper =
new Wrapper;
517 wrapper->state_ = NULL;
518 wrapper->destructor_ = &Wrapper::DoNothing;
573 result->
rep = Env::Default();
588 return kMajorVersion;
592 return kMinorVersion;
struct leveldb_cache_t leveldb_cache_t
virtual void CompactRange(const Slice *begin, const Slice *end)=0
void leveldb_writebatch_clear(leveldb_writebatch_t *b)
void leveldb_options_set_cache(leveldb_options_t *opt, leveldb_cache_t *c)
void leveldb_options_set_paranoid_checks(leveldb_options_t *opt, unsigned char v)
char * leveldb_get(leveldb_t *db, const leveldb_readoptions_t *options, const char *key, size_t keylen, size_t *vallen, char **errptr)
unsigned char(* key_match_)(void *, const char *key, size_t length, const char *filter, size_t filter_length)
void leveldb_cache_destroy(leveldb_cache_t *cache)
void leveldb_iter_seek_to_last(leveldb_iterator_t *iter)
struct leveldb_env_t leveldb_env_t
void leveldb_options_set_block_restart_interval(leveldb_options_t *opt, int n)
virtual Status Write(const WriteOptions &options, WriteBatch *updates)=0
virtual ~leveldb_filterpolicy_t()
virtual void FindShortSuccessor(std::string *key) const
int leveldb_minor_version()
void(* destructor_)(void *)
const char * data() const
void leveldb_release_snapshot(leveldb_t *db, const leveldb_snapshot_t *snapshot)
virtual ~leveldb_comparator_t()
struct leveldb_filterpolicy_t leveldb_filterpolicy_t
const char * leveldb_iter_key(const leveldb_iterator_t *iter, size_t *klen)
void leveldb_iter_prev(leveldb_iterator_t *iter)
int leveldb_major_version()
void leveldb_options_set_create_if_missing(leveldb_options_t *opt, unsigned char v)
void leveldb_destroy_db(const leveldb_options_t *options, const char *name, char **errptr)
void leveldb_options_set_filter_policy(leveldb_options_t *opt, leveldb_filterpolicy_t *policy)
leveldb_writebatch_t * leveldb_writebatch_create()
void leveldb_iter_next(leveldb_iterator_t *iter)
const Snapshot * snapshot
virtual Status status() const =0
struct leveldb_snapshot_t leveldb_snapshot_t
leveldb_comparator_t * leveldb_comparator_create(void *state, void(*destructor)(void *), int(*compare)(void *, const char *a, size_t alen, const char *b, size_t blen), const char *(*name)(void *))
void leveldb_put(leveldb_t *db, const leveldb_writeoptions_t *options, const char *key, size_t keylen, const char *val, size_t vallen, char **errptr)
leveldb_readoptions_t * leveldb_readoptions_create()
struct leveldb_iterator_t leveldb_iterator_t
virtual Iterator * NewIterator(const ReadOptions &options)=0
void Delete(const Slice &key)
void leveldb_write(leveldb_t *db, const leveldb_writeoptions_t *options, leveldb_writebatch_t *batch, char **errptr)
virtual Slice value() const =0
void leveldb_iter_get_error(const leveldb_iterator_t *iter, char **errptr)
virtual const char * Name() const =0
char *(* create_)(void *, const char *const *key_array, const size_t *key_length_array, int num_keys, size_t *filter_length)
struct leveldb_t leveldb_t
Status RepairDB(const std::string &dbname, const Options &options)
void leveldb_options_destroy(leveldb_options_t *options)
Status DestroyDB(const std::string &dbname, const Options &options)
virtual void SeekToLast()=0
void leveldb_writebatch_destroy(leveldb_writebatch_t *b)
struct leveldb_writebatch_t leveldb_writebatch_t
void(* destructor_)(void *)
const leveldb_snapshot_t * leveldb_create_snapshot(leveldb_t *db)
virtual const char * Name() const
struct leveldb_options_t leveldb_options_t
virtual void ReleaseSnapshot(const Snapshot *snapshot)=0
void leveldb_writebatch_delete(leveldb_writebatch_t *b, const char *key, size_t klen)
char * leveldb_property_value(leveldb_t *db, const char *propname)
void leveldb_iter_destroy(leveldb_iterator_t *iter)
struct leveldb_comparator_t leveldb_comparator_t
void leveldb_iter_seek_to_first(leveldb_iterator_t *iter)
virtual void GetApproximateSizes(const Range *range, int n, uint64_t *sizes)=0
unsigned long long uint64_t
void leveldb_free(void *ptr)
leveldb_writeoptions_t * leveldb_writeoptions_create()
leveldb_env_t * leveldb_create_default_env()
void leveldb_writebatch_put(leveldb_writebatch_t *b, const char *key, size_t klen, const char *val, size_t vlen)
unsigned char leveldb_iter_valid(const leveldb_iterator_t *iter)
virtual void FindShortestSeparator(std::string *, const Slice &) const
void leveldb_options_set_comparator(leveldb_options_t *opt, leveldb_comparator_t *cmp)
virtual void Seek(const Slice &target)=0
void leveldb_options_set_max_open_files(leveldb_options_t *opt, int n)
const FilterPolicy * NewBloomFilterPolicy(int bits_per_key)
const char * leveldb_iter_value(const leveldb_iterator_t *iter, size_t *vlen)
void leveldb_compact_range(leveldb_t *db, const char *start_key, size_t start_key_len, const char *limit_key, size_t limit_key_len)
void leveldb_options_set_error_if_exists(leveldb_options_t *opt, unsigned char v)
virtual void SeekToFirst()=0
void leveldb_close(leveldb_t *db)
void leveldb_options_set_info_log(leveldb_options_t *opt, leveldb_logger_t *l)
struct leveldb_readoptions_t leveldb_readoptions_t
leveldb_filterpolicy_t * leveldb_filterpolicy_create(void *state, void(*destructor)(void *), char *(*create_filter)(void *, const char *const *key_array, const size_t *key_length_array, int num_keys, size_t *filter_length), unsigned char(*key_may_match)(void *, const char *key, size_t length, const char *filter, size_t filter_length), const char *(*name)(void *))
void leveldb_readoptions_set_snapshot(leveldb_readoptions_t *opt, const leveldb_snapshot_t *snap)
int(* compare_)(void *, const char *a, size_t alen, const char *b, size_t blen)
Status Iterate(Handler *handler) const
void leveldb_options_set_compression(leveldb_options_t *opt, int t)
void leveldb_filterpolicy_destroy(leveldb_filterpolicy_t *filter)
const FilterPolicy * filter_policy
Cache * NewLRUCache(size_t capacity)
CompressionType compression
void leveldb_delete(leveldb_t *db, const leveldb_writeoptions_t *options, const char *key, size_t keylen, char **errptr)
leveldb_filterpolicy_t * leveldb_filterpolicy_create_bloom(int bits_per_key)
virtual Status Get(const ReadOptions &options, const Slice &key, std::string *value)=0
virtual bool KeyMayMatch(const Slice &key, const Slice &filter) const
virtual bool Valid() const =0
leveldb_options_t * leveldb_options_create()
void leveldb_iter_seek(leveldb_iterator_t *iter, const char *k, size_t klen)
void leveldb_env_destroy(leveldb_env_t *env)
virtual void CreateFilter(const Slice *keys, int n, std::string *dst) const =0
int block_restart_interval
void leveldb_readoptions_destroy(leveldb_readoptions_t *opt)
void leveldb_readoptions_set_verify_checksums(leveldb_readoptions_t *opt, unsigned char v)
virtual const char * Name() const
virtual Slice key() const =0
struct leveldb_writeoptions_t leveldb_writeoptions_t
virtual int Compare(const Slice &a, const Slice &b) const
const char *(* name_)(void *)
virtual const Snapshot * GetSnapshot()=0
void leveldb_approximate_sizes(leveldb_t *db, int num_ranges, const char *const *range_start_key, const size_t *range_start_key_len, const char *const *range_limit_key, const size_t *range_limit_key_len, uint64_t *sizes)
virtual bool GetProperty(const Slice &property, std::string *value)=0
void leveldb_comparator_destroy(leveldb_comparator_t *cmp)
void leveldb_writeoptions_destroy(leveldb_writeoptions_t *opt)
void leveldb_options_set_env(leveldb_options_t *opt, leveldb_env_t *env)
void leveldb_readoptions_set_fill_cache(leveldb_readoptions_t *opt, unsigned char v)
void leveldb_options_set_write_buffer_size(leveldb_options_t *opt, size_t s)
leveldb_iterator_t * leveldb_create_iterator(leveldb_t *db, const leveldb_readoptions_t *options)
leveldb_cache_t * leveldb_cache_create_lru(size_t capacity)
virtual bool KeyMayMatch(const Slice &key, const Slice &filter) const =0
virtual Status Delete(const WriteOptions &options, const Slice &key)=0
const char *(* name_)(void *)
void Put(const Slice &key, const Slice &value)
void leveldb_writeoptions_set_sync(leveldb_writeoptions_t *opt, unsigned char v)
virtual void CreateFilter(const Slice *keys, int n, std::string *dst) const
leveldb_t * leveldb_open(const leveldb_options_t *options, const char *name, char **errptr)
const Comparator * comparator
virtual Status Put(const WriteOptions &options, const Slice &key, const Slice &value)=0
void leveldb_repair_db(const leveldb_options_t *options, const char *name, char **errptr)
void leveldb_options_set_block_size(leveldb_options_t *opt, size_t s)
void leveldb_writebatch_iterate(leveldb_writebatch_t *b, void *state, void(*put)(void *, const char *k, size_t klen, const char *v, size_t vlen), void(*deleted)(void *, const char *k, size_t klen))
std::string ToString() const