From: Andrea Zagli <azagli@libero.it>
Date: Sun, 16 Sep 2012 09:42:06 +0000 (+0200)
Subject: Reading tables fields.
X-Git-Url: https://saetta.ns0.it/gitweb?a=commitdiff_plain;h=dcefdc78c796f94b56593d2f02e14877f280b0ad;p=gdadbdiff

Reading tables fields.
---

diff --git a/.anjuta_sym_db.db b/.anjuta_sym_db.db
index 4966033..a563dbd 100644
Binary files a/.anjuta_sym_db.db and b/.anjuta_sym_db.db differ
diff --git a/src/main.c b/src/main.c
index 88f149c..1bad39b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -36,7 +36,7 @@ typedef struct
 
 typedef struct
 {
-	gchar *field_name;
+	gchar *name;
 } Field;
 
 static GOptionEntry entries[] =
@@ -70,6 +70,65 @@ update_metastore ()
 		}
 }
 
+static void
+read_fields (GdaConnection *gdacon, Table *table)
+{
+	GError *error;
+
+	GdaMetaContext mcontext = {"_columns", 1, NULL, NULL};
+
+	GValue *gval;
+
+	GdaDataModel *dm_fields;
+
+	guint rows;
+	guint row;
+
+	Field *field;
+
+	error = NULL;
+
+	mcontext.column_names = g_new (gchar *, 1);
+	mcontext.column_names[0] = "table_name";
+	mcontext.column_values = g_new (GValue *, 1);
+	mcontext.column_values[0] = gda_value_new (G_TYPE_STRING);
+
+	g_value_take_string (mcontext.column_values[0],
+	                     gda_sql_identifier_quote (table->name, gdacon, NULL, FALSE, FALSE));
+
+	if (!gda_connection_update_meta_store (gdacon, &mcontext, &error))
+		{
+			g_warning ("Unable to update database metastore: %s",
+			           (error != NULL && error->message != NULL ? error->message : "no details."));
+			return;
+		}
+
+	error = NULL;
+	gval = gda_value_new (G_TYPE_STRING);
+	g_value_take_string (gval, table->name);
+	dm_fields = gda_connection_get_meta_store_data (gdacon,
+	                                                GDA_CONNECTION_META_FIELDS,
+	                                                &error,
+	                                                1,
+	                                                "name", gval);
+	if (dm_fields != NULL && error == NULL)
+		{
+			rows = gda_data_model_get_n_rows (dm_fields);
+			for (row = 0; row < rows; row++)
+				{
+					field = g_new0 (Field, 1);
+					field->name = gda_value_stringify (gda_data_model_get_value_at (dm_fields, 0, row, NULL));
+					g_message ("\t\tField: %s", field->name);
+
+					g_hash_table_insert (table->ht_fields, field->name, field);
+				}
+		}
+	if (dm_fields != NULL)
+		{
+			g_object_unref (dm_fields);
+		}
+}
+
 static void
 read_tables (GdaConnection *gdacon, GHashTable *ht)
 {
@@ -93,11 +152,14 @@ read_tables (GdaConnection *gdacon, GHashTable *ht)
 			for (row = 0; row < rows; row++)
 				{
 					table = g_new0 (Table, 1);
+					table->ht_fields = g_hash_table_new (g_str_hash, g_str_equal);
 
 					table->name = gda_value_stringify (gda_data_model_get_value_at (dm_tables, 0, row, NULL));
 					g_message ("\tTable: %s", table->name);
 
 					g_hash_table_insert (ht, table->name, table);
+
+					read_fields (gdacon, table);
 				}
 		}
 	if (dm_tables != NULL)
diff --git a/tests/db.db b/tests/db.db
index 9831ee9..2cb8c26 100644
Binary files a/tests/db.db and b/tests/db.db differ