Home | History | Annotate | Line # | Download | only in common
      1 /*	$NetBSD: vi_db.h,v 1.3 2013/11/29 22:56:19 christos Exp $ */
      2 
      3 #include <db.h>
      4 
      5 #ifndef DB_BUFFER_SMALL
      6 #define DB_BUFFER_SMALL		ENOMEM
      7 #endif
      8 
      9 #ifdef USE_BUNDLED_DB
     10 
     11 typedef void DB_ENV;
     12 
     13 typedef recno_t db_recno_t;
     14 #define DB_MAX_RECORDS MAX_REC_NUMBER
     15 
     16 #define db_env_close(env,flags)
     17 #define db_env_create(env,flags)					\
     18 	(((void)env), 1)
     19 #define db_env_remove(env,path,flags)					\
     20 	1
     21 #define db_open(db,file,type,flags,mode)				\
     22     (db)->open(db, file, NULL, type, flags, mode)
     23 #define db_get_low(db,key,data,flags)					\
     24     (db)->get(db, key, data, flags)
     25 #define db_close(db)							\
     26     (db)->close(db)
     27 
     28 #else
     29 
     30 #if USE_DB1 || (DB_VERSION_MAJOR >= 3 && DB_VERSION_MINOR >= 1)
     31 #define db_env_open(env,path,flags,mode)				\
     32     (env)->open(env, path, flags, mode)
     33 #define db_env_remove(env,path,flags)					\
     34     (env)->remove(env, path, flags)
     35 #else
     36 #define db_env_open(env,path,flags,mode)				\
     37     (env)->open(env, path, NULL, flags, mode)
     38 #define db_env_remove(env,path,flags)					\
     39     (env)->remove(env, path, NULL, flags)
     40 #endif
     41 
     42 #define db_env_close(env,flags)						\
     43     (env)->close(env, flags)
     44 
     45 #if DB_VERSION_MAJOR >= 4 && DB_VERSION_MINOR >= 1
     46 #define db_open(db,file,type,flags,mode)				\
     47     (db)->open(db, NULL, file, NULL, type, flags, mode)
     48 #else
     49 #define db_open(db,file,type,flags,mode)				\
     50     (db)->open(db, file, NULL, type, flags, mode)
     51 #endif
     52 #define db_get_low(db,key,data,flags)					\
     53     (db)->get(db, NULL, key, data, flags)
     54 #define db_close(db)							\
     55     (db)->close(db, DB_NOSYNC)
     56 
     57 #endif
     58 
     59 #ifdef USE_DYNAMIC_LOADING
     60 #define db_create   	nvi_db_create
     61 #define db_env_create   nvi_db_env_create
     62 #define db_strerror 	nvi_db_strerror
     63 
     64 extern int   (*nvi_db_create) __P((DB **, DB_ENV *, u_int32_t));
     65 extern int   (*nvi_db_env_create) __P((DB_ENV **, u_int32_t));
     66 extern char *(*nvi_db_strerror) __P((int));
     67 #endif
     68 
     69 #ifdef USE_DB1
     70 
     71 #define DB_AFTER	1
     72 #define DB_APPEND	2
     73 #define DB_BEFORE	3
     74 #define DB_FIRST	7
     75 #define DB_LAST		15
     76 #define DB_SET		25
     77 
     78 #define DB_NOTFOUND (-30989)
     79 
     80 /* DBT emulation */
     81 typedef DBT DBT_v1;
     82 #undef DBT
     83 #define DBT DBT_new
     84 
     85 typedef struct {
     86 	void *data;
     87 	size_t size;
     88 
     89 	u_int32_t ulen;
     90 
     91 #define DB_DBT_USERMEM 0x040
     92 	u_int32_t flags;
     93 } DBT;
     94 
     95 /* DB_ENV emulation */
     96 struct __db_env_new;
     97 typedef struct __db_env_new DB_ENV;
     98 
     99 struct __db_env_new {
    100 	int (*close)(DB_ENV *, u_int32_t);
    101 	int (*open)(DB_ENV *, char *, u_int32_t, int);
    102 #define DB_INIT_MPOOL	0x004000
    103 #define DB_PRIVATE	0x200000
    104 	int (*remove)(DB_ENV *, char *, u_int32_t);
    105 
    106 	char *base_path;
    107 	int mode;
    108 };
    109 
    110 /* DBC emulation */
    111 
    112 struct __dbc_new;
    113 typedef struct __dbc_new DBC;
    114 
    115 typedef recno_t db_recno_t;
    116 #define DB_MAX_RECORDS MAX_REC_NUMBER
    117 
    118 #define DB_UNKNOWN (-1)
    119 
    120 /* DB emulation */
    121 typedef DB DB_old;
    122 #undef DB
    123 #define DB DB_new
    124 typedef struct __db_new DB;
    125 
    126 #undef DB_TXN
    127 typedef void DB_TXN;
    128 
    129 #undef DB_LSN
    130 typedef struct {
    131 	int dummy;
    132 } DB_LSN;
    133 
    134 struct __db_new {
    135 	DB_old *actual_db;
    136 
    137 	int type;
    138 
    139 	int (*close)(DB *, u_int32_t);
    140 #define	DB_NOSYNC	26		/* close() */
    141 
    142 	int (*open)(DB *, const char *, const char *, DBTYPE, u_int32_t, int);
    143 #define	DB_CREATE	0x000001	/* Create file as necessary. */
    144 #define	DB_TRUNCATE	0x004000	/* Discard existing DB (O_TRUNC) */
    145 
    146 	int (*sync)(DB *, u_int32_t);
    147 	int (*get)(DB *, DB_TXN *, DBT *, DBT *, u_int32_t);
    148 	int (*put)(DB *, DB_TXN *, DBT *, DBT *, u_int32_t);
    149 	int (*del)(DB *, DB_TXN *, DBT *, u_int32_t);
    150 
    151 	int (*cursor)(DB *, DB_TXN *, DBC **, u_int32_t);
    152 
    153 	int (*set_flags)(DB *, u_int32_t);
    154 #define	DB_RENUMBER	0x0008		/* Recno: renumber on insert/delete. */
    155 #define	DB_SNAPSHOT	0x0020		/* Recno: snapshot the input. */
    156 
    157 	int (*set_pagesize)(DB *, u_int32_t);
    158 
    159 	int (*set_re_delim)(DB *, int);
    160 	int (*set_re_source)(DB *, const char *);
    161 
    162 	RECNOINFO _recno_info;
    163 	u_int32_t _pagesize;
    164 	u_int32_t _flags;
    165 };
    166 
    167 struct __dbc_new {
    168 	DB *db;
    169 	db_recno_t pos;
    170 	DBT_v1 pos_key;
    171 	int (*c_close)(DBC *);
    172 	int (*c_get)(DBC *, DBT *, DBT *, u_int32_t);
    173 	int (*c_put)(DBC *, DBT *, DBT *, u_int32_t);
    174 };
    175 
    176 #endif /* USE_DB1 */
    177