Read-only mirror of official repo on openldap.org. Issues and pull requests here are ignored. Use OpenLDAP ITS for issues.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lmdb/libraries/libmdb/mdb.h

162 lines
5.9 KiB

/* mdb.h - memory-mapped database library header file */
/*
* Copyright 2011 Howard Chu, Symas Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*
* This code is derived from btree.c written by Martin Hedenfalk.
*
* Copyright (c) 2009, 2010 Martin Hedenfalk <martin@bzero.se>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
14 years ago
#ifndef _MDB_H_
#define _MDB_H_
#include <sys/types.h>
#define MDB_VERSION_MAJOR 0
#define MDB_VERSION_MINOR 8
#define MDB_VERSION_PATCH 0
#define MDB_VERINT(a,b,c) (((a) << 24) | ((b) << 16) | (c))
13 years ago
#define MDB_VERSION_FULL \
MDB_VERINT(MDB_VERSION_MAJOR,MDB_VERSION_MINOR,MDB_VERSION_PATCH)
#define MDB_VERSION_DATE "August 11, 2011"
#define MDB_VERSTR(a,b,c,d) "MDB " #a "." #b "." #c ": (" #d ")"
#define MDB_VERFOO(a,b,c,d) MDB_VERSTR(a,b,c,d)
#define MDB_VERSION_STRING \
MDB_VERFOO(MDB_VERSION_MAJOR,MDB_VERSION_MINOR,MDB_VERSION_PATCH,MDB_VERSION_DATE)
14 years ago
struct MDB_cursor;
struct MDB_txn;
struct MDB_env;
typedef struct MDB_cursor MDB_cursor;
typedef struct MDB_txn MDB_txn;
typedef struct MDB_env MDB_env;
typedef unsigned int MDB_dbi;
14 years ago
typedef struct MDB_val {
size_t mv_size;
void *mv_data;
14 years ago
} MDB_val;
typedef int (MDB_cmp_func)(const MDB_val *a, const MDB_val *b);
typedef void (MDB_rel_func)(void *ptr, void *oldptr);
13 years ago
#define MDB_NOOVERWRITE 0x10
#define MDB_NODUPDATA 0x20
#define MDB_DEL_DUP 0x40
14 years ago
typedef enum MDB_cursor_op { /* cursor operations */
MDB_FIRST,
MDB_GET_BOTH, /* position at key/data */
MDB_GET_BOTH_RANGE, /* position at key, nearest data */
MDB_GET_MULTIPLE, /* only for MDB_DUPFIXED */
MDB_LAST,
MDB_NEXT,
MDB_NEXT_DUP,
MDB_NEXT_MULTIPLE, /* only for MDB_DUPFIXED */
MDB_NEXT_NODUP,
13 years ago
MDB_PREV,
MDB_PREV_DUP,
MDB_PREV_NODUP,
MDB_SET, /* position at key, or fail */
MDB_SET_RANGE /* position at given key */
14 years ago
} MDB_cursor_op;
/* return codes */
/* BerkeleyDB uses -30800 to -30999, we'll go under them */
14 years ago
#define MDB_SUCCESS 0
13 years ago
#define MDB_KEYEXIST (-30799) /* key/data pair already exists */
#define MDB_NOTFOUND (-30798) /* key/data pair not found (EOF) */
#define MDB_PAGE_NOTFOUND (-30797) /* Requested page not found */
#define MDB_CORRUPTED (-30796) /* Located page was wrong type */
#define MDB_PANIC (-30795) /* Update of meta page failed, probably I/O error */
#define MDB_VERSION_MISMATCH (-30794) /* Environment version mismatch */
14 years ago
/* DB flags */
#define MDB_REVERSEKEY 0x02 /* use reverse string keys */
#define MDB_DUPSORT 0x04 /* use sorted duplicates */
#define MDB_INTEGERKEY 0x08 /* numeric keys in native byte order */
#define MDB_DUPFIXED 0x10 /* sorted dup items have fixed size */
#define MDB_INTEGERDUP 0x20 /* numeric dups in native byte order */
14 years ago
/* environment flags */
#define MDB_FIXEDMAP 0x01 /* mmap at a fixed address */
13 years ago
#define MDB_NOSYNC 0x10000 /* don't fsync after commit */
#define MDB_RDONLY 0x20000 /* read only */
/* DB or env flags */
#define MDB_CREATE 0x40000 /* create if not present */
14 years ago
typedef struct MDB_stat {
unsigned int ms_psize;
unsigned int ms_depth;
14 years ago
unsigned long ms_branch_pages;
unsigned long ms_leaf_pages;
unsigned long ms_overflow_pages;
unsigned long ms_entries;
} MDB_stat;
13 years ago
char *mdb_version(int *major, int *minor, int *patch);
char *mdb_strerror(int err);
int mdb_env_create(MDB_env **env);
int mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mode_t mode);
int mdb_env_stat(MDB_env *env, MDB_stat *stat);
13 years ago
int mdb_env_sync(MDB_env *env, int force);
void mdb_env_close(MDB_env *env);
int mdb_env_set_flags(MDB_env *env, unsigned int flags, int onoff);
int mdb_env_get_flags(MDB_env *env, unsigned int *flags);
int mdb_env_get_path(MDB_env *env, const char **path);
int mdb_env_set_mapsize(MDB_env *env, size_t size);
int mdb_env_set_maxreaders(MDB_env *env, int readers);
int mdb_env_get_maxreaders(MDB_env *env, int *readers);
int mdb_env_set_maxdbs(MDB_env *env, int dbs);
14 years ago
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_txn *txn, const char *name, unsigned int flags, MDB_dbi *dbi);
int mdb_stat(MDB_txn *txn, MDB_dbi dbi, MDB_stat *stat);
void mdb_close(MDB_txn *txn, MDB_dbi dbi);
14 years ago
int mdb_set_compare(MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp);
int mdb_set_dupsort(MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp);
int mdb_set_relfunc(MDB_txn *txn, MDB_dbi dbi, MDB_rel_func *rel);
int mdb_get(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data);
int mdb_put(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data,
14 years ago
unsigned int flags);
int mdb_del(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data,
unsigned int flags);
14 years ago
int mdb_cursor_open(MDB_txn *txn, MDB_dbi dbi, MDB_cursor **cursor);
14 years ago
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_cursor_count(MDB_cursor *cursor, unsigned long *countp);
14 years ago
int mdb_cmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b);
14 years ago
#endif /* _MDB_H_ */