Added function GdaEx::row_to_hashtable (closes #6).
authorAndrea Zagli <azagli@libero.it>
Sat, 15 Oct 2011 14:33:03 +0000 (16:33 +0200)
committerAndrea Zagli <azagli@libero.it>
Sat, 15 Oct 2011 14:33:03 +0000 (16:33 +0200)
Must be tested.

src/gdaex.c
src/gdaex.h

index c30bbf1586440d5fb147bab6120f8e6d27e705ab..2f7b9072a8f9ff2b16910f9f21fc3c4bc43b3246 100644 (file)
@@ -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.
index 1f94c8aa924bea72c1e20ee858cb6687b80837d2..0cea13044ed721d290ffb90b81912ebcf9bc0208 100644 (file)
@@ -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);