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