return NULL; \
}
+#define PyErr_TDB_RAISE_IF_CLOSED(self) \
+ if (self->closed) { \
+ PyErr_SetObject(PyExc_RuntimeError, \
+ Py_BuildValue("(i,s)", TDB_ERR_IO, "Database is already closed")); \
+ return NULL; \
+ }
+
+#define PyErr_TDB_RAISE_RETURN_MINUS_1_IF_CLOSED(self) \
+ if (self->closed) { \
+ PyErr_SetObject(PyExc_RuntimeError, \
+ Py_BuildValue("(i,s)", TDB_ERR_IO, "Database is already closed")); \
+ return -1; \
+ }
+
static PyObject *py_tdb_open(PyTypeObject *type, PyObject *args, PyObject *kwargs)
{
char *name = NULL;
static PyObject *obj_transaction_cancel(PyTdbObject *self)
{
- int ret = tdb_transaction_cancel(self->ctx);
+ int ret;
+
+ PyErr_TDB_RAISE_IF_CLOSED(self);
+
+ ret = tdb_transaction_cancel(self->ctx);
PyErr_TDB_ERROR_IS_ERR_RAISE(ret, self->ctx);
Py_RETURN_NONE;
}
static PyObject *obj_transaction_commit(PyTdbObject *self)
{
- int ret = tdb_transaction_commit(self->ctx);
+ int ret;
+ PyErr_TDB_RAISE_IF_CLOSED(self);
+ ret = tdb_transaction_commit(self->ctx);
PyErr_TDB_ERROR_IS_ERR_RAISE(ret, self->ctx);
Py_RETURN_NONE;
}
static PyObject *obj_transaction_prepare_commit(PyTdbObject *self)
{
- int ret = tdb_transaction_prepare_commit(self->ctx);
+ int ret;
+ PyErr_TDB_RAISE_IF_CLOSED(self);
+ ret = tdb_transaction_prepare_commit(self->ctx);
PyErr_TDB_ERROR_IS_ERR_RAISE(ret, self->ctx);
Py_RETURN_NONE;
}
static PyObject *obj_transaction_start(PyTdbObject *self)
{
- int ret = tdb_transaction_start(self->ctx);
+ int ret;
+ PyErr_TDB_RAISE_IF_CLOSED(self);
+ ret = tdb_transaction_start(self->ctx);
PyErr_TDB_ERROR_IS_ERR_RAISE(ret, self->ctx);
Py_RETURN_NONE;
}
static PyObject *obj_reopen(PyTdbObject *self)
{
- int ret = tdb_reopen(self->ctx);
+ int ret;
+ PyErr_TDB_RAISE_IF_CLOSED(self);
+ ret = tdb_reopen(self->ctx);
PyErr_TDB_ERROR_IS_ERR_RAISE(ret, self->ctx);
Py_RETURN_NONE;
}
static PyObject *obj_lockall(PyTdbObject *self)
{
- int ret = tdb_lockall(self->ctx);
+ int ret;
+ PyErr_TDB_RAISE_IF_CLOSED(self);
+ ret = tdb_lockall(self->ctx);
PyErr_TDB_ERROR_IS_ERR_RAISE(ret, self->ctx);
Py_RETURN_NONE;
}
static PyObject *obj_unlockall(PyTdbObject *self)
{
- int ret = tdb_unlockall(self->ctx);
+ int ret;
+ PyErr_TDB_RAISE_IF_CLOSED(self);
+ ret = tdb_unlockall(self->ctx);
PyErr_TDB_ERROR_IS_ERR_RAISE(ret, self->ctx);
Py_RETURN_NONE;
}
static PyObject *obj_lockall_read(PyTdbObject *self)
{
- int ret = tdb_lockall_read(self->ctx);
+ int ret;
+ PyErr_TDB_RAISE_IF_CLOSED(self);
+ ret = tdb_lockall_read(self->ctx);
PyErr_TDB_ERROR_IS_ERR_RAISE(ret, self->ctx);
Py_RETURN_NONE;
}
{
TDB_DATA key;
PyObject *py_key;
+
+ PyErr_TDB_RAISE_IF_CLOSED(self);
+
if (!PyArg_ParseTuple(args, "O", &py_key))
return NULL;
TDB_DATA key, data;
PyObject *py_key, *py_data;
int ret;
+
+ PyErr_TDB_RAISE_IF_CLOSED(self);
+
if (!PyArg_ParseTuple(args, "OO", &py_key, &py_data))
return NULL;
static PyObject *obj_firstkey(PyTdbObject *self)
{
+ PyErr_TDB_RAISE_IF_CLOSED(self);
+
return PyString_FromTDB_DATA(tdb_firstkey(self->ctx));
}
{
TDB_DATA key;
PyObject *py_key;
+ PyErr_TDB_RAISE_IF_CLOSED(self);
+
if (!PyArg_ParseTuple(args, "O", &py_key))
return NULL;
TDB_DATA key;
PyObject *py_key;
int ret;
+ PyErr_TDB_RAISE_IF_CLOSED(self);
+
if (!PyArg_ParseTuple(args, "O", &py_key))
return NULL;
TDB_DATA key;
int ret;
PyObject *py_key;
+ PyErr_TDB_RAISE_IF_CLOSED(self);
+
if (!PyArg_ParseTuple(args, "O", &py_key))
return NULL;
int flag = TDB_REPLACE;
PyObject *py_key, *py_value;
+ PyErr_TDB_RAISE_IF_CLOSED(self);
+
if (!PyArg_ParseTuple(args, "OO|i", &py_key, &py_value, &flag))
return NULL;
{
unsigned flags;
+ PyErr_TDB_RAISE_IF_CLOSED(self);
+
if (!PyArg_ParseTuple(args, "I", &flags))
return NULL;
{
unsigned flags;
+ PyErr_TDB_RAISE_IF_CLOSED(self);
+
if (!PyArg_ParseTuple(args, "I", &flags))
return NULL;
{
PyTdbIteratorObject *ret;
+ PyErr_TDB_RAISE_IF_CLOSED(self);
+
ret = PyObject_New(PyTdbIteratorObject, &PyTdbIterator);
if (!ret)
return NULL;
static PyObject *obj_clear(PyTdbObject *self)
{
- int ret = tdb_wipe_all(self->ctx);
+ int ret;
+ PyErr_TDB_RAISE_IF_CLOSED(self);
+ ret = tdb_wipe_all(self->ctx);
PyErr_TDB_ERROR_IS_ERR_RAISE(ret, self->ctx);
Py_RETURN_NONE;
}
static PyObject *obj_repack(PyTdbObject *self)
{
- int ret = tdb_repack(self->ctx);
+ int ret;
+ PyErr_TDB_RAISE_IF_CLOSED(self);
+ ret = tdb_repack(self->ctx);
PyErr_TDB_ERROR_IS_ERR_RAISE(ret, self->ctx);
Py_RETURN_NONE;
}
static PyObject *obj_enable_seqnum(PyTdbObject *self)
{
+ PyErr_TDB_RAISE_IF_CLOSED(self);
tdb_enable_seqnum(self->ctx);
Py_RETURN_NONE;
}
static PyObject *obj_increment_seqnum_nonblock(PyTdbObject *self)
{
+ PyErr_TDB_RAISE_IF_CLOSED(self);
tdb_increment_seqnum_nonblock(self->ctx);
Py_RETURN_NONE;
}
static PyObject *obj_get_hash_size(PyTdbObject *self, void *closure)
{
+ PyErr_TDB_RAISE_IF_CLOSED(self);
return PyInt_FromLong(tdb_hash_size(self->ctx));
}
static int obj_set_max_dead(PyTdbObject *self, PyObject *max_dead, void *closure)
{
+ PyErr_TDB_RAISE_RETURN_MINUS_1_IF_CLOSED(self);
if (!PyInt_Check(max_dead))
return -1;
tdb_set_max_dead(self->ctx, PyInt_AsLong(max_dead));
static PyObject *obj_get_map_size(PyTdbObject *self, void *closure)
{
+ PyErr_TDB_RAISE_IF_CLOSED(self);
return PyInt_FromLong(tdb_map_size(self->ctx));
}
static PyObject *obj_get_freelist_size(PyTdbObject *self, void *closure)
{
+ PyErr_TDB_RAISE_IF_CLOSED(self);
return PyInt_FromLong(tdb_freelist_size(self->ctx));
}
static PyObject *obj_get_flags(PyTdbObject *self, void *closure)
{
+ PyErr_TDB_RAISE_IF_CLOSED(self);
return PyInt_FromLong(tdb_get_flags(self->ctx));
}
static PyObject *obj_get_filename(PyTdbObject *self, void *closure)
{
+ PyErr_TDB_RAISE_IF_CLOSED(self);
return PyString_FromString(tdb_name(self->ctx));
}
static PyObject *obj_get_seqnum(PyTdbObject *self, void *closure)
{
+ PyErr_TDB_RAISE_IF_CLOSED(self);
return PyInt_FromLong(tdb_get_seqnum(self->ctx));
}
static PyObject *tdb_object_repr(PyTdbObject *self)
{
+ PyErr_TDB_RAISE_IF_CLOSED(self);
if (tdb_get_flags(self->ctx) & TDB_INTERNAL) {
return PyString_FromString("Tdb(<internal>)");
} else {
static PyObject *obj_getitem(PyTdbObject *self, PyObject *key)
{
TDB_DATA tkey, val;
+ PyErr_TDB_RAISE_IF_CLOSED(self);
if (!PyString_Check(key)) {
PyErr_SetString(PyExc_TypeError, "Expected string as key");
return NULL;
{
TDB_DATA tkey, tval;
int ret;
+ PyErr_TDB_RAISE_RETURN_MINUS_1_IF_CLOSED(self);
if (!PyString_Check(key)) {
PyErr_SetString(PyExc_TypeError, "Expected string as key");
return -1;