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

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1997, 1998, 1999, 2000
  5.  * Sleepycat Software.  All rights reserved.
  6.  */
  7. #include "db_config.h"
  8. #ifndef lint
  9. static const char revid[] = "$Id: cxx_txn.cpp,v 11.13 2000/12/21 16:24:33 dda Exp $";
  10. #endif /* not lint */
  11. #include <errno.h>
  12. #include "db_cxx.h"
  13. #include "cxx_int.h"
  14. ////////////////////////////////////////////////////////////////////////
  15. //                                                                    //
  16. //                            DbTxnMgr                                //
  17. //                                                                    //
  18. ////////////////////////////////////////////////////////////////////////
  19. int DbEnv::txn_begin(DbTxn *pid, DbTxn **tid, u_int32_t flags)
  20. {
  21. int err;
  22. DB_ENV *env = unwrap(this);
  23. DB_TXN *txn;
  24. if ((err = ::txn_begin(env, unwrap(pid), &txn, flags)) != 0) {
  25. DB_ERROR("DbEnv::txn_begin", err, error_policy());
  26. return (err);
  27. }
  28. DbTxn *result = new DbTxn();
  29. result->imp_ = wrap(txn);
  30. *tid = result;
  31. return (err);
  32. }
  33. int DbEnv::txn_checkpoint(u_int32_t kbyte, u_int32_t min, u_int32_t flags)
  34. {
  35. int err;
  36. DB_ENV *env = unwrap(this);
  37. if ((err = ::txn_checkpoint(env, kbyte, min, flags)) != 0 &&
  38.     err != DB_INCOMPLETE) {
  39. DB_ERROR("DbEnv::txn_checkpoint", err, error_policy());
  40. return (err);
  41. }
  42. return (err);
  43. }
  44. int DbEnv::txn_stat(DB_TXN_STAT **statp, db_malloc_fcn_type db_malloc_fcn)
  45. {
  46. int err;
  47. DB_ENV *env = unwrap(this);
  48. if ((err = ::txn_stat(env, statp, db_malloc_fcn)) != 0) {
  49. DB_ERROR("DbEnv::txn_stat", err, error_policy());
  50. return (err);
  51. }
  52. return (err);
  53. }
  54. ////////////////////////////////////////////////////////////////////////
  55. //                                                                    //
  56. //                            DbTxn                                   //
  57. //                                                                    //
  58. ////////////////////////////////////////////////////////////////////////
  59. DbTxn::DbTxn()
  60. : imp_(0)
  61. {
  62. }
  63. DbTxn::~DbTxn()
  64. {
  65. }
  66. int DbTxn::abort()
  67. {
  68. int err;
  69. DB_TXN *txn;
  70. txn = unwrap(this);
  71. err = txn_abort(txn);
  72. // It may seem weird to delete this, but is legal as long
  73. // as we don't access any of its data before returning.
  74. //
  75. delete this;
  76. if (err != 0)
  77. DB_ERROR("DbTxn::abort", err, ON_ERROR_UNKNOWN);
  78. return (err);
  79. }
  80. int DbTxn::commit(u_int32_t flags)
  81. {
  82. int err;
  83. DB_TXN *txn;
  84. txn = unwrap(this);
  85. err = txn_commit(txn, flags);
  86. // It may seem weird to delete this, but is legal as long
  87. // as we don't access any of its data before returning.
  88. //
  89. delete this;
  90. if (err != 0)
  91. DB_ERROR("DbTxn::commit", err, ON_ERROR_UNKNOWN);
  92. return (err);
  93. }
  94. u_int32_t DbTxn::id()
  95. {
  96. DB_TXN *txn;
  97. txn = unwrap(this);
  98. return (txn_id(txn));         // no error
  99. }
  100. int DbTxn::prepare()
  101. {
  102. int err;
  103. DB_TXN *txn;
  104. txn = unwrap(this);
  105. if ((err = txn_prepare(txn)) != 0) {
  106. DB_ERROR("DbTxn::prepare", err, ON_ERROR_UNKNOWN);
  107. return (err);
  108. }
  109. return (0);
  110. }