Exemplo n.º 1
0
/**
 * midgard_connection_reopen:
 * @self: #MidgardConnection instance
 * 
 * This is MySQL optimized workaround for lost connection event.
 *
 * Returns: %TRUE on success, %FALSE otherwise
 */
gboolean midgard_connection_reopen(MidgardConnection *self)
{
	g_assert(self != NULL);

	const gchar *query = "SELECT id FROM person LIMIT 1";
	GdaDataModel *model =
		midgard_core_query_get_model(self, query);

	if (model) {

		g_object_unref(model);
		return TRUE;
	}

	guint dbtype = self->priv->config->priv->dbtype;
	const GList *events;
	glong errcode = 0;
	events = gda_connection_get_events (self->priv->connection);

	if (!events) {
		
		g_warning("Can not get connection events. Error code is unknown.");
		return FALSE;
	}

	GList *l;
	for (l = (GList *) events; l != NULL; l = l->next) {

		GdaConnectionEvent *event;
		event = GDA_CONNECTION_EVENT (l->data);

		if (gda_connection_event_get_event_type (event) == GDA_CONNECTION_EVENT_ERROR) {

			errcode = gda_connection_event_get_code(event);

			switch (dbtype) {

				case MIDGARD_DB_TYPE_MYSQL:

					if (errcode == 2006) { /* CR_SERVER_GONE_ERROR , we can not use it */
						g_debug("MySQL server has gone away. Reconnect.");
						return __mysql_reconnect(self);
					}
					break;

				default:
					/* do nothing */
					break;
			}
		}
	}

	return FALSE;
}
Exemplo n.º 2
0
static const gchar *
sql_get_last_error (GdaConnection *connection)
{
	GList              *list;
	GdaConnectionEvent *error;
	const gchar        *error_txt;

	g_return_val_if_fail (GDA_IS_CONNECTION (connection),
			      _("Can't connect to database server"));

	list = (GList *) gda_connection_get_events (connection);

	if (list == NULL) {
		return _("No errors reported.");
	}

	error = (GdaConnectionEvent *) g_list_last (list)->data;

	/* FIXME: Poor user, she won't get localized messages */
	error_txt = gda_connection_event_get_description (error);

	return error_txt;
}