mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-06-28 15:39:02 +08:00
store last error message in MdbSql struct and show error in gmdb2.
This commit is contained in:
parent
5c05325b54
commit
fc8ccbeaa8
@ -24,6 +24,7 @@ typedef struct {
|
|||||||
void *bound_values[256];
|
void *bound_values[256];
|
||||||
unsigned char *kludge_ttable_pg;
|
unsigned char *kludge_ttable_pg;
|
||||||
long max_rows;
|
long max_rows;
|
||||||
|
char error_msg[1024];
|
||||||
} MdbSQL;
|
} MdbSQL;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -419,6 +419,7 @@ gmdb_sql_execute_cb(GtkWidget *w, GladeXML *xml)
|
|||||||
g_input_ptr = buf;
|
g_input_ptr = buf;
|
||||||
/* begin unsafe */
|
/* begin unsafe */
|
||||||
_mdb_sql(sql);
|
_mdb_sql(sql);
|
||||||
|
mdb_sql_clear_error(sql);
|
||||||
if (yyparse()) {
|
if (yyparse()) {
|
||||||
/* end unsafe */
|
/* end unsafe */
|
||||||
GtkWidget* dlg = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (w)),
|
GtkWidget* dlg = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (w)),
|
||||||
@ -429,6 +430,15 @@ gmdb_sql_execute_cb(GtkWidget *w, GladeXML *xml)
|
|||||||
mdb_sql_reset(sql);
|
mdb_sql_reset(sql);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (mdb_sql_has_error(sql)) {
|
||||||
|
GtkWidget* dlg = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (w)),
|
||||||
|
GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE,
|
||||||
|
mdb_sql_last_error(sql));
|
||||||
|
gtk_dialog_run (GTK_DIALOG (dlg));
|
||||||
|
gtk_widget_destroy (dlg);
|
||||||
|
mdb_sql_reset(sql);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
treeview = glade_xml_get_widget(xml, "sql_results");
|
treeview = glade_xml_get_widget(xml, "sql_results");
|
||||||
|
|
||||||
|
@ -34,15 +34,31 @@ void mdb_dump_results(MdbSQL *sql);
|
|||||||
char *g_input_ptr;
|
char *g_input_ptr;
|
||||||
|
|
||||||
void
|
void
|
||||||
mdb_sql_error(char *fmt, ...)
|
mdb_sql_error(MdbSQL* sql, char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
vfprintf (stderr,fmt, ap);
|
vfprintf (stderr, fmt, ap);
|
||||||
|
vsprintf(sql->error_msg, fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
fprintf(stderr,"\n");
|
fprintf(stderr,"\n");
|
||||||
}
|
}
|
||||||
|
void
|
||||||
|
mdb_sql_clear_error(MdbSQL* sql)
|
||||||
|
{
|
||||||
|
sql->error_msg[0]='\0';
|
||||||
|
}
|
||||||
|
char *
|
||||||
|
mdb_sql_last_error(MdbSQL* sql)
|
||||||
|
{
|
||||||
|
return sql->error_msg;
|
||||||
|
}
|
||||||
|
unsigned char
|
||||||
|
mdb_sql_has_error(MdbSQL* sql)
|
||||||
|
{
|
||||||
|
return (sql->error_msg[0] ? 1 : 0);
|
||||||
|
}
|
||||||
int mdb_sql_yyinput(char *buf, int need)
|
int mdb_sql_yyinput(char *buf, int need)
|
||||||
{
|
{
|
||||||
int cplen, have;
|
int cplen, have;
|
||||||
@ -97,9 +113,10 @@ mdb_sql_run_query (MdbSQL* sql, const gchar* querystr) {
|
|||||||
|
|
||||||
/* begin unsafe */
|
/* begin unsafe */
|
||||||
_mdb_sql (sql);
|
_mdb_sql (sql);
|
||||||
|
mdb_sql_clear_error(sql);
|
||||||
if (yyparse()) {
|
if (yyparse()) {
|
||||||
/* end unsafe */
|
/* end unsafe */
|
||||||
mdb_sql_error (_("Could not parse '%s' command"), querystr);
|
mdb_sql_error (sql, _("Could not parse '%s' command"), querystr);
|
||||||
mdb_sql_reset (sql);
|
mdb_sql_reset (sql);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -107,7 +124,7 @@ mdb_sql_run_query (MdbSQL* sql, const gchar* querystr) {
|
|||||||
if (sql->cur_table == NULL) {
|
if (sql->cur_table == NULL) {
|
||||||
/* Invalid column name? (should get caught by mdb_sql_select,
|
/* Invalid column name? (should get caught by mdb_sql_select,
|
||||||
* but it appeared to happen anyway with 0.5) */
|
* but it appeared to happen anyway with 0.5) */
|
||||||
mdb_sql_error (_("Got no result for '%s' command"), querystr);
|
mdb_sql_error (sql, _("Got no result for '%s' command"), querystr);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -151,7 +168,7 @@ mdb_sql_close(MdbSQL *sql)
|
|||||||
mdb_close(sql->mdb);
|
mdb_close(sql->mdb);
|
||||||
sql->mdb = NULL;
|
sql->mdb = NULL;
|
||||||
} else {
|
} else {
|
||||||
mdb_sql_error("Not connected.");
|
mdb_sql_error(sql, "Not connected.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,7 +193,7 @@ MdbHandle *mdb_sql_open(MdbSQL *sql, char *db_name)
|
|||||||
g_free(tmpstr);
|
g_free(tmpstr);
|
||||||
}
|
}
|
||||||
if (!sql->mdb) {
|
if (!sql->mdb) {
|
||||||
mdb_sql_error("Unable to locate database %s", db_name);
|
mdb_sql_error(sql, "Unable to locate database %s", db_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_WORDEXP
|
#ifdef HAVE_WORDEXP
|
||||||
@ -235,7 +252,7 @@ mdb_sql_add_not(MdbSQL *sql)
|
|||||||
|
|
||||||
left = mdb_sql_pop_node(sql);
|
left = mdb_sql_pop_node(sql);
|
||||||
if (!left) {
|
if (!left) {
|
||||||
mdb_sql_error("parse error near 'NOT'");
|
mdb_sql_error(sql, "parse error near 'NOT'");
|
||||||
mdb_sql_reset(sql);
|
mdb_sql_reset(sql);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -252,7 +269,7 @@ mdb_sql_add_or(MdbSQL *sql)
|
|||||||
left = mdb_sql_pop_node(sql);
|
left = mdb_sql_pop_node(sql);
|
||||||
right = mdb_sql_pop_node(sql);
|
right = mdb_sql_pop_node(sql);
|
||||||
if (!left || !right) {
|
if (!left || !right) {
|
||||||
mdb_sql_error("parse error near 'OR'");
|
mdb_sql_error(sql, "parse error near 'OR'");
|
||||||
mdb_sql_reset(sql);
|
mdb_sql_reset(sql);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -270,7 +287,7 @@ mdb_sql_add_and(MdbSQL *sql)
|
|||||||
left = mdb_sql_pop_node(sql);
|
left = mdb_sql_pop_node(sql);
|
||||||
right = mdb_sql_pop_node(sql);
|
right = mdb_sql_pop_node(sql);
|
||||||
if (!left || !right) {
|
if (!left || !right) {
|
||||||
mdb_sql_error("parse error near 'AND'");
|
mdb_sql_error(sql, "parse error near 'AND'");
|
||||||
mdb_sql_reset(sql);
|
mdb_sql_reset(sql);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -352,13 +369,13 @@ mdb_sql_eval_expr(MdbSQL *sql, char *const1, int op, char *const2)
|
|||||||
default: illop = 1;
|
default: illop = 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
mdb_sql_error("Comparison of strings and numbers not allowed.");
|
mdb_sql_error(sql, "Comparison of strings and numbers not allowed.");
|
||||||
/* the column and table names are no good now */
|
/* the column and table names are no good now */
|
||||||
mdb_sql_reset(sql);
|
mdb_sql_reset(sql);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (illop) {
|
if (illop) {
|
||||||
mdb_sql_error("Illegal operator used for comparision of literals.");
|
mdb_sql_error(sql, "Illegal operator used for comparision of literals.");
|
||||||
/* the column and table names are no good now */
|
/* the column and table names are no good now */
|
||||||
mdb_sql_reset(sql);
|
mdb_sql_reset(sql);
|
||||||
return 1;
|
return 1;
|
||||||
@ -525,7 +542,7 @@ void mdb_sql_listtables(MdbSQL *sql)
|
|||||||
int tmpsiz;
|
int tmpsiz;
|
||||||
|
|
||||||
if (!mdb) {
|
if (!mdb) {
|
||||||
mdb_sql_error("You must connect to a database first");
|
mdb_sql_error(sql, "You must connect to a database first");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mdb_read_catalog (mdb, MDB_TABLE);
|
mdb_read_catalog (mdb, MDB_TABLE);
|
||||||
@ -577,7 +594,7 @@ void mdb_sql_describe_table(MdbSQL *sql)
|
|||||||
int tmpsiz;
|
int tmpsiz;
|
||||||
|
|
||||||
if (!mdb) {
|
if (!mdb) {
|
||||||
mdb_sql_error("You must connect to a database first");
|
mdb_sql_error(sql, "You must connect to a database first");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -585,7 +602,7 @@ void mdb_sql_describe_table(MdbSQL *sql)
|
|||||||
|
|
||||||
table = mdb_read_table_by_name(mdb, sql_tab->name, MDB_TABLE);
|
table = mdb_read_table_by_name(mdb, sql_tab->name, MDB_TABLE);
|
||||||
if (!table) {
|
if (!table) {
|
||||||
mdb_sql_error("%s is not a table in this database", sql_tab->name);
|
mdb_sql_error(sql, "%s is not a table in this database", sql_tab->name);
|
||||||
/* the column and table names are no good now */
|
/* the column and table names are no good now */
|
||||||
mdb_sql_reset(sql);
|
mdb_sql_reset(sql);
|
||||||
return;
|
return;
|
||||||
@ -653,7 +670,7 @@ MdbSQLColumn *sqlcol;
|
|||||||
int found = 0;
|
int found = 0;
|
||||||
|
|
||||||
if (!mdb) {
|
if (!mdb) {
|
||||||
mdb_sql_error("You must connect to a database first");
|
mdb_sql_error(sql, "You must connect to a database first");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -661,7 +678,7 @@ int found = 0;
|
|||||||
|
|
||||||
table = mdb_read_table_by_name(mdb, sql_tab->name, MDB_TABLE);
|
table = mdb_read_table_by_name(mdb, sql_tab->name, MDB_TABLE);
|
||||||
if (!table) {
|
if (!table) {
|
||||||
mdb_sql_error("%s is not a table in this database", sql_tab->name);
|
mdb_sql_error(sql, "%s is not a table in this database", sql_tab->name);
|
||||||
/* the column and table names are no good now */
|
/* the column and table names are no good now */
|
||||||
mdb_sql_reset(sql);
|
mdb_sql_reset(sql);
|
||||||
return;
|
return;
|
||||||
@ -689,7 +706,7 @@ int found = 0;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!found) {
|
if (!found) {
|
||||||
mdb_sql_error("Column %s not found",sqlcol->name);
|
mdb_sql_error(sql, "Column %s not found",sqlcol->name);
|
||||||
mdb_sql_reset(sql);
|
mdb_sql_reset(sql);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user