22"PostgreSQL subtransaction context manager";
48 .name =
"PLySubtransaction",
50 .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
62 elog(
ERROR,
"could not initialize PLy_SubtransactionType");
74#if PY_VERSION_HEX < 0x03080000
82 return (PyObject *) ob;
102 PLy_exception_set(PyExc_ValueError,
"this subtransaction has already been entered");
108 PLy_exception_set(PyExc_ValueError,
"this subtransaction has already been exited");
155 if (!PyArg_ParseTuple(
args,
"OOO", &
type, &
value, &traceback))
166 PLy_exception_set(PyExc_ValueError,
"this subtransaction has already been exited");
List * list_delete_first(List *list)
List * lcons(void *datum, List *list)
void * MemoryContextAlloc(MemoryContext context, Size size)
MemoryContext TopTransactionContext
void pfree(void *pointer)
MemoryContext CurrentMemoryContext
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
void PLy_exception_set(PyObject *exc, const char *fmt,...)
static PyObject * PLy_subtransaction_exit(PyObject *self, PyObject *args)
PyObject * PLy_subtransaction_new(PyObject *self, PyObject *unused)
static PyMethodDef PLy_subtransaction_methods[]
static PyTypeObject * PLy_SubtransactionType
static PyObject * PLy_subtransaction_enter(PyObject *self, PyObject *unused)
static char PLy_subtransaction_doc[]
static PyType_Spec PLySubtransaction_spec
List * explicit_subtransactions
void PLy_subtransaction_init_type(void)
static PyType_Slot PLySubtransaction_slots[]
struct PLySubtransactionObject PLySubtransactionObject
ResourceOwner CurrentResourceOwner
PyObject_HEAD bool started
void BeginInternalSubTransaction(const char *name)
void RollbackAndReleaseCurrentSubTransaction(void)
void ReleaseCurrentSubTransaction(void)