From e5b867efd98b7ec0114515174423846119e1faf1 Mon Sep 17 00:00:00 2001 From: whydoubt Date: Wed, 25 Aug 2004 02:12:58 +0000 Subject: [PATCH] Tidy up a few SQL-related functions --- ChangeLog | 4 ++ include/mdbsql.h | 2 - src/sql/mdbsql.c | 117 +++++++++++++++++++---------------------------- 3 files changed, 50 insertions(+), 73 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1e44619..7db9c14 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Tue Aug 24 21:04:17 CDT 2004 Jeff Smith + * include/mdbsql.h: + * src/sql/mdbsql.c: Tidy up a few SQL-related functions + Sat Aug 21 21:21:56 CDT 2004 Jeff Smith * src/libmdb/file.c: Clean up a bug in the new mdb_get_single/double * src/libmdb/data.c: Clean out some stale code diff --git a/include/mdbsql.h b/include/mdbsql.h index a0626ad..baab481 100644 --- a/include/mdbsql.h +++ b/include/mdbsql.h @@ -49,8 +49,6 @@ extern char *g_input_ptr; extern MdbSQL *_mdb_sql(MdbSQL *sql); extern MdbSQL *mdb_sql_init(); extern MdbSQLSarg *mdb_sql_alloc_sarg(); -extern MdbSQLColumn *mdb_sql_alloc_column(); -extern MdbSQLTable *mdb_sql_alloc_table(); extern MdbHandle *mdb_sql_open(MdbSQL *sql, char *db_name); extern int mdb_sql_add_sarg(MdbSQL *sql, char *col_name, int op, char *constant); extern void mdb_sql_all_columns(MdbSQL *sql); diff --git a/src/sql/mdbsql.c b/src/sql/mdbsql.c index dfa2b8c..7ae552e 100644 --- a/src/sql/mdbsql.c +++ b/src/sql/mdbsql.c @@ -97,24 +97,19 @@ void mdb_sql_set_maxrow(MdbSQL *sql, int maxrow) { sql->max_rows = maxrow; } -void mdb_sql_free_column(MdbSQLColumn *c) + +static void mdb_sql_free_column(gpointer d, gpointer u) { + MdbSQLColumn *c = (MdbSQLColumn *)d; g_free(c->name); g_free(c); } -MdbSQLColumn *mdb_sql_alloc_column() -{ - return (MdbSQLColumn *) g_malloc0(sizeof(MdbSQLColumn)); -} -void mdb_sql_free_table(MdbSQLTable *t) +static void mdb_sql_free_table(gpointer d, gpointer u) { + MdbSQLTable *t = (MdbSQLTable *)d; g_free(t->name); g_free(t); } -MdbSQLTable *mdb_sql_alloc_table() -{ - return (MdbSQLTable *) g_malloc0(sizeof(MdbSQLTable)); -} void mdb_sql_close(MdbSQL *sql) @@ -142,18 +137,13 @@ wordexp_t words; #endif - if (!(sql->mdb = mdb_open(db_namep, MDB_NOFLAGS))) { - if (!strstr(db_namep, ".mdb")) { - char *tmpstr = (char *) g_strconcat(db_namep, ".mdb", NULL); - if (!(sql->mdb = mdb_open(tmpstr, MDB_NOFLAGS))) { - fail++; - } - g_free(tmpstr); - } else { - fail++; - } + sql->mdb = mdb_open(db_namep, MDB_NOFLAGS); + if ((!sql->mdb) && (!strstr(db_namep, ".mdb"))) { + char *tmpstr = (char *) g_strconcat(db_namep, ".mdb", NULL); + sql->mdb = mdb_open(tmpstr, MDB_NOFLAGS); + g_free(tmpstr); } - if (fail) { + if (!sql->mdb) { mdb_sql_error("Unable to locate database %s", db_name); } @@ -386,9 +376,9 @@ mdb_sql_all_columns(MdbSQL *sql) } int mdb_sql_add_column(MdbSQL *sql, char *column_name) { -MdbSQLColumn *c; + MdbSQLColumn *c; - c = mdb_sql_alloc_column(); + c = (MdbSQLColumn *) g_malloc0(sizeof(MdbSQLColumn)); c->name = g_strdup(column_name); g_ptr_array_add(sql->columns, c); sql->num_columns++; @@ -396,9 +386,9 @@ MdbSQLColumn *c; } int mdb_sql_add_table(MdbSQL *sql, char *table_name) { -MdbSQLTable *t; + MdbSQLTable *t; - t = mdb_sql_alloc_table(); + t = (MdbSQLTable *) g_malloc0(sizeof(MdbSQLTable)); t->name = g_strdup(table_name); t->alias = NULL; g_ptr_array_add(sql->tables, t); @@ -422,67 +412,56 @@ void mdb_sql_dump(MdbSQL *sql) } void mdb_sql_exit(MdbSQL *sql) { - unsigned int i; - MdbSQLColumn *c; - MdbSQLTable *t; + g_ptr_array_foreach(sql->columns, mdb_sql_free_column, NULL); + g_ptr_array_free(sql->columns, TRUE); + g_ptr_array_foreach(sql->tables, mdb_sql_free_table, NULL); + g_ptr_array_free(sql->tables, TRUE); - for (i=0;inum_columns;i++) { - c = g_ptr_array_index(sql->columns,i); - if (c->name) g_free(c->name); - } - for (i=0;inum_tables;i++) { - t = g_ptr_array_index(sql->tables,i); - if (t->name) g_free(t->name); - } if (sql->sarg_tree) { mdb_sql_free_tree(sql->sarg_tree); sql->sarg_tree = NULL; } g_list_free(sql->sarg_stack); sql->sarg_stack = NULL; - g_ptr_array_free(sql->columns,TRUE); - g_ptr_array_free(sql->tables,TRUE); + if (sql->mdb) { mdb_close(sql->mdb); } } void mdb_sql_reset(MdbSQL *sql) { - unsigned int i; - MdbSQLColumn *c; - MdbSQLTable *t; - if (sql->cur_table) { mdb_index_scan_free(sql->cur_table); mdb_free_tabledef(sql->cur_table); sql->cur_table = NULL; } + if (sql->kludge_ttable_pg) { g_free(sql->kludge_ttable_pg); sql->kludge_ttable_pg = NULL; } - for (i=0;inum_columns;i++) { - c = g_ptr_array_index(sql->columns,i); - mdb_sql_free_column(c); - } - for (i=0;inum_tables;i++) { - t = g_ptr_array_index(sql->tables,i); - mdb_sql_free_table(t); - } + + /* Reset columns */ + g_ptr_array_foreach(sql->columns, mdb_sql_free_column, NULL); + g_ptr_array_free(sql->columns, TRUE); + sql->num_columns = 0; + sql->columns = g_ptr_array_new(); + + /* Reset tables */ + g_ptr_array_foreach(sql->tables, mdb_sql_free_table, NULL); + g_ptr_array_free(sql->tables, TRUE); + sql->num_tables = 0; + sql->tables = g_ptr_array_new(); + + /* Reset sargs */ if (sql->sarg_tree) { mdb_sql_free_tree(sql->sarg_tree); sql->sarg_tree = NULL; } g_list_free(sql->sarg_stack); sql->sarg_stack = NULL; - g_ptr_array_free(sql->columns,TRUE); - g_ptr_array_free(sql->tables,TRUE); sql->all_columns = 0; - sql->num_columns = 0; - sql->columns = g_ptr_array_new(); - sql->num_tables = 0; - sql->tables = g_ptr_array_new(); sql->max_rows = -1; } static void print_break(int sz, int first) @@ -540,16 +519,15 @@ void mdb_sql_listtables(MdbSQL *sql) /* 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) { - if (strncmp (entry->object_name, "MSys", 4)) { - //col = g_ptr_array_index(table->columns,0); - tmpsiz = mdb_ascii2unicode(mdb, entry->object_name, 0, 100, tmpstr); - mdb_fill_temp_field(&fields[0],tmpstr, tmpsiz, 0,0,0,0); - row_size = mdb_pack_row(ttable, row_buffer, 1, fields); - mdb_add_row_to_pg(ttable,row_buffer, row_size); - ttable->num_rows++; - } + /* only list user tables */ + if ((entry->object_type == MDB_TABLE) + && (strncmp (entry->object_name, "MSys", 4))) { + //col = g_ptr_array_index(table->columns,0); + tmpsiz = mdb_ascii2unicode(mdb, entry->object_name, 0, 100, tmpstr); + mdb_fill_temp_field(&fields[0],tmpstr, tmpsiz, 0,0,0,0); + row_size = mdb_pack_row(ttable, row_buffer, 1, fields); + mdb_add_row_to_pg(ttable,row_buffer, row_size); + ttable->num_rows++; } } sql->kludge_ttable_pg = g_memdup(mdb->pg_buf, mdb->fmt->pg_size); @@ -687,11 +665,8 @@ int found = 0; if (sql->all_columns) { for (i=0;inum_cols;i++) { - col=g_ptr_array_index(table->columns,i); - sqlcol = mdb_sql_alloc_column(); - sqlcol->name = g_strdup(col->name); - g_ptr_array_add(sql->columns, sqlcol); - sql->num_columns++; + col = g_ptr_array_index(table->columns,i); + mdb_sql_add_column(sql, col->name); } } /* verify all specified columns exist in this table */