db_am.h
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1996-2002
  5.  * Sleepycat Software.  All rights reserved.
  6.  *
  7.  * $Id: db_am.h,v 11.61 2002/08/08 03:20:46 bostic Exp $
  8.  */
  9. #ifndef _DB_AM_H_
  10. #define _DB_AM_H_
  11. /*
  12.  * IS_AUTO_COMMIT --
  13.  * Test for local auto-commit flag or global flag with no local DbTxn
  14.  * handle.
  15.  */
  16. #define IS_AUTO_COMMIT(dbenv, txn, flags)
  17. (LF_ISSET(DB_AUTO_COMMIT) ||
  18.     ((txn) == NULL && F_ISSET((dbenv), DB_ENV_AUTO_COMMIT)))
  19. /* DB recovery operation codes. */
  20. #define DB_ADD_DUP 1
  21. #define DB_REM_DUP 2
  22. #define DB_ADD_BIG 3
  23. #define DB_REM_BIG 4
  24. #define DB_ADD_PAGE 5
  25. #define DB_REM_PAGE 6
  26. /*
  27.  * Standard initialization and shutdown macros for all recovery functions.
  28.  */
  29. #define REC_INTRO(func, inc_count) {
  30. argp = NULL;
  31. dbc = NULL;
  32. file_dbp = NULL;
  33. mpf = NULL;
  34. if ((ret = func(dbenv, dbtp->data, &argp)) != 0)
  35. goto out;
  36. if ((ret = __dbreg_id_to_db(dbenv, argp->txnid,
  37.     &file_dbp, argp->fileid, inc_count)) != 0) {
  38. if (ret == DB_DELETED) {
  39. ret = 0;
  40. goto done;
  41. }
  42. goto out;
  43. }
  44. if ((ret = file_dbp->cursor(file_dbp, NULL, &dbc, 0)) != 0)
  45. goto out;
  46. F_SET(dbc, DBC_RECOVER);
  47. mpf = file_dbp->mpf;
  48. }
  49. #define REC_CLOSE {
  50. int __t_ret;
  51. if (argp != NULL)
  52. __os_free(dbenv, argp);
  53. if (dbc != NULL &&
  54.     (__t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
  55. ret = __t_ret;
  56. return (ret);
  57. }
  58. /*
  59.  * No-op versions of the same macros.
  60.  */
  61. #define REC_NOOP_INTRO(func) {
  62. argp = NULL;
  63. if ((ret = func(dbenv, dbtp->data, &argp)) != 0)
  64. return (ret);
  65. }
  66. #define REC_NOOP_CLOSE
  67. if (argp != NULL)
  68. __os_free(dbenv, argp);
  69. return (ret);
  70. /*
  71.  * Standard debugging macro for all recovery functions.
  72.  */
  73. #ifdef DEBUG_RECOVER
  74. #define REC_PRINT(func)
  75. (void)func(dbenv, dbtp, lsnp, op, info);
  76. #else
  77. #define REC_PRINT(func)
  78. #endif
  79. /*
  80.  * Actions to __db_lget
  81.  */
  82. #define LCK_ALWAYS 1 /* Lock even for off page dup cursors */
  83. #define LCK_COUPLE 2 /* Lock Couple */
  84. #define LCK_COUPLE_ALWAYS 3 /* Lock Couple even in txn. */
  85. #define LCK_DOWNGRADE 4 /* Downgrade the lock. (internal) */
  86. #define LCK_ROLLBACK 5 /* Lock even if in rollback */
  87. /*
  88.  * If doing transactions we have to hold the locks associated with a data item
  89.  * from a page for the entire transaction.  However, we don't have to hold the
  90.  * locks associated with walking the tree.  Distinguish between the two so that
  91.  * we don't tie up the internal pages of the tree longer than necessary.
  92.  */
  93. #define __LPUT(dbc, lock)
  94. (LOCK_ISSET(lock) ?
  95. (dbc)->dbp->dbenv->lock_put((dbc)->dbp->dbenv, &(lock)) : 0)
  96. /*
  97.  * __TLPUT -- transactional lock put
  98.  * If the lock is valid then
  99.  *    If we are not in a transaction put the lock.
  100.  *    Else if the cursor is doing dirty reads and this was a read then
  101.  * put the lock.
  102.  *    Else if the db is supporting dirty reads and this is a write then
  103.  * downgrade it.
  104.  * Else do nothing.
  105.  */
  106. #define __TLPUT(dbc, lock)
  107. (LOCK_ISSET(lock) ? __db_lput(dbc, &(lock)) : 0)
  108. typedef struct {
  109. DBC *dbc;
  110. int count;
  111. } db_trunc_param;
  112. #include "dbinc/db_dispatch.h"
  113. #include "dbinc_auto/db_auto.h"
  114. #include "dbinc_auto/crdel_auto.h"
  115. #include "dbinc_auto/db_ext.h"
  116. #endif /* !_DB_AM_H_ */