[libgda] GdaBrowser: show tables referencing the current table with FK constraints
- From: Vivien Malerba <vivien src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda] GdaBrowser: show tables referencing the current table with FK constraints
- Date: Wed, 21 Jul 2010 19:18:43 +0000 (UTC)
commit 2bb1e35c0d4bde7e98d4fdebf4ce20842d5f75ef
Author: Vivien Malerba <malerba gnome-db org>
Date: Wed Jul 21 17:19:06 2010 +0200
GdaBrowser: show tables referencing the current table with FK constraints
tools/browser/browser-connection.c | 1 -
tools/browser/schema-browser/mgr-columns.c | 18 +++++++
tools/browser/schema-browser/mgr-columns.h | 1 +
tools/browser/schema-browser/table-columns.c | 66 ++++++++++++++++++++++++-
4 files changed, 82 insertions(+), 4 deletions(-)
---
diff --git a/tools/browser/browser-connection.c b/tools/browser/browser-connection.c
index c4d7036..1ad2aed 100644
--- a/tools/browser/browser-connection.c
+++ b/tools/browser/browser-connection.c
@@ -1257,7 +1257,6 @@ query_exec_fetch_cb (BrowserConnection *bcnc)
ExecCallbackData *cbdata;
GdaSet *last_inserted_row = NULL;
- g_print (".");
if (!bcnc->priv->results_list)
goto out;
diff --git a/tools/browser/schema-browser/mgr-columns.c b/tools/browser/schema-browser/mgr-columns.c
index a5faed2..136932c 100644
--- a/tools/browser/schema-browser/mgr-columns.c
+++ b/tools/browser/schema-browser/mgr-columns.c
@@ -369,6 +369,24 @@ mgr_columns_update_children (GdaTreeManager *manager, GdaTreeNode *node, const G
gda_tree_node_set_node_attribute (snode, "icon", av, NULL);
gda_value_free (av);
+ /* details */
+ GString *details = NULL;
+ if (col->pkey)
+ details = g_string_new (_("Primary key"));
+ if (is_fk) {
+ if (details)
+ g_string_append (details, ", ");
+ else
+ details = g_string_new ("");
+ g_string_append (details, _("Foreign key"));
+ }
+ if (details) {
+ g_value_set_string ((av = gda_value_new (G_TYPE_STRING)), details->str);
+ gda_tree_node_set_node_attribute (snode, MGR_COLUMNS_COL_DETAILS, av, NULL);
+ gda_value_free (av);
+ g_string_free (details, TRUE);
+ }
+
nodes_list = g_slist_prepend (nodes_list, snode);
}
diff --git a/tools/browser/schema-browser/mgr-columns.h b/tools/browser/schema-browser/mgr-columns.h
index df4ea19..951b36d 100644
--- a/tools/browser/schema-browser/mgr-columns.h
+++ b/tools/browser/schema-browser/mgr-columns.h
@@ -65,6 +65,7 @@ GdaTreeManager* mgr_columns_new (BrowserConnection *bcnc, c
#define MGR_COLUMNS_COL_TYPE_ATT_NAME "type"
#define MGR_COLUMNS_COL_NOTNULL_ATT_NAME "notnull"
#define MGR_COLUMNS_COL_DEFAULT_ATT_NAME "default"
+#define MGR_COLUMNS_COL_DETAILS "details"
G_END_DECLS
diff --git a/tools/browser/schema-browser/table-columns.c b/tools/browser/schema-browser/table-columns.c
index a6fe29e..89e04a4 100644
--- a/tools/browser/schema-browser/table-columns.c
+++ b/tools/browser/schema-browser/table-columns.c
@@ -317,6 +317,58 @@ meta_changed_cb (BrowserConnection *bcnc, GdaMetaStruct *mstruct, TableColumns *
}
g_object_unref (model);
}
+
+ /* reverse FK constraints */
+ g_value_set_string ((catalog_v = gda_value_new (G_TYPE_STRING)), dbo->obj_catalog);
+ model = gda_meta_store_extract (browser_connection_get_meta_store (tcolumns->priv->bcnc),
+ "SELECT c.table_schema, c.table_name, t.table_short_name FROM _referential_constraints c NATURAL JOIN _tables t WHERE ref_table_catalog = ##catalog::string AND ref_table_schema=##schema::string AND ref_table_name=##tname::string", &error,
+ "catalog", catalog_v,
+ "schema", schema_v,
+ "tname", name_v, NULL);
+ if (model) {
+ gint nrows;
+
+ gda_data_model_dump (model, NULL);
+ nrows = gda_data_model_get_n_rows (model);
+ if (nrows > 0) {
+ gtk_text_buffer_insert_with_tags_by_name (tbuffer,
+ ¤t,
+ _("Tables referencing this one"), -1,
+ "section", NULL);
+ gtk_text_buffer_insert (tbuffer, ¤t, "\n", -1);
+
+ gint i;
+ const GValue *cvalue[3];
+ for (i = 0; i < nrows; i++) {
+ if (i > 0)
+ gtk_text_buffer_insert (tbuffer, ¤t, "\n", -1);
+
+ gint j;
+ for (j = 0; j < 3; j++) {
+ cvalue[j] = gda_data_model_get_value_at (model, j, i, NULL);
+ if (! cvalue[j])
+ break;
+ }
+ if (j != 3)
+ break;
+ GtkTextTag *tag;
+ tag = gtk_text_buffer_create_tag (tbuffer, NULL,
+ "foreground", "blue",
+ "weight", PANGO_WEIGHT_NORMAL,
+ "underline", PANGO_UNDERLINE_SINGLE,
+ NULL);
+ g_object_set_data_full (G_OBJECT (tag), "table_schema",
+ g_value_dup_string (cvalue[0]), g_free);
+ g_object_set_data_full (G_OBJECT (tag), "table_name",
+ g_value_dup_string (cvalue[1]), g_free);
+ g_object_set_data_full (G_OBJECT (tag), "table_short_name",
+ g_value_dup_string (cvalue[2]), g_free);
+ gtk_text_buffer_insert_with_tags (tbuffer, ¤t,
+ g_value_get_string (cvalue[2]), -1, tag, NULL);
+ }
+ }
+ g_object_unref (model);
+ }
}
if (schema_v)
@@ -343,7 +395,8 @@ table_columns_new (TableInfo *tinfo)
COLUMN_TYPE,
COLUMN_NOTNULL,
COLUMN_DEFAULT,
- COLUMN_ICON
+ COLUMN_ICON,
+ COLUMN_DETAILS
};
g_return_val_if_fail (IS_TABLE_INFO (tinfo), NULL);
@@ -382,12 +435,13 @@ table_columns_new (TableInfo *tinfo)
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
- model = gdaui_tree_store_new (tcolumns->priv->columns_tree, 5,
+ model = gdaui_tree_store_new (tcolumns->priv->columns_tree, 6,
G_TYPE_STRING, MGR_COLUMNS_COL_NAME_ATT_NAME,
G_TYPE_STRING, MGR_COLUMNS_COL_TYPE_ATT_NAME,
G_TYPE_BOOLEAN, MGR_COLUMNS_COL_NOTNULL_ATT_NAME,
G_TYPE_STRING, MGR_COLUMNS_COL_DEFAULT_ATT_NAME,
- G_TYPE_OBJECT, "icon");
+ G_TYPE_OBJECT, "icon",
+ G_TYPE_STRING, MGR_COLUMNS_COL_DETAILS);
treeview = browser_make_tree_view (model);
g_object_unref (model);
@@ -423,6 +477,12 @@ table_columns_new (TableInfo *tinfo)
"text", COLUMN_DEFAULT, NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
+ /* Colum: Details */
+ renderer = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new_with_attributes ("Details", renderer,
+ "text", COLUMN_DETAILS, NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
+
/* scrolled window packing */
GtkWidget *sw;
sw = gtk_scrolled_window_new (NULL, NULL);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]