return NULL; \
}
+#define PyNtdb_CHECK_CLOSED(pyobj) \
+ if (pyobj->closed) {\
+ PyErr_SetObject(PyExc_RuntimeError, \
+ Py_BuildValue("(i,s)", NTDB_ERR_EINVAL, "database is closed")); \
+ return NULL; \
+ }
+
+
static void stderr_log(struct ntdb_context *ntdb,
enum ntdb_log_level level,
enum NTDB_ERROR ecode,
static PyObject *obj_transaction_cancel(PyNtdbObject *self)
{
+ PyNtdb_CHECK_CLOSED(self);
ntdb_transaction_cancel(self->ctx);
Py_RETURN_NONE;
}
static PyObject *obj_transaction_commit(PyNtdbObject *self)
{
- enum NTDB_ERROR ret = ntdb_transaction_commit(self->ctx);
+ enum NTDB_ERROR ret;
+ PyNtdb_CHECK_CLOSED(self);
+ ret = ntdb_transaction_commit(self->ctx);
PyErr_NTDB_ERROR_IS_ERR_RAISE(ret);
Py_RETURN_NONE;
}
static PyObject *obj_transaction_prepare_commit(PyNtdbObject *self)
{
- enum NTDB_ERROR ret = ntdb_transaction_prepare_commit(self->ctx);
+ enum NTDB_ERROR ret;
+ PyNtdb_CHECK_CLOSED(self);
+ ret = ntdb_transaction_prepare_commit(self->ctx);
PyErr_NTDB_ERROR_IS_ERR_RAISE(ret);
Py_RETURN_NONE;
}
static PyObject *obj_transaction_start(PyNtdbObject *self)
{
- enum NTDB_ERROR ret = ntdb_transaction_start(self->ctx);
+ enum NTDB_ERROR ret;
+ PyNtdb_CHECK_CLOSED(self);
+ ret = ntdb_transaction_start(self->ctx);
PyErr_NTDB_ERROR_IS_ERR_RAISE(ret);
Py_RETURN_NONE;
}
static PyObject *obj_lockall(PyNtdbObject *self)
{
- enum NTDB_ERROR ret = ntdb_lockall(self->ctx);
+ enum NTDB_ERROR ret;
+ PyNtdb_CHECK_CLOSED(self);
+ ret = ntdb_lockall(self->ctx);
PyErr_NTDB_ERROR_IS_ERR_RAISE(ret);
Py_RETURN_NONE;
}
static PyObject *obj_unlockall(PyNtdbObject *self)
{
+ PyNtdb_CHECK_CLOSED(self);
ntdb_unlockall(self->ctx);
Py_RETURN_NONE;
}
static PyObject *obj_lockall_read(PyNtdbObject *self)
{
- enum NTDB_ERROR ret = ntdb_lockall_read(self->ctx);
+ enum NTDB_ERROR ret;
+ PyNtdb_CHECK_CLOSED(self);
+ ret = ntdb_lockall_read(self->ctx);
PyErr_NTDB_ERROR_IS_ERR_RAISE(ret);
Py_RETURN_NONE;
}
static PyObject *obj_unlockall_read(PyNtdbObject *self)
{
+ PyNtdb_CHECK_CLOSED(self);
ntdb_unlockall_read(self->ctx);
Py_RETURN_NONE;
}
NTDB_DATA key, data;
PyObject *py_key;
enum NTDB_ERROR ret;
+
+ PyNtdb_CHECK_CLOSED(self);
+
if (!PyArg_ParseTuple(args, "O", &py_key))
return NULL;
NTDB_DATA key, data;
PyObject *py_key, *py_data;
enum NTDB_ERROR ret;
+
+ PyNtdb_CHECK_CLOSED(self);
+
if (!PyArg_ParseTuple(args, "OO", &py_key, &py_data))
return NULL;
enum NTDB_ERROR ret;
NTDB_DATA key;
+ PyNtdb_CHECK_CLOSED(self);
+
ret = ntdb_firstkey(self->ctx, &key);
if (ret == NTDB_ERR_NOEXIST)
Py_RETURN_NONE;
NTDB_DATA key;
PyObject *py_key;
enum NTDB_ERROR ret;
+
+ PyNtdb_CHECK_CLOSED(self);
+
if (!PyArg_ParseTuple(args, "O", &py_key))
return NULL;
NTDB_DATA key;
PyObject *py_key;
enum NTDB_ERROR ret;
+
+ PyNtdb_CHECK_CLOSED(self);
+
if (!PyArg_ParseTuple(args, "O", &py_key))
return NULL;
{
NTDB_DATA key;
PyObject *py_key;
+
+ PyNtdb_CHECK_CLOSED(self);
+
if (!PyArg_ParseTuple(args, "O", &py_key))
return NULL;
enum NTDB_ERROR ret;
int flag = NTDB_REPLACE;
PyObject *py_key, *py_value;
+ PyNtdb_CHECK_CLOSED(self);
if (!PyArg_ParseTuple(args, "OO|i", &py_key, &py_value, &flag))
return NULL;
static PyObject *obj_add_flag(PyNtdbObject *self, PyObject *args)
{
unsigned flag;
+ PyNtdb_CHECK_CLOSED(self);
if (!PyArg_ParseTuple(args, "I", &flag))
return NULL;
{
unsigned flag;
+ PyNtdb_CHECK_CLOSED(self);
+
if (!PyArg_ParseTuple(args, "I", &flag))
return NULL;
{
PyNtdbIteratorObject *ret;
enum NTDB_ERROR e;
+ PyNtdb_CHECK_CLOSED(self);
ret = PyObject_New(PyNtdbIteratorObject, &PyNtdbIterator);
if (!ret)
static PyObject *obj_clear(PyNtdbObject *self)
{
- enum NTDB_ERROR ret = ntdb_wipe_all(self->ctx);
+ enum NTDB_ERROR ret;
+ PyNtdb_CHECK_CLOSED(self);
+ ret = ntdb_wipe_all(self->ctx);
PyErr_NTDB_ERROR_IS_ERR_RAISE(ret);
Py_RETURN_NONE;
}
static PyObject *obj_enable_seqnum(PyNtdbObject *self)
{
+ PyNtdb_CHECK_CLOSED(self);
ntdb_add_flag(self->ctx, NTDB_SEQNUM);
Py_RETURN_NONE;
}
static PyObject *obj_get_flags(PyNtdbObject *self, void *closure)
{
+ PyNtdb_CHECK_CLOSED(self);
return PyInt_FromLong(ntdb_get_flags(self->ctx));
}
static PyObject *obj_get_filename(PyNtdbObject *self, void *closure)
{
+ PyNtdb_CHECK_CLOSED(self);
return PyString_FromString(ntdb_name(self->ctx));
}
static PyObject *obj_get_seqnum(PyNtdbObject *self, void *closure)
{
+ PyNtdb_CHECK_CLOSED(self);
return PyInt_FromLong(ntdb_get_seqnum(self->ctx));
}
NTDB_DATA tkey, val;
enum NTDB_ERROR ret;
+ PyNtdb_CHECK_CLOSED(self);
+
if (!PyString_Check(key)) {
PyErr_SetString(PyExc_TypeError, "Expected string as key");
return NULL;
{
NTDB_DATA tkey, tval;
enum NTDB_ERROR ret;
+ if (self->closed) {
+ PyErr_SetObject(PyExc_RuntimeError,
+ Py_BuildValue("(i,s)", NTDB_ERR_EINVAL, "database is closed"));
+ return -1;
+ }
+
if (!PyString_Check(key)) {
PyErr_SetString(PyExc_TypeError, "Expected string as key");
return -1;
.mp_subscript = (binaryfunc)obj_getitem,
.mp_ass_subscript = (objobjargproc)obj_setitem,
};
+
static PyTypeObject PyNtdb = {
.tp_name = "ntdb.Ntdb",
.tp_basicsize = sizeof(PyNtdbObject),