mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-20 22:59:34 -05:00
Start DB restructuring
This commit is contained in:
parent
194334b2f7
commit
cb45191793
2 changed files with 38 additions and 32 deletions
|
|
@ -188,9 +188,9 @@ SLIST_HEAD(page_stack, MDB_ppage);
|
||||||
#define CURSOR_PUSH(c,p) SLIST_INSERT_HEAD(&(c)->mc_stack, p, mp_entry)
|
#define CURSOR_PUSH(c,p) SLIST_INSERT_HEAD(&(c)->mc_stack, p, mp_entry)
|
||||||
|
|
||||||
struct MDB_cursor {
|
struct MDB_cursor {
|
||||||
MDB_db *mc_db;
|
|
||||||
MDB_txn *mc_txn;
|
MDB_txn *mc_txn;
|
||||||
struct page_stack mc_stack; /* stack of parent pages */
|
struct page_stack mc_stack; /* stack of parent pages */
|
||||||
|
MDB_dbi mc_dbi;
|
||||||
short mc_initialized; /* 1 if initialized */
|
short mc_initialized; /* 1 if initialized */
|
||||||
short mc_eof; /* 1 if end is reached */
|
short mc_eof; /* 1 if end is reached */
|
||||||
};
|
};
|
||||||
|
|
@ -211,6 +211,24 @@ typedef struct MDB_node {
|
||||||
char mn_data[1];
|
char mn_data[1];
|
||||||
} MDB_node;
|
} MDB_node;
|
||||||
|
|
||||||
|
typedef struct MDB_dbx {
|
||||||
|
char *md_name;
|
||||||
|
MDB_cmp_func *md_cmp; /* user compare function */
|
||||||
|
MDB_rel_func *md_rel; /* user relocate function */
|
||||||
|
MDB_db *md_parent; /* parent tree */
|
||||||
|
} MDB_dbx;
|
||||||
|
|
||||||
|
typedef struct MDB_db {
|
||||||
|
uint32_t md_pad;
|
||||||
|
uint16_t md_flags;
|
||||||
|
uint16_t md_depth;
|
||||||
|
ULONG md_branch_pages;
|
||||||
|
ULONG md_leaf_pages;
|
||||||
|
ULONG md_overflow_pages;
|
||||||
|
ULONG md_entries;
|
||||||
|
pgno_t md_root;
|
||||||
|
} MDB_db;
|
||||||
|
|
||||||
struct MDB_txn {
|
struct MDB_txn {
|
||||||
pgno_t mt_root; /* current / new root page */
|
pgno_t mt_root; /* current / new root page */
|
||||||
pgno_t mt_next_pgno; /* next unallocated page */
|
pgno_t mt_next_pgno; /* next unallocated page */
|
||||||
|
|
@ -222,29 +240,16 @@ struct MDB_txn {
|
||||||
struct dirty_queue *dirty_queue; /* modified pages */
|
struct dirty_queue *dirty_queue; /* modified pages */
|
||||||
MDB_reader *reader;
|
MDB_reader *reader;
|
||||||
} mt_u;
|
} mt_u;
|
||||||
|
MDB_dbx *mt_dbxs; /* array */
|
||||||
|
MDB_db **mt_dbs; /* array of ptrs */
|
||||||
|
unsigned int mt_numdbs;
|
||||||
|
|
||||||
#define MDB_TXN_RDONLY 0x01 /* read-only transaction */
|
#define MDB_TXN_RDONLY 0x01 /* read-only transaction */
|
||||||
#define MDB_TXN_ERROR 0x02 /* an error has occurred */
|
#define MDB_TXN_ERROR 0x02 /* an error has occurred */
|
||||||
#define MDB_TXN_METOGGLE 0x04 /* used meta page 1 */
|
#define MDB_TXN_METOGGLE 0x04 /* used meta page 1 */
|
||||||
unsigned int mt_flags;
|
unsigned int mt_flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MDB_db {
|
|
||||||
MDB_db *md_next;
|
|
||||||
char *md_name;
|
|
||||||
MDB_cmp_func *md_cmp; /* user compare function */
|
|
||||||
MDB_rel_func *md_rel; /* user relocate function */
|
|
||||||
MDB_db *md_parent; /* parent tree */
|
|
||||||
MDB_env *md_env;
|
|
||||||
uint32_t md_pad;
|
|
||||||
uint16_t md_flags;
|
|
||||||
uint16_t md_depth;
|
|
||||||
ULONG md_branch_pages;
|
|
||||||
ULONG md_leaf_pages;
|
|
||||||
ULONG md_overflow_pages;
|
|
||||||
ULONG md_entries;
|
|
||||||
pgno_t md_root;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct MDB_env {
|
struct MDB_env {
|
||||||
int me_fd;
|
int me_fd;
|
||||||
int me_lfd;
|
int me_lfd;
|
||||||
|
|
@ -253,7 +258,6 @@ struct MDB_env {
|
||||||
char *me_path;
|
char *me_path;
|
||||||
char *me_map;
|
char *me_map;
|
||||||
MDB_txninfo *me_txns;
|
MDB_txninfo *me_txns;
|
||||||
MDB_db me_db; /* first DB */
|
|
||||||
MDB_meta me_meta;
|
MDB_meta me_meta;
|
||||||
MDB_txn *me_txn; /* current write transaction */
|
MDB_txn *me_txn; /* current write transaction */
|
||||||
size_t me_mapsize;
|
size_t me_mapsize;
|
||||||
|
|
@ -261,6 +265,9 @@ struct MDB_env {
|
||||||
pthread_key_t me_txkey; /* thread-key for readers */
|
pthread_key_t me_txkey; /* thread-key for readers */
|
||||||
MDB_oldpages *me_pghead;
|
MDB_oldpages *me_pghead;
|
||||||
MDB_oldpages *me_pgtail;
|
MDB_oldpages *me_pgtail;
|
||||||
|
MDB_dbx *me_dbxs; /* array */
|
||||||
|
MDB_db **me_dbs; /* array of ptrs */
|
||||||
|
unsigned int me_numdbs;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define NODESIZE offsetof(MDB_node, mn_data)
|
#define NODESIZE offsetof(MDB_node, mn_data)
|
||||||
|
|
@ -2557,10 +2564,10 @@ mdbenv_stat(MDB_env *env, MDB_stat *arg)
|
||||||
return MDB_SUCCESS;
|
return MDB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mdb_open(MDB_txn *txn, const char *name, unsigned int flags, MDB_db **db)
|
int mdb_open(MDB_txn *txn, const char *name, unsigned int flags, MDB_dbi *dbi)
|
||||||
{
|
{
|
||||||
if (!name) {
|
if (!name) {
|
||||||
*db = (MDB_db *)&txn->mt_env->me_db;
|
*dbi = 0;
|
||||||
return MDB_SUCCESS;
|
return MDB_SUCCESS;
|
||||||
}
|
}
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
|
|
|
||||||
|
|
@ -5,14 +5,14 @@
|
||||||
|
|
||||||
struct MDB_cursor;
|
struct MDB_cursor;
|
||||||
struct MDB_txn;
|
struct MDB_txn;
|
||||||
struct MDB_db;
|
|
||||||
struct MDB_env;
|
struct MDB_env;
|
||||||
|
|
||||||
typedef struct MDB_cursor MDB_cursor;
|
typedef struct MDB_cursor MDB_cursor;
|
||||||
typedef struct MDB_txn MDB_txn;
|
typedef struct MDB_txn MDB_txn;
|
||||||
typedef struct MDB_db MDB_db;
|
|
||||||
typedef struct MDB_env MDB_env;
|
typedef struct MDB_env MDB_env;
|
||||||
|
|
||||||
|
typedef unsigned int MDB_dbi;
|
||||||
|
|
||||||
typedef struct MDB_val {
|
typedef struct MDB_val {
|
||||||
void *mv_data;
|
void *mv_data;
|
||||||
size_t mv_size;
|
size_t mv_size;
|
||||||
|
|
@ -64,26 +64,25 @@ int mdbenv_set_mapsize(MDB_env *env, size_t size);
|
||||||
int mdbenv_set_maxreaders(MDB_env *env, int readers);
|
int mdbenv_set_maxreaders(MDB_env *env, int readers);
|
||||||
int mdbenv_get_maxreaders(MDB_env *env, int *readers);
|
int mdbenv_get_maxreaders(MDB_env *env, int *readers);
|
||||||
int mdbenv_sync(MDB_env *env);
|
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_begin(MDB_env *env, int rdonly, MDB_txn **txn);
|
||||||
int mdb_txn_commit(MDB_txn *txn);
|
int mdb_txn_commit(MDB_txn *txn);
|
||||||
void mdb_txn_abort(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_open(MDB_txn *txn, const char *name, unsigned int flags, MDB_dbi *dbi);
|
||||||
int mdb_stat(MDB_db *db, MDB_stat *stat);
|
int mdb_stat(MDB_txn *txn, MDB_dbi dbi, MDB_stat *stat);
|
||||||
void mdb_close(MDB_db *db);
|
void mdb_close(MDB_txn *txn, MDB_dbi dbi);
|
||||||
|
|
||||||
int mdb_get(MDB_db *db, MDB_txn *txn, MDB_val *key, MDB_val *data);
|
int mdb_get(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data);
|
||||||
int mdb_put(MDB_db *db, MDB_txn *txn, MDB_val *key, MDB_val *data,
|
int mdb_put(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
int mdb_del(MDB_db *db, MDB_txn *txn, MDB_val *key, MDB_val *data);
|
int mdb_del(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data);
|
||||||
|
|
||||||
int mdb_cursor_open(MDB_db *db, MDB_txn *txn, MDB_cursor **cursor);
|
int mdb_cursor_open(MDB_txn *txn, MDB_dbi dbi, MDB_cursor **cursor);
|
||||||
void mdb_cursor_close(MDB_cursor *cursor);
|
void mdb_cursor_close(MDB_cursor *cursor);
|
||||||
int mdb_cursor_get(MDB_cursor *cursor, MDB_val *key, MDB_val *data,
|
int mdb_cursor_get(MDB_cursor *cursor, MDB_val *key, MDB_val *data,
|
||||||
MDB_cursor_op op);
|
MDB_cursor_op op);
|
||||||
|
|
||||||
int mdb_cmp(MDB_db *db, const MDB_val *a, const MDB_val *b);
|
int mdb_cmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b);
|
||||||
|
|
||||||
#endif /* _MDB_H_ */
|
#endif /* _MDB_H_ */
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue