/** * midgard_transaction_begin: * @self: #MidgardTransaction instance * * Begins new, underlying database provider's transaction. * In case of error, #MidgardConnection error is set to MGD_ERR_INTERNAL. * * Returns: %TRUE on success, %FALSE otherwise. * * Since: 9.09 */ gboolean midgard_transaction_begin (MidgardTransaction *self) { _ASSERT_T_MGD(self); gboolean rv = FALSE; GdaConnection *cnc = _T_CNC(self); MidgardConnection *mgd = self->priv->mgd; GError *error = NULL; g_debug("Begin named transaction '%s'", self->priv->name); rv = gda_connection_begin_transaction(cnc, self->priv->name, GDA_TRANSACTION_ISOLATION_UNKNOWN, &error); if (!error && rv) return TRUE; midgard_set_error(mgd, MGD_GENERIC_ERROR, MGD_ERR_INTERNAL, error && error->message ? error->message : " Unknown error."); if (error) g_error_free(error); return FALSE; }
gboolean midgard_cr_core_transaction_get_status (MidgardCRCoreTransaction *self) { _ASSERT_T_MGD (self); GdaConnection *cnc = _T_CNC (self); if (!cnc) return FALSE; GdaTransactionStatus *status = gda_connection_get_transaction_status(cnc); if (status->state == 0) return TRUE; return FALSE; }
void midgard_cr_core_transaction_rollback (MidgardCRCoreTransaction *self, GError **error) { _ASSERT_T_MGD (self); gboolean rv = FALSE; GdaConnection *cnc = _T_CNC (self); MidgardCRSQLStorageManager *manager = self->priv->manager; GError *err = NULL; rv = gda_connection_rollback_transaction (cnc, self->priv->name, &err); if (err) g_propagate_error (error, err); if (!rv && !err) g_warning ("Failed to rollback underlying database transaction and no error has been set"); return; }