commit
d620d4368a
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,87 @@ |
||||
#ifndef _MDB_H_ |
||||
#define _MDB_H_ |
||||
|
||||
#include <sys/types.h> |
||||
|
||||
struct MDB_cursor; |
||||
struct MDB_txn; |
||||
struct MDB_db; |
||||
struct MDB_env; |
||||
|
||||
typedef struct MDB_cursor MDB_cursor; |
||||
typedef struct MDB_txn MDB_txn; |
||||
typedef struct MDB_db MDB_db; |
||||
typedef struct MDB_env MDB_env; |
||||
|
||||
typedef struct MDB_val { |
||||
void *mv_data; |
||||
size_t mv_size; |
||||
} MDB_val; |
||||
|
||||
typedef int (MDB_cmp_func)(const MDB_val *a, const MDB_val *b); |
||||
typedef void (MDB_rel_func)(void *ptr, void *oldptr); |
||||
|
||||
#define MDB_NOOVERWRITE 1 |
||||
|
||||
typedef enum MDB_cursor_op { /* cursor operations */ |
||||
MDB_CURSOR, /* position at given key */ |
||||
MDB_CURSOR_EXACT, /* position at key, or fail */ |
||||
MDB_FIRST, |
||||
MDB_NEXT, |
||||
MDB_LAST, /* not implemented */ |
||||
MDB_PREV /* not implemented */ |
||||
} MDB_cursor_op; |
||||
|
||||
/* return codes */ |
||||
#define MDB_FAIL -1 |
||||
#define MDB_SUCCESS 0 |
||||
|
||||
/* DB flags */ |
||||
#define MDB_REVERSEKEY 0x02 /* use reverse string keys */ |
||||
#define MDB_NOSYNC 0x10000 /* don't fsync after commit */ |
||||
#define MDB_RDONLY 0x20000 /* read only */ |
||||
|
||||
/* environment flags */ |
||||
#define MDB_FIXEDMAP 0x01 /* mmap at a fixed address */ |
||||
|
||||
typedef struct MDB_stat { |
||||
time_t ms_created_at; |
||||
unsigned int ms_psize; |
||||
unsigned int ms_depth; |
||||
unsigned long ms_branch_pages; |
||||
unsigned long ms_leaf_pages; |
||||
unsigned long ms_overflow_pages; |
||||
unsigned long ms_revisions; |
||||
unsigned long ms_entries; |
||||
} MDB_stat; |
||||
|
||||
int mdbenv_create(MDB_env **env, size_t size); |
||||
int mdbenv_open(MDB_env *env, const char *path, unsigned int flags, mode_t mode); |
||||
int mdbenv_stat(MDB_env *env, MDB_stat **stat); |
||||
void mdbenv_close(MDB_env *env); |
||||
int mdbenv_get_flags(MDB_env *env, unsigned int *flags); |
||||
int mdbenv_get_path(MDB_env *env, const char **path); |
||||
int mdbenv_sync(MDB_env *env); |
||||
int mdbenv_compact(MDB_env *env); |
||||
|
||||
int mdb_txn_begin(MDB_env *env, int rdonly, MDB_txn **txn); |
||||
int mdb_txn_commit(MDB_txn *txn); |
||||
void mdb_txn_abort(MDB_txn *txn); |
||||
|
||||
int mdb_open(MDB_env *env, MDB_txn *txn, const char *name, unsigned int flags, MDB_db **db); |
||||
int mdb_stat(MDB_db *db, MDB_stat **stat); |
||||
void mdb_close(MDB_db *db); |
||||
|
||||
int mdb_get(MDB_db *db, MDB_txn *txn, MDB_val *key, MDB_val *data); |
||||
int mdb_put(MDB_db *db, MDB_txn *txn, MDB_val *key, MDB_val *data, |
||||
unsigned int flags); |
||||
int mdb_del(MDB_db *db, MDB_txn *txn, MDB_val *key, MDB_val *data); |
||||
|
||||
int mdb_cursor_open(MDB_db *db, MDB_txn *txn, MDB_cursor **cursor); |
||||
void mdb_cursor_close(MDB_cursor *cursor); |
||||
int mdb_cursor_get(MDB_cursor *cursor, MDB_val *key, MDB_val *data, |
||||
MDB_cursor_op op); |
||||
|
||||
int mdb_cmp(MDB_db *db, const MDB_val *a, const MDB_val *b); |
||||
|
||||
#endif /* _MDB_H_ */ |
@ -0,0 +1,56 @@ |
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
#include <time.h> |
||||
#include "mdb.h" |
||||
|
||||
int main(int argc,char * argv[]) |
||||
{ |
||||
int i = 0, rc; |
||||
MDB_env *env; |
||||
MDB_db *db; |
||||
MDB_val key, data; |
||||
MDB_txn *txn; |
||||
MDB_stat *mst; |
||||
int count; |
||||
int *values; |
||||
char sval[32]; |
||||
|
||||
srandom(time(NULL)); |
||||
|
||||
count = random()%512;
|
||||
values = (int *)malloc(count*sizeof(int)); |
||||
|
||||
for(i = 0;i<count;i++) { |
||||
values[i] = random()%1024; |
||||
} |
||||
|
||||
rc = mdbenv_create(&env, 10485760); |
||||
rc = mdbenv_open(env, "./testdb", MDB_FIXEDMAP, 0664); |
||||
rc = mdb_txn_begin(env, 0, &txn); |
||||
rc = mdb_open(env, txn, NULL, 0, &db); |
||||
|
||||
key.mv_size = sizeof(int); |
||||
key.mv_data = sval; |
||||
data.mv_size = sizeof(sval); |
||||
data.mv_data = sval; |
||||
|
||||
for (i=0;i<count;i++) {
|
||||
sprintf(sval, "%03x %d foo bar", values[i], values[i]); |
||||
mdb_put(db, txn, &key, &data, 0); |
||||
}
|
||||
rc = mdb_txn_commit(txn); |
||||
rc = mdbenv_stat(env, &mst); |
||||
|
||||
for (i= count - 1; i > -1; i-= (random()%5)) {
|
||||
rc = mdb_txn_begin(env, 0, &txn); |
||||
sprintf(sval, "%03x ", values[i]); |
||||
rc = mdb_del(db, txn, &key, NULL); |
||||
rc = mdb_txn_commit(txn); |
||||
} |
||||
free(values); |
||||
rc = mdbenv_stat(env, &mst); |
||||
mdb_close(db); |
||||
mdbenv_close(env); |
||||
|
||||
return 0; |
||||
} |
Loading…
Reference in new issue