#ifndef _DB_AM_H_
#define _DB_AM_H_
#define IS_AUTO_COMMIT(dbenv, txn, flags) \
(LF_ISSET(DB_AUTO_COMMIT) || \
((txn) == NULL && F_ISSET((dbenv), DB_ENV_AUTO_COMMIT) && \
!LF_ISSET(DB_NO_AUTO_COMMIT)))
#define DB_ADD_DUP 1
#define DB_REM_DUP 2
#define DB_ADD_BIG 3
#define DB_REM_BIG 4
#define DB_ADD_PAGE 5
#define DB_REM_PAGE 6
#define REC_INTRO(func, inc_count) do { \
argp = NULL; \
dbc = NULL; \
file_dbp = NULL; \
mpf = NULL; \
if ((ret = func(dbenv, dbtp->data, &argp)) != 0) \
goto out; \
if ((ret = __dbreg_id_to_db(dbenv, argp->txnid, \
&file_dbp, argp->fileid, inc_count)) != 0) { \
if (ret == DB_DELETED) { \
ret = 0; \
goto done; \
} \
goto out; \
} \
if ((ret = __db_cursor(file_dbp, NULL, &dbc, 0)) != 0) \
goto out; \
F_SET(dbc, DBC_RECOVER); \
mpf = file_dbp->mpf; \
} while (0)
#define REC_CLOSE { \
int __t_ret; \
if (argp != NULL) \
__os_free(dbenv, argp); \
if (dbc != NULL && \
(__t_ret = __db_c_close(dbc)) != 0 && ret == 0) \
ret = __t_ret; \
} \
return (ret)
#define REC_NOOP_INTRO(func) do { \
argp = NULL; \
if ((ret = func(dbenv, dbtp->data, &argp)) != 0) \
return (ret); \
} while (0)
#define REC_NOOP_CLOSE \
if (argp != NULL) \
__os_free(dbenv, argp); \
return (ret)
#ifdef DEBUG_RECOVER
#define REC_PRINT(func) \
(void)func(dbenv, dbtp, lsnp, op, info);
#else
#define REC_PRINT(func)
#endif
#define LCK_ALWAYS 1
#define LCK_COUPLE 2
#define LCK_COUPLE_ALWAYS 3
#define LCK_DOWNGRADE 4
#define LCK_ROLLBACK 5
#define __LPUT(dbc, lock) \
(LOCK_ISSET(lock) ? __lock_put((dbc)->dbp->dbenv, &(lock)) : 0)
#define __TLPUT(dbc, lock) \
(LOCK_ISSET(lock) ? __db_lput(dbc, &(lock)) : 0)
typedef struct {
DBC *dbc;
u_int32_t count;
} db_trunc_param;
#include "dbinc/db_dispatch.h"
#include "dbinc_auto/db_auto.h"
#include "dbinc_auto/crdel_auto.h"
#include "dbinc_auto/db_ext.h"
#endif