/*
- $Id: dbif.h,v 1.5 2009-05-06 11:54:24 franklahm Exp $
+ $Id: dbif.h,v 1.9 2009-12-21 06:41:09 franklahm Exp $
Copyright (C) Joerg Lenneis 2003
Copyright (C) Frank Lahm 2009
dbd = dbif_init("cnid2.db");
Pass NULL to create an in-memory db.
Note: the DBD type is NOT from BerkeleyDB ! We've defined it.
- 3. Optional:
- Call dbif_env_open to open an dbd environment, chdir to it beforehand
- 4. Call dbif_open to finally open the CNID database itself
+ 3. Call dbif_env_open to open an dbd environment if you called dbif_init
+ with a filename. Pass a db_param here for on-disk databases.
+ 4. Call dbif_open to finally open the CNID database itself. Pass db_param
+ here for in-memory database.
Querying the CNID database
--------------------------
Closing
-------
Call dbif_close.
+
+ Silent Upgrade Support
+ ----------------------
+
+ On cnid_dbd shutdown we reopen the environment with recovery, close and then
+ remove it. This enables an upgraded netatalk installation possibly linked against
+ a newer bdb lib to succesfully open/create an environment and then silently
+ upgrade the database itself. How nice!
*/
#ifndef CNID_DBD_DBIF_H
#include <sys/cdefs.h>
#include <db.h>
+#include <atalk/adouble.h>
#include "db_param.h"
#define DBIF_DB_CNT 3
typedef struct {
DB_ENV *db_env;
DB_TXN *db_txn;
+ DBC *db_cur; /* for dbif_walk */
+ char *db_envhome;
char *db_filename;
FILE *db_errlog;
db_table db_table[3];
} DBD;
/* Functions */
-extern DBD *dbif_init(const char *dbname);
+extern DBD *dbif_init(const char *envhome, const char *dbname);
extern int dbif_env_open(DBD *dbd, struct db_param *dbp, uint32_t dbenv_oflags);
-extern int dbif_open(DBD *dbd, struct db_param *dbp, int do_truncate);
+extern int dbif_open(DBD *dbd, struct db_param *dbp, int reindex);
extern int dbif_close(DBD *dbd);
+extern int dbif_prep_upgrade(const char *path);
extern int dbif_get(DBD *, const int, DBT *, DBT *, u_int32_t);
extern int dbif_pget(DBD *, const int, DBT *, DBT *, DBT *, u_int32_t);
extern int dbif_put(DBD *, const int, DBT *, DBT *, u_int32_t);
extern int dbif_del(DBD *, const int, DBT *, u_int32_t);
-
extern int dbif_count(DBD *, const int, u_int32_t *);
extern int dbif_stamp(DBD *, void *, int);
extern int dbif_copy_rootinfokey(DBD *srcdbd, DBD *destdbd);
extern int dbif_txn_begin(DBD *);
extern int dbif_txn_commit(DBD *);
extern int dbif_txn_abort(DBD *);
+extern void dbif_txn_close(DBD *dbd, int ret); /* Switch between commit+abort */
extern int dbif_txn_checkpoint(DBD *, u_int32_t, u_int32_t, u_int32_t);
-extern int dbif_dump(DBD *, int dumpindexes);
-
+extern int dbif_dump(DBD *dbd, int dumpindexes);
+extern int dbif_idwalk(DBD *dbd, cnid_t *cnid, int close);
#endif