00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "db_config.h"
00011
00012 #include <errno.h>
00013
00014 #include "db_cxx.h"
00015 #include "dbinc/cxx_int.h"
00016
00017 #include "db_int.h"
00018 #include "dbinc/txn.h"
00019
00020
00021
00022
00023
00024
00025
00026 #define DBTXN_METHOD(_name, _delete, _argspec, _arglist) \
00027 int DbTxn::_name _argspec \
00028 { \
00029 int ret; \
00030 DB_TXN *txn = unwrap(this); \
00031 DbEnv *dbenv = DbEnv::get_DbEnv(txn->mgrp->dbenv); \
00032 \
00033 ret = txn->_name _arglist; \
00034 \
00035 if (_delete) \
00036 delete this; \
00037 if (!DB_RETOK_STD(ret)) \
00038 DB_ERROR(dbenv, "DbTxn::" # _name, ret, ON_ERROR_UNKNOWN); \
00039 return (ret); \
00040 }
00041
00042
00043 DbTxn::DbTxn()
00044 : imp_(0)
00045 {
00046 }
00047
00048 DbTxn::DbTxn(DB_TXN *txn)
00049 : imp_(txn)
00050 {
00051 txn->api_internal = this;
00052 }
00053
00054 DbTxn::~DbTxn()
00055 {
00056 }
00057
00058 DBTXN_METHOD(abort, 1, (), (txn))
00059 DBTXN_METHOD(commit, 1, (u_int32_t flags), (txn, flags))
00060 DBTXN_METHOD(discard, 1, (u_int32_t flags), (txn, flags))
00061
00062 u_int32_t DbTxn::id()
00063 {
00064 DB_TXN *txn;
00065
00066 txn = unwrap(this);
00067 return (txn->id(txn));
00068 }
00069
00070 DBTXN_METHOD(get_name, 0, (const char **namep), (txn, namep))
00071 DBTXN_METHOD(prepare, 0, (u_int8_t *gid), (txn, gid))
00072 DBTXN_METHOD(set_name, 0, (const char *name), (txn, name))
00073 DBTXN_METHOD(set_timeout, 0, (db_timeout_t timeout, u_int32_t flags),
00074 (txn, timeout, flags))
00075
00076
00077 DbTxn *DbTxn::wrap_DB_TXN(DB_TXN *txn)
00078 {
00079 DbTxn *wrapped_txn = get_DbTxn(txn);
00080 return (wrapped_txn != NULL) ? wrapped_txn : new DbTxn(txn);
00081 }