static gint gda_thread_recordset_fetch_nb_rows (GdaDataSelect *model) { GdaThreadRecordset *rs = (GdaThreadRecordset*) model; gint nb; gint *res; guint jid; jid = gda_thread_wrapper_execute (rs->priv->wrapper, (GdaThreadWrapperFunc) sub_thread_fetch_nb_rows, rs->priv->sub_model, NULL, NULL); res = (gint*) gda_thread_wrapper_fetch_result (rs->priv->wrapper, TRUE, jid, NULL); nb = *res; g_free (res); COPY_PUBLIC_DATA (rs->priv->sub_model, rs); return nb; }
static gboolean gda_thread_recordset_fetch_at (GdaDataSelect *model, GdaRow **prow, gint rownum, GError **error) { GdaThreadRecordset *rs = (GdaThreadRecordset*) model; ThreadData wdata; gboolean retval; guint jid; wdata.select = (GdaDataSelect *) rs->priv->sub_model; wdata.rownum = rownum; wdata.row = prow; jid = gda_thread_wrapper_execute (rs->priv->wrapper, (GdaThreadWrapperFunc) sub_thread_fetch_at, &wdata, NULL, NULL); retval = GPOINTER_TO_INT (gda_thread_wrapper_fetch_result (rs->priv->wrapper, TRUE, jid, error)) ? TRUE : FALSE; COPY_PUBLIC_DATA (rs->priv->sub_model, rs); if (*prow && rs->priv->blobs_conv) alter_blob_values (rs, prow); return retval; }
int main (int argc, char *argv[]) { GdaConnection* connection; GdaDataModel* data; GError* error = NULL; GValue *value; gda_init(); error = NULL; /* open connection to the SalesTest data source, using the GDA_CONNECTION_OPTIONS_THREAD_SAFE flag * to make sure we can use the same connection from multiple threads at once */ connection = gda_connection_open_from_dsn ("SalesTest", NULL, GDA_CONNECTION_OPTIONS_THREAD_SAFE, &error); if (!connection) { fprintf (stderr, "%s\n", error->message); return -1; } /* update meta data */ GdaThreadWrapper *wrapper; guint job_id; g_print ("Requesting a meta data update in the background.\n"); wrapper = gda_thread_wrapper_new (); job_id = gda_thread_wrapper_execute (wrapper, (GdaThreadWrapperFunc) sub_thread_update_meta_store, connection, NULL, &error); if (job_id == 0) { fprintf (stderr, "Can't use thread wrapper: %s\n", error->message); return -1; } while (1) { gboolean *result; g_print ("Doing some business here...\n"); g_usleep (100000); result = (gboolean *) gda_thread_wrapper_fetch_result (wrapper, FALSE, job_id, &error); if (result) { gboolean meta_ok; g_object_unref (wrapper); meta_ok = *result; g_free (result); if (!meta_ok) { fprintf (stderr, "Could not update meta data: %s\n", error->message); return -1; } g_print ("Meta data has been updated!\n"); break; } } /* * Get columns of the 'products' table */ g_value_set_string ((value = gda_value_new (G_TYPE_STRING)), "products"); data = gda_connection_get_meta_store_data (connection, GDA_CONNECTION_META_FIELDS, &error, 1, "name", value); if (!data) return -1; list_table_columns (data); g_object_unref (data); return 0; }