2003-01-02 06:29:39 +08:00
|
|
|
/* MDB Tools - A library for reading MS Access database file
|
|
|
|
* Copyright (C) 2000 Brian Bruns
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
*/
|
2002-12-27 23:09:02 +08:00
|
|
|
#include "gmdb.h"
|
|
|
|
|
|
|
|
#if SQL
|
|
|
|
|
|
|
|
typedef struct GMdbSQLWindow {
|
|
|
|
GtkWidget *window;
|
|
|
|
GtkWidget *textbox;
|
|
|
|
GtkWidget *combo;
|
|
|
|
GtkWidget *clist;
|
|
|
|
GtkWidget *scroll;
|
|
|
|
GtkWidget *ctree;
|
|
|
|
GtkCTreeNode *current_node;
|
|
|
|
GList *history;
|
|
|
|
} GMdbSQLWindow;
|
|
|
|
|
2003-01-05 22:57:50 +08:00
|
|
|
GList *sql_list;
|
2002-12-27 23:09:02 +08:00
|
|
|
|
|
|
|
extern GtkWidget *app;
|
|
|
|
extern MdbHandle *mdb;
|
|
|
|
extern MdbSQL *sql;
|
|
|
|
|
2002-12-31 00:38:47 +08:00
|
|
|
void gmdb_sql_tree_populate(MdbHandle *mdb, GladeXML *xml);
|
2002-12-27 23:09:02 +08:00
|
|
|
|
2003-01-05 22:57:50 +08:00
|
|
|
void
|
|
|
|
gmdb_sql_close_all()
|
2002-12-27 23:09:02 +08:00
|
|
|
{
|
2003-01-05 22:57:50 +08:00
|
|
|
GladeXML *xml;
|
|
|
|
GtkWidget *win;
|
|
|
|
|
|
|
|
while (xml = g_list_nth_data(sql_list, 0)) {
|
|
|
|
win = glade_xml_get_widget (xml, "sql_window");
|
|
|
|
sql_list = g_list_remove(sql_list, xml);
|
|
|
|
if (win) gtk_widget_destroy(win);
|
|
|
|
}
|
2002-12-27 23:09:02 +08:00
|
|
|
}
|
2003-01-05 22:57:50 +08:00
|
|
|
|
|
|
|
/* callbacks */
|
2002-12-27 23:09:02 +08:00
|
|
|
void
|
2003-01-13 06:59:41 +08:00
|
|
|
gmdb_sql_copy_cb(GtkWidget *w, GladeXML *xml)
|
|
|
|
{
|
|
|
|
GtkTextBuffer *txtbuffer;
|
|
|
|
GtkClipboard *clipboard;
|
|
|
|
GtkWidget *textview;
|
|
|
|
|
|
|
|
textview = glade_xml_get_widget(xml, "sql_textview");
|
|
|
|
clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
|
|
|
|
txtbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
|
|
|
|
gtk_text_buffer_copy_clipboard(txtbuffer, clipboard);
|
|
|
|
}
|
|
|
|
void
|
|
|
|
gmdb_sql_cut_cb(GtkWidget *w, GladeXML *xml)
|
|
|
|
{
|
|
|
|
GtkTextBuffer *txtbuffer;
|
|
|
|
GtkClipboard *clipboard;
|
|
|
|
GtkWidget *textview;
|
|
|
|
|
|
|
|
textview = glade_xml_get_widget(xml, "sql_textview");
|
|
|
|
clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
|
|
|
|
txtbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
|
|
|
|
gtk_text_buffer_cut_clipboard(txtbuffer, clipboard, TRUE);
|
|
|
|
}
|
|
|
|
void
|
|
|
|
gmdb_sql_paste_cb(GtkWidget *w, GladeXML *xml)
|
|
|
|
{
|
|
|
|
GtkTextBuffer *txtbuffer;
|
|
|
|
GtkClipboard *clipboard;
|
|
|
|
GtkWidget *textview;
|
|
|
|
|
|
|
|
textview = glade_xml_get_widget(xml, "sql_textview");
|
|
|
|
clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
|
|
|
|
txtbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
|
|
|
|
gtk_text_buffer_paste_clipboard(txtbuffer, clipboard, NULL, TRUE);
|
|
|
|
}
|
|
|
|
void
|
2002-12-31 00:38:47 +08:00
|
|
|
gmdb_sql_close_cb(GtkWidget *w, GladeXML *xml)
|
2002-12-27 23:09:02 +08:00
|
|
|
{
|
2002-12-31 00:38:47 +08:00
|
|
|
GtkWidget *win;
|
2003-01-05 22:57:50 +08:00
|
|
|
sql_list = g_list_remove(sql_list, xml);
|
2002-12-31 00:38:47 +08:00
|
|
|
win = glade_xml_get_widget (xml, "sql_window");
|
|
|
|
if (win) gtk_widget_destroy(win);
|
2002-12-27 23:09:02 +08:00
|
|
|
}
|
2002-12-31 00:38:47 +08:00
|
|
|
|
2002-12-27 23:09:02 +08:00
|
|
|
void
|
|
|
|
gmdb_sql_dnd_dataget_cb(
|
|
|
|
GtkWidget *w, GdkDragContext *dc,
|
|
|
|
GtkSelectionData *selection_data, guint info, guint t,
|
2002-12-31 00:38:47 +08:00
|
|
|
GladeXML *xml)
|
2002-12-27 23:09:02 +08:00
|
|
|
{
|
|
|
|
gchar tablename[256];
|
2002-12-31 00:38:47 +08:00
|
|
|
//gchar *tablename = "Orders";
|
|
|
|
gchar *name;
|
|
|
|
GtkTreeSelection *select;
|
|
|
|
GtkTreeStore *store;
|
|
|
|
GtkTreeView *tree;
|
2003-01-13 06:59:41 +08:00
|
|
|
GtkTreeIter iter2;
|
2002-12-31 00:38:47 +08:00
|
|
|
|
2003-01-05 22:57:50 +08:00
|
|
|
tree = (GtkTreeView *) glade_xml_get_widget(xml, "sql_treeview");
|
2002-12-31 00:38:47 +08:00
|
|
|
select = gtk_tree_view_get_selection(GTK_TREE_VIEW (tree));
|
|
|
|
store = (GtkTreeStore *) gtk_tree_view_get_model(tree);
|
|
|
|
gtk_tree_selection_get_selected (select, NULL, &iter2);
|
|
|
|
gtk_tree_model_get (GTK_TREE_MODEL(store), &iter2, 0, &name, -1);
|
|
|
|
|
|
|
|
strcpy(tablename,name);
|
|
|
|
g_free(name);
|
|
|
|
printf("table %s\n",tablename);
|
2002-12-27 23:09:02 +08:00
|
|
|
//strcpy(tablename, "Shippers");
|
|
|
|
gtk_selection_data_set(
|
|
|
|
selection_data,
|
|
|
|
GDK_SELECTION_TYPE_STRING,
|
|
|
|
8, /* 8 bits per character. */
|
2002-12-31 00:38:47 +08:00
|
|
|
tablename, strlen(tablename));
|
2002-12-27 23:09:02 +08:00
|
|
|
}
|
|
|
|
void gmdb_sql_dnd_datareceived_cb(
|
|
|
|
GtkWidget *w,
|
|
|
|
GdkDragContext *dc,
|
|
|
|
gint x, gint y,
|
|
|
|
GtkSelectionData *selection_data,
|
|
|
|
guint info, guint t,
|
2002-12-31 00:38:47 +08:00
|
|
|
GladeXML *xml)
|
2002-12-27 23:09:02 +08:00
|
|
|
{
|
2003-01-13 06:59:41 +08:00
|
|
|
gchar *buf;
|
|
|
|
GtkTextIter iter;
|
2002-12-27 23:09:02 +08:00
|
|
|
GtkTextBuffer *txtbuffer;
|
2002-12-31 00:38:47 +08:00
|
|
|
GtkWidget *textview;
|
2002-12-27 23:09:02 +08:00
|
|
|
|
2002-12-31 00:38:47 +08:00
|
|
|
textview = glade_xml_get_widget(xml, "sql_textview");
|
2002-12-27 23:09:02 +08:00
|
|
|
buf = selection_data->data;
|
2002-12-31 00:38:47 +08:00
|
|
|
txtbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
|
2002-12-27 23:09:02 +08:00
|
|
|
if (gtk_text_buffer_get_char_count(txtbuffer)==0) {
|
|
|
|
gtk_text_buffer_get_iter_at_offset (txtbuffer, &iter, 0);
|
|
|
|
gtk_text_buffer_insert(txtbuffer, &iter, "select * from ", 14);
|
|
|
|
}
|
2002-12-31 00:38:47 +08:00
|
|
|
gtk_widget_grab_focus(GTK_WIDGET(textview));
|
2002-12-27 23:09:02 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
gmdb_sql_select_hist_cb(GtkList *list, GtkWidget *w, GMdbSQLWindow *sqlwin)
|
|
|
|
{
|
|
|
|
guint child_num;
|
|
|
|
gchar *buf;
|
|
|
|
GtkTextBuffer *txtbuffer;
|
|
|
|
|
|
|
|
child_num = gtk_list_child_position(list, w);
|
2002-12-31 00:38:47 +08:00
|
|
|
buf = (gchar *) gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(sqlwin->combo)->entry));
|
2002-12-27 23:09:02 +08:00
|
|
|
txtbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(sqlwin->textbox));
|
|
|
|
gtk_text_buffer_set_text(txtbuffer, buf, strlen(buf));
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2002-12-31 00:38:47 +08:00
|
|
|
gmdb_sql_execute_cb(GtkWidget *w, GladeXML *xml)
|
2002-12-27 23:09:02 +08:00
|
|
|
{
|
|
|
|
guint len;
|
|
|
|
gchar *buf;
|
|
|
|
gchar *bound_data[256];
|
|
|
|
int i;
|
|
|
|
MdbSQLColumn *sqlcol;
|
|
|
|
gchar *titles[256];
|
|
|
|
GtkTextBuffer *txtbuffer;
|
|
|
|
GtkTextIter start, end;
|
2002-12-31 00:38:47 +08:00
|
|
|
GtkWidget *textview, *combo, *treeview, *store;
|
|
|
|
GList *history;
|
|
|
|
GType *gtypes;
|
|
|
|
GtkTreeIter iter;
|
|
|
|
GtkTreeViewColumn *column;
|
2003-01-13 06:59:41 +08:00
|
|
|
long row, maxrow;
|
2002-12-27 23:09:02 +08:00
|
|
|
|
|
|
|
/* stuff this query on the history */
|
2002-12-31 00:38:47 +08:00
|
|
|
textview = glade_xml_get_widget(xml, "sql_textview");
|
|
|
|
combo = glade_xml_get_widget(xml, "sql_combo");
|
|
|
|
txtbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
|
2002-12-27 23:09:02 +08:00
|
|
|
len = gtk_text_buffer_get_char_count(txtbuffer);
|
|
|
|
gtk_text_buffer_get_iter_at_offset (txtbuffer, &start, 0);
|
|
|
|
gtk_text_buffer_get_iter_at_offset (txtbuffer, &end, len);
|
|
|
|
buf = gtk_text_buffer_get_text(txtbuffer, &start, &end, FALSE);
|
|
|
|
|
2002-12-31 00:38:47 +08:00
|
|
|
/* add to the history */
|
|
|
|
history = g_object_get_data(G_OBJECT(combo),"hist_list");
|
|
|
|
history = g_list_prepend(history, g_strdup(buf));
|
|
|
|
g_object_set_data(G_OBJECT(combo), "hist_list", history);
|
|
|
|
gtk_combo_set_popdown_strings(GTK_COMBO(combo), history);
|
2002-12-27 23:09:02 +08:00
|
|
|
|
|
|
|
/* ok now execute it */
|
|
|
|
g_input_ptr = buf;
|
2002-12-31 00:38:47 +08:00
|
|
|
/* begin unsafe */
|
2002-12-27 23:09:02 +08:00
|
|
|
_mdb_sql(sql);
|
|
|
|
if (yyparse()) {
|
|
|
|
/* end unsafe */
|
|
|
|
gmdb_info_msg("Couldn't parse SQL");
|
|
|
|
mdb_sql_reset(sql);
|
|
|
|
return;
|
|
|
|
}
|
2002-12-31 00:38:47 +08:00
|
|
|
|
|
|
|
treeview = glade_xml_get_widget(xml, "sql_results");
|
|
|
|
|
|
|
|
gtypes = g_malloc(sizeof(GType) * sql->num_columns);
|
|
|
|
for (i=0;i<sql->num_columns;i++)
|
|
|
|
gtypes[i]=G_TYPE_STRING;
|
|
|
|
|
2003-01-13 06:59:41 +08:00
|
|
|
store = (GtkTreeStore *) gtk_tree_view_get_model(treeview);
|
2002-12-31 00:38:47 +08:00
|
|
|
if (store) {
|
|
|
|
i=0;
|
|
|
|
while (column = gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), i)) {
|
|
|
|
gtk_tree_view_remove_column(GTK_TREE_VIEW(treeview), column);
|
|
|
|
}
|
|
|
|
gtk_widget_destroy(store);
|
|
|
|
}
|
|
|
|
store = (GtkWidget *) gtk_list_store_newv(sql->num_columns, gtypes);
|
|
|
|
g_free(gtypes);
|
|
|
|
|
|
|
|
gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), GTK_TREE_MODEL(store));
|
|
|
|
|
|
|
|
GtkCellRenderer *renderer;
|
|
|
|
renderer = gtk_cell_renderer_text_new();
|
|
|
|
|
|
|
|
for (i=0;i<sql->num_columns;i++) {
|
|
|
|
bound_data[i] = (char *) malloc(MDB_BIND_SIZE);
|
|
|
|
bound_data[i][0] = '\0';
|
|
|
|
mdbsql_bind_column(sql, i+1, bound_data[i]);
|
|
|
|
sqlcol = g_ptr_array_index(sql->columns,i);
|
|
|
|
column = gtk_tree_view_column_new_with_attributes(sqlcol->name, renderer, "text", i, NULL);
|
|
|
|
gtk_tree_view_append_column(GTK_TREE_VIEW (treeview), column);
|
2002-12-27 23:09:02 +08:00
|
|
|
}
|
|
|
|
|
2003-01-13 06:59:41 +08:00
|
|
|
maxrow = gmdb_prefs_get_maxrows();
|
|
|
|
|
|
|
|
row = 0;
|
|
|
|
while(mdb_fetch_row(sql->cur_table) &&
|
|
|
|
(!maxrow || (row < maxrow))) {
|
|
|
|
row++;
|
2002-12-31 00:38:47 +08:00
|
|
|
gtk_list_store_append(GTK_LIST_STORE(store), &iter);
|
|
|
|
for (i=0;i<sql->num_columns;i++) {
|
|
|
|
gtk_list_store_set(GTK_LIST_STORE(store),
|
|
|
|
&iter, i, (gchar *) bound_data[i], -1);
|
|
|
|
}
|
|
|
|
}
|
2002-12-27 23:09:02 +08:00
|
|
|
|
|
|
|
|
|
|
|
/* free the memory used to bind */
|
|
|
|
for (i=0;i<sql->num_columns;i++) {
|
|
|
|
free(bound_data[i]);
|
|
|
|
}
|
|
|
|
|
|
|
|
mdb_sql_reset(sql);
|
|
|
|
g_free(buf);
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2002-12-31 00:38:47 +08:00
|
|
|
gmdb_sql_new_cb(GtkWidget *w, gpointer data)
|
2002-12-27 23:09:02 +08:00
|
|
|
{
|
|
|
|
GtkTargetEntry src;
|
2002-12-31 00:38:47 +08:00
|
|
|
GtkWidget *mi, *but;
|
2003-01-05 22:57:50 +08:00
|
|
|
GladeXML *sqlwin_xml;
|
2002-12-31 00:38:47 +08:00
|
|
|
|
|
|
|
/* load the interface */
|
2003-01-13 06:59:41 +08:00
|
|
|
sqlwin_xml = glade_xml_new(GMDB_GLADEDIR "gmdb-sql.glade", NULL, NULL);
|
2002-12-31 00:38:47 +08:00
|
|
|
/* connect the signals in the interface */
|
|
|
|
glade_xml_signal_autoconnect(sqlwin_xml);
|
|
|
|
|
2003-01-05 22:57:50 +08:00
|
|
|
sql_list = g_list_append(sql_list, sqlwin_xml);
|
|
|
|
|
2003-01-13 06:59:41 +08:00
|
|
|
mi = glade_xml_get_widget (sqlwin_xml, "paste_menu");
|
|
|
|
g_signal_connect (G_OBJECT (mi), "activate",
|
|
|
|
G_CALLBACK (gmdb_sql_paste_cb), sqlwin_xml);
|
|
|
|
|
|
|
|
mi = glade_xml_get_widget (sqlwin_xml, "cut_menu");
|
|
|
|
g_signal_connect (G_OBJECT (mi), "activate",
|
|
|
|
G_CALLBACK (gmdb_sql_cut_cb), sqlwin_xml);
|
|
|
|
|
|
|
|
mi = glade_xml_get_widget (sqlwin_xml, "copy_menu");
|
|
|
|
g_signal_connect (G_OBJECT (mi), "activate",
|
|
|
|
G_CALLBACK (gmdb_sql_copy_cb), sqlwin_xml);
|
|
|
|
|
2002-12-31 00:38:47 +08:00
|
|
|
mi = glade_xml_get_widget (sqlwin_xml, "close_menu");
|
|
|
|
g_signal_connect (G_OBJECT (mi), "activate",
|
|
|
|
G_CALLBACK (gmdb_sql_close_cb), sqlwin_xml);
|
|
|
|
|
|
|
|
but = glade_xml_get_widget (sqlwin_xml, "close_button");
|
|
|
|
g_signal_connect (G_OBJECT (but), "clicked",
|
|
|
|
G_CALLBACK (gmdb_sql_close_cb), sqlwin_xml);
|
|
|
|
|
|
|
|
mi = glade_xml_get_widget (sqlwin_xml, "execute_menu");
|
|
|
|
g_signal_connect (G_OBJECT (mi), "activate",
|
|
|
|
G_CALLBACK (gmdb_sql_execute_cb), sqlwin_xml);
|
|
|
|
|
|
|
|
but = glade_xml_get_widget (sqlwin_xml, "execute_button");
|
|
|
|
g_signal_connect (G_OBJECT (but), "clicked",
|
|
|
|
G_CALLBACK (gmdb_sql_execute_cb), sqlwin_xml);
|
|
|
|
|
|
|
|
/* set up treeview, libglade only gives us the empty widget */
|
|
|
|
GtkWidget *tree = glade_xml_get_widget(sqlwin_xml, "sql_treeview");
|
|
|
|
GtkTreeStore *store = gtk_tree_store_new(1, G_TYPE_STRING);
|
|
|
|
gtk_tree_view_set_model(GTK_TREE_VIEW(tree), GTK_TREE_MODEL(store));
|
|
|
|
|
|
|
|
GtkCellRenderer *renderer;
|
|
|
|
GtkTreeViewColumn *column;
|
|
|
|
renderer = gtk_cell_renderer_text_new();
|
|
|
|
column = gtk_tree_view_column_new_with_attributes("Name",
|
|
|
|
renderer, "text", 0, NULL);
|
|
|
|
gtk_tree_view_append_column(GTK_TREE_VIEW (tree), column);
|
|
|
|
|
|
|
|
GtkTreeSelection *select =
|
|
|
|
gtk_tree_view_get_selection (GTK_TREE_VIEW (tree));
|
|
|
|
gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE);
|
|
|
|
//g_signal_connect (G_OBJECT (select), "changed",
|
|
|
|
//G_CALLBACK (gmdb_sql_select_cb), sqlwin_xml);
|
2002-12-27 23:09:02 +08:00
|
|
|
|
|
|
|
/* populate first level of tree */
|
2002-12-31 00:38:47 +08:00
|
|
|
gmdb_sql_tree_populate(mdb, sqlwin_xml);
|
|
|
|
|
|
|
|
GtkWidget *textview = glade_xml_get_widget(sqlwin_xml, "sql_textview");
|
2002-12-27 23:09:02 +08:00
|
|
|
src.target = "table";
|
|
|
|
src.flags = 0;
|
|
|
|
src.info = 1;
|
2002-12-31 00:38:47 +08:00
|
|
|
gtk_drag_source_set( tree, GDK_BUTTON1_MASK, &src, 1, GDK_ACTION_COPY);
|
|
|
|
gtk_drag_dest_set( textview,
|
2002-12-27 23:09:02 +08:00
|
|
|
//GTK_DEST_DEFAULT_MOTION |
|
|
|
|
GTK_DEST_DEFAULT_HIGHLIGHT ,
|
|
|
|
// GTK_DEST_DEFAULT_DROP,
|
|
|
|
&src, 1, GDK_ACTION_COPY | GDK_ACTION_MOVE);
|
2002-12-31 00:38:47 +08:00
|
|
|
gtk_signal_connect( GTK_OBJECT(tree), "drag_data_get",
|
|
|
|
GTK_SIGNAL_FUNC(gmdb_sql_dnd_dataget_cb), sqlwin_xml);
|
|
|
|
gtk_signal_connect( GTK_OBJECT(textview), "drag_data_received",
|
|
|
|
GTK_SIGNAL_FUNC(gmdb_sql_dnd_datareceived_cb), sqlwin_xml);
|
2002-12-27 23:09:02 +08:00
|
|
|
|
2002-12-31 00:38:47 +08:00
|
|
|
gtk_widget_grab_focus(GTK_WIDGET(textview));
|
2002-12-27 23:09:02 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/* functions */
|
2002-12-31 00:38:47 +08:00
|
|
|
void
|
|
|
|
gmdb_sql_tree_populate(MdbHandle *mdb, GladeXML *xml)
|
2002-12-27 23:09:02 +08:00
|
|
|
{
|
|
|
|
int i;
|
|
|
|
MdbCatalogEntry *entry;
|
2003-01-13 06:59:41 +08:00
|
|
|
GtkTreeIter *iter2;
|
2002-12-31 00:38:47 +08:00
|
|
|
|
2003-01-05 22:57:50 +08:00
|
|
|
GtkWidget *tree = glade_xml_get_widget(xml, "sql_treeview");
|
2002-12-31 00:38:47 +08:00
|
|
|
GtkTreeStore *store = (GtkTreeStore *) gtk_tree_view_get_model(GTK_TREE_VIEW(tree));
|
2002-12-27 23:09:02 +08:00
|
|
|
|
|
|
|
/* loop over each entry in the catalog */
|
|
|
|
for (i=0; i < mdb->num_catalog; i++) {
|
|
|
|
entry = g_ptr_array_index (mdb->catalog, i);
|
|
|
|
|
|
|
|
/* if it's a table */
|
|
|
|
if (entry->object_type == MDB_TABLE) {
|
|
|
|
/* skip the MSys tables */
|
|
|
|
if (strncmp (entry->object_name, "MSys", 4)) {
|
|
|
|
/* add table to tab */
|
2002-12-31 00:38:47 +08:00
|
|
|
iter2 = g_malloc(sizeof(GtkTreeIter));
|
|
|
|
gtk_tree_store_append(store, iter2, NULL);
|
|
|
|
gtk_tree_store_set(store, iter2, 0, entry->object_name, -1);
|
|
|
|
}
|
2002-12-27 23:09:02 +08:00
|
|
|
} /* if MDB_TABLE */
|
|
|
|
} /* for */
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
|
|
|
|
void
|
2002-12-31 00:38:47 +08:00
|
|
|
gmdb_sql_new_cb(GtkWidget *w, gpointer data)
|
2002-12-27 23:09:02 +08:00
|
|
|
{
|
|
|
|
gmdb_info_msg("SQL support was not built in.\nRun configure with the --enable-sql option.");
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|