begin and commit can't be called during a two-phase transaction.

This commit is contained in:
Daniele Varrazzo 2010-10-08 15:16:17 +01:00
parent 98c5b1d374
commit 4588fa50f2
2 changed files with 7 additions and 0 deletions

View File

@ -143,6 +143,11 @@ HIDDEN int conn_tpc_begin(connectionObject *self, XidObject *xid);
"in asynchronous mode"); \ "in asynchronous mode"); \
return NULL; } return NULL; }
#define EXC_IF_TPC_BEGIN(self, cmd) if ((self)->tpc_xid) { \
PyErr_Format(ProgrammingError, "%s cannot be used " \
"during a two-phase transaction", #cmd); \
return NULL; }
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -137,6 +137,7 @@ psyco_conn_commit(connectionObject *self, PyObject *args)
{ {
EXC_IF_CONN_CLOSED(self); EXC_IF_CONN_CLOSED(self);
EXC_IF_CONN_ASYNC(self, commit); EXC_IF_CONN_ASYNC(self, commit);
EXC_IF_TPC_BEGIN(self, commit);
if (!PyArg_ParseTuple(args, "")) return NULL; if (!PyArg_ParseTuple(args, "")) return NULL;
@ -158,6 +159,7 @@ psyco_conn_rollback(connectionObject *self, PyObject *args)
{ {
EXC_IF_CONN_CLOSED(self); EXC_IF_CONN_CLOSED(self);
EXC_IF_CONN_ASYNC(self, rollback); EXC_IF_CONN_ASYNC(self, rollback);
EXC_IF_TPC_BEGIN(self, rollback);
if (!PyArg_ParseTuple(args, "")) return NULL; if (!PyArg_ParseTuple(args, "")) return NULL;