From 3be53c46677f05fcdeb7791a171ad041237902d2 Mon Sep 17 00:00:00 2001 From: Andrea Zagli Date: Sat, 15 Oct 2011 16:33:03 +0200 Subject: [PATCH] Added function GdaEx::row_to_hashtable (closes #6). Must be tested. --- src/gdaex.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/gdaex.h | 1 + 2 files changed, 54 insertions(+) diff --git a/src/gdaex.c b/src/gdaex.c index c30bbf1..2f7b907 100644 --- a/src/gdaex.c +++ b/src/gdaex.c @@ -2197,6 +2197,59 @@ GHashTable return ret; } +/** + * gdaex_data_modelrow_to_hashtable: + * @dm: a #GdaDataModel object. + * @row: row number. + * + * Returns: a #GHashTable with keys as the columns names from @dm, + * and values as #GValue. + */ +GHashTable +*gdaex_data_model_row_to_hashtable (GdaDataModel *dm, guint row) +{ + GHashTable *ret; + + guint cols; + guint col; + + const GValue *v; + GError *error; + + g_return_val_if_fail (GDA_IS_DATA_MODEL (dm), NULL); + g_return_val_if_fail (row >= 0, NULL); + g_return_val_if_fail (row < gda_data_model_get_n_rows (dm), NULL); + + ret = NULL; + + cols = gda_data_model_get_n_columns (dm); + + if (cols > 0) + { + ret = g_hash_table_new (g_str_hash, g_str_equal); + + for (col = 0; col < cols; col++) + { + error = NULL; + v = gda_data_model_get_value_at (dm, col, row, &error); + if (v == NULL || error != NULL) + { + g_warning ("Error on retrieving column %d: %s", + col, + error != NULL && error->message != NULL ? error->message : "no details"); + } + else + { + g_hash_table_insert (ret, + g_strdup (gda_data_model_get_column_name (dm, col)), + (gpointer)v); + } + } + } + + return ret; +} + /** * gdaex_data_model_to_gtkliststore: * @dm: a #GdaDataModel object. diff --git a/src/gdaex.h b/src/gdaex.h index 1f94c8a..0cea130 100644 --- a/src/gdaex.h +++ b/src/gdaex.h @@ -174,6 +174,7 @@ struct tm *gdaex_data_model_iter_get_value_tm_at (GdaDataModelIter *iter, gint col); GHashTable *gdaex_data_model_columns_to_hashtable (GdaDataModel *dm); +GHashTable *gdaex_data_model_row_to_hashtable (GdaDataModel *dm, guint row); GtkListStore *gdaex_data_model_to_gtkliststore (GdaDataModel *dm, gboolean only_schema); -- 2.50.0