📄 db_int.in
字号:
#define MPOOL_ON(dbenv) ((dbenv)->mp_handle != NULL)#define RPC_ON(dbenv) ((dbenv)->cl_handle != NULL)#define TXN_ON(dbenv) ((dbenv)->tx_handle != NULL)/* * STD_LOCKING Standard locking, that is, locking was configured and CDB * was not. We do not do locking in off-page duplicate trees, * so we check for that in the cursor first. */#define STD_LOCKING(dbc) \ (!F_ISSET(dbc, DBC_OPD) && \ !CDB_LOCKING((dbc)->dbp->dbenv) && LOCKING_ON((dbc)->dbp->dbenv))/* * IS_RECOVERING: The system is running recovery. */#define IS_RECOVERING(dbenv) \ (LOGGING_ON(dbenv) && \ F_ISSET((DB_LOG *)(dbenv)->lg_handle, DBLOG_RECOVER))/* Initialization methods are often illegal before/after open is called. */#define ENV_ILLEGAL_AFTER_OPEN(dbenv, name) \ if (F_ISSET((dbenv), DB_ENV_OPEN_CALLED)) \ return (__db_mi_open(dbenv, name, 1));#define ENV_ILLEGAL_BEFORE_OPEN(dbenv, name) \ if (!F_ISSET((dbenv), DB_ENV_OPEN_CALLED)) \ return (__db_mi_open(dbenv, name, 0));/* We're not actually user hostile, honest. */#define ENV_REQUIRES_CONFIG(dbenv, handle, i, flags) \ if (handle == NULL) \ return (__db_env_config(dbenv, i, flags));/******************************************************* * Database Access Methods. *******************************************************//* * DB_IS_THREADED -- * The database handle is free-threaded (was opened with DB_THREAD). */#define DB_IS_THREADED(dbp) \ ((dbp)->mutexp != NULL)/* Initialization methods are often illegal before/after open is called. */#define DB_ILLEGAL_AFTER_OPEN(dbp, name) \ if (F_ISSET((dbp), DB_AM_OPEN_CALLED)) \ return (__db_mi_open((dbp)->dbenv, name, 1));#define DB_ILLEGAL_BEFORE_OPEN(dbp, name) \ if (!F_ISSET((dbp), DB_AM_OPEN_CALLED)) \ return (__db_mi_open((dbp)->dbenv, name, 0));/* Some initialization methods are illegal if environment isn't local. */#define DB_ILLEGAL_IN_ENV(dbp, name) \ if (!F_ISSET((dbp)->dbenv, DB_ENV_DBLOCAL)) \ return (__db_mi_env((dbp)->dbenv, name));#define DB_ILLEGAL_METHOD(dbp, flags) { \ int __ret; \ if ((__ret = __dbh_am_chk(dbp, flags)) != 0) \ return (__ret); \}/* * Common DBC->internal fields. Each access method adds additional fields * to this list, but the initial fields are common. */#define __DBC_INTERNAL \ DBC *opd; /* Off-page duplicate cursor. */\ \ void *page; /* Referenced page. */ \ db_pgno_t root; /* Tree root. */ \ db_pgno_t pgno; /* Referenced page number. */ \ db_indx_t indx; /* Referenced key item index. */\ \ DB_LOCK lock; /* Cursor lock. */ \ db_lockmode_t lock_mode; /* Lock mode. */struct __dbc_internal { __DBC_INTERNAL};/* Actions that __db_master_update can take. */typedef enum { MU_REMOVE, MU_RENAME, MU_OPEN } mu_action;/* * Access-method-common macro for determining whether a cursor * has been initialized. */#define IS_INITIALIZED(dbc) ((dbc)->internal->pgno != PGNO_INVALID)/* Free the callback-allocated buffer, if necessary, hanging off of a DBT. */#define FREE_IF_NEEDED(sdbp, dbt) \ if (F_ISSET((dbt), DB_DBT_APPMALLOC)) { \ __os_ufree((sdbp)->dbenv, (dbt)->data); \ F_CLR((dbt), DB_DBT_APPMALLOC); \ }/* * Use memory belonging to object "owner" to return the results of * any no-DBT-flag get ops on cursor "dbc". */#define SET_RET_MEM(dbc, owner) \ do { \ (dbc)->rskey = &(owner)->my_rskey; \ (dbc)->rkey = &(owner)->my_rkey; \ (dbc)->rdata = &(owner)->my_rdata; \ } while (0)/* Use the return-data memory src is currently set to use in dest as well. */#define COPY_RET_MEM(src, dest) \ do { \ (dest)->rskey = (src)->rskey; \ (dest)->rkey = (src)->rkey; \ (dest)->rdata = (src)->rdata; \ } while (0)/* Reset the returned-memory pointers to their defaults. */#define RESET_RET_MEM(dbc) \ do { \ (dbc)->rskey = &(dbc)->my_rskey; \ (dbc)->rkey = &(dbc)->my_rkey; \ (dbc)->rdata = &(dbc)->my_rdata; \ } while (0)/******************************************************* * Mpool. *******************************************************//* * File types for DB access methods. Negative numbers are reserved to DB. */#define DB_FTYPE_SET -1 /* Call pgin/pgout functions. */#define DB_FTYPE_NOTSET 0 /* Don't call... *//* Structure used as the DB pgin/pgout pgcookie. */typedef struct __dbpginfo { size_t db_pagesize; /* Underlying page size. */ u_int32_t flags; /* Some DB_AM flags needed. */ DBTYPE type; /* DB type */} DB_PGINFO;/******************************************************* * Log. *******************************************************//* Initialize an LSN to 'zero'. */#define ZERO_LSN(LSN) do { \ (LSN).file = 0; \ (LSN).offset = 0; \} while (0)#define IS_ZERO_LSN(LSN) ((LSN).file == 0)#define IS_INIT_LSN(LSN) ((LSN).file == 1 && (LSN).offset == 0)#define INIT_LSN(LSN) do { \ (LSN).file = 1; \ (LSN).offset = 0; \} while (0)#define MAX_LSN(LSN) do { \ (LSN).file = UINT32_T_MAX; \ (LSN).offset = UINT32_T_MAX; \} while (0)#define IS_MAX_LSN(LSN) \ ((LSN).file == UINT32_T_MAX && (LSN).offset == UINT32_T_MAX)/* If logging is turned off, smash the lsn. */#define LSN_NOT_LOGGED(LSN) do { \ (LSN).file = 0; \ (LSN).offset = 1; \} while (0)#define IS_NOT_LOGGED_LSN(LSN) \ ((LSN).file == 0 && (LSN).offset == 1)/* * Test if the environment is currently logging changes. If we're in * recovery or we're a replication client, we don't need to log changes * because they're already in the log, even though we have a fully functional * log system. */#define DBENV_LOGGING(dbenv) \ (LOGGING_ON(dbenv) && !F_ISSET((dbenv), DB_ENV_REP_CLIENT) && \ (!IS_RECOVERING(dbenv)))/* * Test if we need to log a change. Note that the DBC_RECOVER flag is set * when we're in abort, as well as during recovery; thus DBC_LOGGING may be * false for a particular dbc even when DBENV_LOGGING is true. * * We explicitly use LOGGING_ON/DB_ENV_REP_CLIENT here because we don't * want to have to pull in the log headers, which IS_RECOVERING (and thus * DBENV_LOGGING) rely on, and because DBC_RECOVER should be set anytime * IS_RECOVERING would be true. */#define DBC_LOGGING(dbc) \ (LOGGING_ON((dbc)->dbp->dbenv) && !F_ISSET((dbc), DBC_RECOVER) && \ !F_ISSET((dbc)->dbp->dbenv, DB_ENV_REP_CLIENT))/******************************************************* * Txn. *******************************************************/#define DB_NONBLOCK(C) ((C)->txn != NULL && F_ISSET((C)->txn, TXN_NOWAIT))#define IS_SUBTRANSACTION(txn) \ ((txn) != NULL && (txn)->parent != NULL)/******************************************************* * Crypto. *******************************************************/#define DB_IV_BYTES 16 /* Bytes per IV */#define DB_MAC_KEY 20 /* Bytes per MAC checksum *//******************************************************* * Forward structure declarations. *******************************************************/struct __db_reginfo_t; typedef struct __db_reginfo_t REGINFO;struct __db_txnhead; typedef struct __db_txnhead DB_TXNHEAD;struct __db_txnlist; typedef struct __db_txnlist DB_TXNLIST;struct __vrfy_childinfo; typedef struct __vrfy_childinfo VRFY_CHILDINFO;struct __vrfy_dbinfo; typedef struct __vrfy_dbinfo VRFY_DBINFO;struct __vrfy_pageinfo; typedef struct __vrfy_pageinfo VRFY_PAGEINFO;#if defined(__cplusplus)}#endif/******************************************************* * Remaining general DB includes. *******************************************************/@db_int_def@#include "dbinc/globals.h"#include "dbinc/debug.h"#include "dbinc/mutex.h"#include "dbinc/region.h"#include "dbinc_auto/mutex_ext.h" /* XXX: Include after region.h. */#include "dbinc_auto/env_ext.h"#include "dbinc/os.h"#include "dbinc_auto/clib_ext.h"#include "dbinc_auto/common_ext.h"#endif /* !_DB_INTERNAL_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -