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

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1997-2002
  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.27 2002/07/20 13:50:11 dda Exp $";
  10. #endif /* not lint */
  11. #include <errno.h>
  12. #include "db_cxx.h"
  13. #include "dbinc/cxx_int.h"
  14. #include "db_int.h"
  15. // Helper macro for simple methods that pass through to the
  16. // underlying C method. It may return an error or raise an exception.
  17. // Note this macro expects that input _argspec is an argument
  18. // list element (e.g., "char *arg") and that _arglist is the arguments
  19. // that should be passed through to the C method (e.g., "(db, arg)")
  20. //
  21. #define DBTXN_METHOD(_name, _delete, _argspec, _arglist)
  22. int DbTxn::_name _argspec
  23. {
  24. int ret;
  25. DB_TXN *txn = unwrap(this);
  26. ret = txn->_name _arglist;
  27. /* Weird, but safe if we don't access this again. */
  28. if (_delete)
  29. delete this;
  30. if (!DB_RETOK_STD(ret))
  31. DB_ERROR("DbTxn::" # _name, ret, ON_ERROR_UNKNOWN);
  32. return (ret);
  33. }
  34. // private constructor, never called but needed by some C++ linkers
  35. DbTxn::DbTxn()
  36. : imp_(0)
  37. {
  38. }
  39. DbTxn::DbTxn(DB_TXN *txn)
  40. : imp_(wrap(txn))
  41. {
  42. txn->api_internal = this;
  43. }
  44. DbTxn::~DbTxn()
  45. {
  46. }
  47. DBTXN_METHOD(abort, 1, (), (txn))
  48. DBTXN_METHOD(commit, 1, (u_int32_t flags), (txn, flags))
  49. DBTXN_METHOD(discard, 1, (u_int32_t flags), (txn, flags))
  50. u_int32_t DbTxn::id()
  51. {
  52. DB_TXN *txn;
  53. txn = unwrap(this);
  54. return (txn->id(txn)); // no error
  55. }
  56. DBTXN_METHOD(prepare, 0, (u_int8_t *gid), (txn, gid))
  57. DBTXN_METHOD(set_timeout, 0, (db_timeout_t timeout, u_int32_t flags),
  58.     (txn, timeout, flags))
  59. // static method
  60. DbTxn *DbTxn::wrap_DB_TXN(DB_TXN *txn)
  61. {
  62. DbTxn *wrapped_txn = get_DbTxn(txn);
  63. if (wrapped_txn == NULL)
  64. wrapped_txn = new DbTxn(txn);
  65. return wrapped_txn;
  66. }