mariadb/bdb/cxx/cxx_txn.cpp

82 lines
1.9 KiB
C++
Raw Normal View History

2001-03-05 01:42:05 +01:00
/*-
* See the file LICENSE for redistribution information.
*
2002-10-30 12:57:05 +01:00
* Copyright (c) 1997-2002
2001-03-05 01:42:05 +01:00
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
2002-10-30 12:57:05 +01:00
static const char revid[] = "$Id: cxx_txn.cpp,v 11.27 2002/07/20 13:50:11 dda Exp $";
2001-03-05 01:42:05 +01:00
#endif /* not lint */
#include <errno.h>
#include "db_cxx.h"
2002-10-30 12:57:05 +01:00
#include "dbinc/cxx_int.h"
#include "db_int.h"
// Helper macro for simple methods that pass through to the
// underlying C method. It may return an error or raise an exception.
// Note this macro expects that input _argspec is an argument
// list element (e.g., "char *arg") and that _arglist is the arguments
// that should be passed through to the C method (e.g., "(db, arg)")
//
#define DBTXN_METHOD(_name, _delete, _argspec, _arglist) \
int DbTxn::_name _argspec \
{ \
int ret; \
DB_TXN *txn = unwrap(this); \
\
ret = txn->_name _arglist; \
/* Weird, but safe if we don't access this again. */ \
if (_delete) \
delete this; \
if (!DB_RETOK_STD(ret)) \
DB_ERROR("DbTxn::" # _name, ret, ON_ERROR_UNKNOWN); \
return (ret); \
2001-03-05 01:42:05 +01:00
}
2002-10-30 12:57:05 +01:00
// private constructor, never called but needed by some C++ linkers
2001-03-05 01:42:05 +01:00
DbTxn::DbTxn()
: imp_(0)
{
}
2002-10-30 12:57:05 +01:00
DbTxn::DbTxn(DB_TXN *txn)
: imp_(wrap(txn))
2001-03-05 01:42:05 +01:00
{
2002-10-30 12:57:05 +01:00
txn->api_internal = this;
2001-03-05 01:42:05 +01:00
}
2002-10-30 12:57:05 +01:00
DbTxn::~DbTxn()
2001-03-05 01:42:05 +01:00
{
}
2002-10-30 12:57:05 +01:00
DBTXN_METHOD(abort, 1, (), (txn))
DBTXN_METHOD(commit, 1, (u_int32_t flags), (txn, flags))
DBTXN_METHOD(discard, 1, (u_int32_t flags), (txn, flags))
2001-03-05 01:42:05 +01:00
u_int32_t DbTxn::id()
{
DB_TXN *txn;
txn = unwrap(this);
2002-10-30 12:57:05 +01:00
return (txn->id(txn)); // no error
2001-03-05 01:42:05 +01:00
}
2002-10-30 12:57:05 +01:00
DBTXN_METHOD(prepare, 0, (u_int8_t *gid), (txn, gid))
DBTXN_METHOD(set_timeout, 0, (db_timeout_t timeout, u_int32_t flags),
(txn, timeout, flags))
2001-03-05 01:42:05 +01:00
2002-10-30 12:57:05 +01:00
// static method
DbTxn *DbTxn::wrap_DB_TXN(DB_TXN *txn)
{
DbTxn *wrapped_txn = get_DbTxn(txn);
if (wrapped_txn == NULL)
wrapped_txn = new DbTxn(txn);
return wrapped_txn;
2001-03-05 01:42:05 +01:00
}