db_am.h
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1996, 1997, 1998, 1999, 2000
  5.  * Sleepycat Software.  All rights reserved.
  6.  *
  7.  * $Id: db_am.h,v 11.21 2000/12/12 17:43:56 bostic Exp $
  8.  */
  9. #ifndef _DB_AM_H_
  10. #define _DB_AM_H_
  11. #define DB_MINPAGECACHE 10 /* Min pages access methods cache. */
  12. /* DB recovery operation codes. The low bits used to have flags or'd in. */
  13. #define DB_ADD_DUP 0x10
  14. #define DB_REM_DUP 0x20
  15. #define DB_ADD_BIG 0x30
  16. #define DB_REM_BIG 0x40
  17. #define DB_UNUSED_1 0x50
  18. #define DB_UNUSED_2 0x60
  19. #define DB_ADD_PAGE 0x70
  20. #define DB_REM_PAGE 0x80
  21. /*
  22.  * This is a grotesque naming hack.  We have modified the btree page
  23.  * allocation and freeing functions to be generic and have therefore
  24.  * moved them into the access-method independent portion of the code.
  25.  * However, since we didn't want to create new log records and routines
  26.  * for them, we left their logging and recovery functions over in btree.
  27.  * To make the code look prettier, we macro them, but this is sure to
  28.  * confuse the heck out of everyone.
  29.  */
  30. #define __db_pg_alloc_log __bam_pg_alloc_log
  31. #define __db_pg_free_log __bam_pg_free_log
  32. /*
  33.  * Standard initialization and shutdown macros for all recovery functions.
  34.  *
  35.  * Requires the following local variables:
  36.  *
  37.  * DB *file_dbp;
  38.  * DB_MPOOLFILE *mpf;
  39.  * int ret;
  40.  */
  41. #define REC_INTRO(func, inc_count) {
  42. file_dbp = NULL;
  43. dbc = NULL;
  44. if ((ret = func(dbenv, dbtp->data, &argp)) != 0)
  45. goto out;
  46. if ((ret = __db_fileid_to_db(dbenv,
  47.     &file_dbp, argp->fileid, inc_count)) != 0) {
  48. if (ret == DB_DELETED) {
  49. ret = 0;
  50. goto done;
  51. }
  52. goto out;
  53. }
  54. if (file_dbp == NULL)
  55. goto out;
  56. if ((ret = file_dbp->cursor(file_dbp, NULL, &dbc, 0)) != 0)
  57. goto out;
  58. F_SET(dbc, DBC_RECOVER);
  59. mpf = file_dbp->mpf;
  60. }
  61. #define REC_CLOSE {
  62. int __t_ret;
  63. if (argp != NULL)
  64. __os_free(argp, sizeof(*argp));
  65. if (dbc != NULL && (__t_ret = dbc->c_close(dbc)) != 0 && ret == 0) 
  66. return (__t_ret);
  67. return (ret);
  68. }
  69. /*
  70.  * No-op versions of the same macros.
  71.  */
  72. #define REC_NOOP_INTRO(func) {
  73. if ((ret = func(dbenv, dbtp->data, &argp)) != 0)
  74. return (ret);
  75. }
  76. #define REC_NOOP_CLOSE
  77. if (argp != NULL)
  78. __os_free(argp, sizeof(*argp));
  79. return (ret);
  80. /*
  81.  * Standard debugging macro for all recovery functions.
  82.  */
  83. #ifdef DEBUG_RECOVER
  84. #define REC_PRINT(func)
  85. (void)func(dbenv, dbtp, lsnp, op, info);
  86. #else
  87. #define REC_PRINT(func)
  88. #endif
  89. /*
  90.  * Flags to __db_lget
  91.  */
  92. #define LCK_COUPLE 0x01 /* Lock Couple */
  93. #define LCK_ALWAYS 0x02 /* Lock even for off page dup cursors */
  94. #define LCK_ROLLBACK 0x04 /* Lock even if in rollback */
  95. /*
  96.  * If doing transactions we have to hold the locks associated with a data item
  97.  * from a page for the entire transaction.  However, we don't have to hold the
  98.  * locks associated with walking the tree.  Distinguish between the two so that
  99.  * we don't tie up the internal pages of the tree longer than necessary.
  100.  */
  101. #define __LPUT(dbc, lock)
  102. (lock.off != LOCK_INVALID ?
  103.     lock_put((dbc)->dbp->dbenv, &(lock)) : 0)
  104. #define __TLPUT(dbc, lock)
  105. (lock.off != LOCK_INVALID &&
  106.     (dbc)->txn == NULL ? lock_put((dbc)->dbp->dbenv, &(lock)) : 0)
  107. #ifdef DIAGNOSTIC
  108. #define DB_CHECK_TXN(dbp, txn)
  109. if (txn != NULL)
  110. F_SET(dbp, DB_AM_TXN);
  111. else if (F_ISSET(dbp, DB_AM_TXN))
  112. return (__db_missing_txn_err((dbp)->dbenv));
  113. #else
  114. #define DB_CHECK_TXN(dbp, txn)
  115. #endif
  116. #include "db_dispatch.h"
  117. #include "db_auto.h"
  118. #include "crdel_auto.h"
  119. #include "db_ext.h"
  120. #endif