Ejemplo n.º 1
0
/**
 * 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;
}