diff --git a/ChangeLog b/ChangeLog index 606905d..2603ece 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,31 @@ +Tue Apr 13 15:25:26 EDT 2004 Brian Bruns + * include/mdbtools.h: + * src/sql/mdbsql.c: + * src/util/mdb-array.c: + * src/util/mdb-check.c: + * src/util/mdb-export.c: + * src/util/mdb-header.c: + * src/util/mdb-import.c: + * src/util/mdb-prop.c: + * src/util/mdb-schema.c: + * src/util/mdb-tables.c: + * src/util/mdb-ver.c: + * src/util/prcat.c: + * src/util/prdata.c: + * src/util/prdump.c: + * src/util/prfreemap.c: + * src/util/prindex.c: + * src/util/prkkd.c: + * src/util/prole.c: + * src/util/prtable.c: + * src/util/sargtest.c: + * src/util/updrow.c: + * src/gmdb/file.c: + * src/gmdb2/file.c: + * src/libmdb/file.c: Add flags argument to mdb_open to support read/write + files + * doc/reference/libmdb/libmdb-sections.txt: Organize reference manual a little better + Mon Apr 12 21:58:00 CDT 2004 Jeff Smith * src/odbc/connectparams.c: ODBC driver dialog enhancements * src/sql/mdbsql.c: Correct some array sizes diff --git a/doc/reference/libmdb/libmdb-sections.txt b/doc/reference/libmdb/libmdb-sections.txt index 42048cd..beb35d3 100644 --- a/doc/reference/libmdb/libmdb-sections.txt +++ b/doc/reference/libmdb/libmdb-sections.txt @@ -25,24 +25,101 @@ MdbProperties MdbColumn mdbsargtree MdbIndexPage -gpointer) MDB_MAX_INDEX_DEPTH MdbIndexChain MdbTableDef MdbColumnProp MdbField MdbSarg + mdb_init +mdb_open +mdb_close +mdb_clone_handle mdb_exit -mdb_alloc_handle -mdb_free_handle + +mdb_read_catalog +mdb_dump_catalog mdb_free_catalog -mdb_alloc_tabledef -mdb_alloc_catalog -mdb_alloc_file -mdb_free_file + +mdb_read_table +mdb_rewind_table +mdb_table_dump +mdb_free_tabledef + +mdb_read_columns mdb_append_index +mdb_get_objtype_string +mdb_bind_column_by_name +mdb_data_dump +mdb_bind_column +mdb_fetch_row +mdb_is_fixed_col +mdb_col_to_string +mdb_find_end_of_row +mdb_col_fixed_size +mdb_col_disp_size +mdb_bind_len +mdb_ole_read_next +mdb_ole_read +mdb_set_date_fmt +mdb_read_row +mdb_get_coltype_string +mdb_coltype_takes_length +mdb_init_backends +mdb_register_backend +mdb_remove_backends +mdb_set_default_backend +mdb_get_relationships +mdb_sql_walk_tree +mdb_find_indexable_sargs +mdb_add_sarg_by_name + +mdb_read_indices +mdb_index_dump +mdb_index_scan_free +mdb_index_find_next_on_page +mdb_index_find_next +mdb_index_hash_text +mdb_index_scan_init +mdb_index_find_row + +mdb_stats_on +mdb_stats_off +mdb_dump_stats + +mdb_like_cmp +mdb_crack_row +mdb_add_row_to_pg +mdb_update_index +mdb_pack_row +mdb_replace_row +mdb_pg_get_freespace +mdb_update_row +mdb_new_data_pg +mdb_map_find_next_freepage + +mdb_read_props_list +mdb_free_props +mdb_read_props + +mdb_create_temp_table +mdb_temp_table_add_col +mdb_fill_temp_col +mdb_fill_temp_field + +mdb_get_option +mdb_debug + +mdb_unicode2ascii +mdb_ascii2unicode + mdb_alloc_stats +mdb_alloc_handle +mdb_test_string +mdb_test_int +mdb_add_sarg +buffer_dump mdb_read_pg mdb_read_alt_pg mdb_get_byte @@ -58,87 +135,18 @@ mdb_pg_get_int32 mdb_pg_get_single mdb_pg_get_double mdb_pg_get_int24_msb -mdb_open -mdb_close -mdb_clone_handle mdb_swap_pgbuf -mdb_free_tabledef -mdb_read_catalog -mdb_catalog_dump -mdb_catalog_rows -mdb_get_catalog_entry -mdb_get_objtype_string -mdb_dump_catalog -mdb_read_table -mdb_read_columns -mdb_table_dump +mdb_index_swap_n +mdb_test_sargs +mdb_test_sarg read_pg_if_16 read_pg_if_32 read_pg_if read_pg_if_n -mdb_bind_column_by_name -mdb_data_dump -mdb_bind_column -mdb_rewind_table -mdb_fetch_row -mdb_is_fixed_col -mdb_col_to_string -mdb_find_end_of_row -mdb_col_fixed_size -mdb_col_disp_size -mdb_bind_len -mdb_ole_read_next -mdb_ole_read -mdb_set_date_fmt -mdb_read_row -buffer_dump -mdb_get_coltype_string -mdb_coltype_takes_length -mdb_init_backends -mdb_register_backend -mdb_remove_backends -mdb_set_default_backend -mdb_get_relationships -mdb_test_sargs -mdb_test_sarg -mdb_sql_walk_tree -mdb_find_indexable_sargs -mdb_add_sarg_by_name -mdb_test_string -mdb_test_int -mdb_add_sarg -mdb_read_indices -mdb_index_dump -mdb_index_scan_free -mdb_index_find_next_on_page -mdb_index_find_next -mdb_index_hash_text -mdb_index_scan_init -mdb_index_find_row -mdb_index_swap_n -mdb_stats_on -mdb_stats_off -mdb_dump_stats -mdb_like_cmp -mdb_crack_row -mdb_add_row_to_pg -mdb_update_index -mdb_pack_row -mdb_replace_row -mdb_pg_get_freespace -mdb_update_row -mdb_new_data_pg -mdb_map_find_next_freepage -mdb_read_props_list -mdb_free_props -mdb_read_props -mdb_create_temp_table -mdb_temp_table_add_col -mdb_fill_temp_col -mdb_fill_temp_field -mdb_get_option -mdb_debug -mdb_unicode2ascii -mdb_ascii2unicode +mdb_alloc_file +mdb_free_file +mdb_alloc_tabledef +mdb_alloc_catalog +mdb_free_handle diff --git a/include/mdbtools.h b/include/mdbtools.h index 3df52ea..69bba82 100644 --- a/include/mdbtools.h +++ b/include/mdbtools.h @@ -105,6 +105,11 @@ typedef enum { MDB_INDEX_SCAN } MdbStrategy; +typedef enum { + MDB_NOFLAGS = 0x00, + MDB_WRITABLE = 0x01 +} MdbFileFlags; + enum { MDB_DEBUG_LIKE = 0x0001, MDB_DEBUG_WRITE = 0x0002, @@ -292,7 +297,7 @@ typedef struct { unsigned char cache_value[256]; } MdbIndexPage; -typedef int MdbSargTreeFunc(MdbSargNode *, gpointer); +typedef int MdbSargTreeFunc(MdbSargNode *, gpointer *data); #define MDB_MAX_INDEX_DEPTH 10 @@ -396,8 +401,7 @@ extern long mdb_pg_get_int32(MdbHandle *mdb, int offset); extern float mdb_pg_get_single(MdbHandle *mdb, int offset); extern double mdb_pg_get_double(MdbHandle *mdb, int offset); extern gint32 mdb_pg_get_int24_msb(MdbHandle *mdb, int offset); -extern MdbHandle *mdb_open(char *filename); -extern MdbHandle *_mdb_open(char *filename, gboolean writable); +extern MdbHandle *mdb_open(char *filename, MdbFileFlags flags); extern void mdb_close(MdbHandle *mdb); extern MdbHandle *mdb_clone_handle(MdbHandle *mdb); extern void mdb_swap_pgbuf(MdbHandle *mdb); @@ -406,9 +410,7 @@ extern void mdb_free_tabledef(MdbTableDef *table); /* catalog.c */ GPtrArray *mdb_read_catalog(MdbHandle *mdb, int obj_type); -extern void mdb_catalog_dump(MdbHandle *mdb, int obj_type); -extern int mdb_catalog_rows(MdbHandle *mdb); -extern MdbCatalogEntry *mdb_get_catalog_entry(MdbHandle *mdb, int rowid, MdbCatalogEntry *entry); +extern void mdb_dump_catalog(MdbHandle *mdb, int obj_type); extern char *mdb_get_objtype_string(int obj_type); extern void mdb_dump_catalog(MdbHandle *mdb, int obj_type); diff --git a/src/gmdb/file.c b/src/gmdb/file.c index 8b3d017..c4e9cc1 100644 --- a/src/gmdb/file.c +++ b/src/gmdb/file.c @@ -8,7 +8,7 @@ extern int main_show_debug; void gmdb_file_open(gchar *file_path) { - mdb = mdb_open(file_path); + mdb = mdb_open(file_path, MDB_NOFLAGS); if (!mdb) { gmdb_info_msg("Unable to open file."); return; diff --git a/src/gmdb2/file.c b/src/gmdb2/file.c index ac0a3f0..f645c7c 100644 --- a/src/gmdb2/file.c +++ b/src/gmdb2/file.c @@ -107,7 +107,7 @@ gmdb_file_open(gchar *file_path) int i; gmdb_reset_widgets(); - mdb = mdb_open(file_path); + mdb = mdb_open(file_path, MDB_NOFLAGS); if (!mdb) { gnome_warning_dialog("Unable to open file."); return; diff --git a/src/libmdb/file.c b/src/libmdb/file.c index c069798..2c76fe0 100644 --- a/src/libmdb/file.c +++ b/src/libmdb/file.c @@ -93,7 +93,18 @@ int ret; } while ((dir = strtok(NULL, ":"))); return -1; } -MdbHandle *_mdb_open(char *filename, gboolean writable) +/** + * mdb_open: + * @filename: path to MDB (database) file + * @flags: MDB_NOFLAGS for read-only, MDB_WRITABLE for read/write + * + * Opens an MDB file and returns an MdbHandle to it. MDB File may be relative + * to the current directory, a full path to the file, or relative to a + * component of $MDBPATH. + * + * Return value: pointer to MdbHandle structure. + **/ +MdbHandle *mdb_open(char *filename, MdbFileFlags flags) { MdbHandle *mdb; int bufsize; @@ -117,7 +128,7 @@ MdbFile *f; } } //strcpy(f->filename, filename); - if (writable) { + if (flags & MDB_WRITABLE) { f->writable = TRUE; f->fd = open(f->filename,O_RDWR); } else { @@ -149,21 +160,14 @@ MdbFile *f; f->refs++; return mdb; } -/** - * mdb_open: - * @filename: path to MDB (database) file - * - * Opens an MDB file and returns an MdbHandle to it. MDB File may be relative - * to the current directory, a full path to the file, or relative to a - * component of $MDBPATH. - * - * Return value: pointer to MdbHandle structure. - **/ -MdbHandle *mdb_open(char *filename) -{ - return _mdb_open(filename, FALSE); -} +/** + * mdb_close: + * @mdb: Handle to open MDB database file + * + * Dereferences MDB file, closes if reference count is 0, and destroys handle. + * + **/ void mdb_close(MdbHandle *mdb) { @@ -175,6 +179,15 @@ mdb_close(MdbHandle *mdb) } } } +/** + * mdb_clone_handle: + * @mdb: Handle to open MDB database file + * + * Clones an existing database handle. Cloned handle shares the file descriptor + * but has it's own page buffer, page position, and similar internal variables. + * + * Return value: new handle to the database. + */ MdbHandle *mdb_clone_handle(MdbHandle *mdb) { MdbHandle *newmdb; diff --git a/src/sql/mdbsql.c b/src/sql/mdbsql.c index 8248da7..e215ec5 100644 --- a/src/sql/mdbsql.c +++ b/src/sql/mdbsql.c @@ -152,12 +152,12 @@ wordexp_t words; #endif - if (!(sql->mdb = mdb_open(db_namep))) { + if (!(sql->mdb = mdb_open(db_namep, MDB_NOFLAGS))) { if (!strstr(db_namep, ".mdb")) { char *tmpstr = (char *) malloc(strlen(db_namep)+5); strcpy(tmpstr,db_namep); strcat(tmpstr,".mdb"); - if (!(sql->mdb = mdb_open(tmpstr))) { + if (!(sql->mdb = mdb_open(tmpstr, MDB_NOFLAGS))) { fail++; } free(tmpstr); diff --git a/src/util/mdb-array.c b/src/util/mdb-array.c index e896db1..177421c 100644 --- a/src/util/mdb-array.c +++ b/src/util/mdb-array.c @@ -49,7 +49,7 @@ int started; } mdb_init(); - mdb = mdb_open (argv [1]); + mdb = mdb_open (argv [1], MDB_NOFLAGS); mdb_read_catalog (mdb, MDB_TABLE); diff --git a/src/util/mdb-check.c b/src/util/mdb-check.c index 7458277..2062274 100644 --- a/src/util/mdb-check.c +++ b/src/util/mdb-check.c @@ -65,7 +65,7 @@ int opt; /* open the database */ - mdb = mdb_open (argv[optind]); + mdb = mdb_open (argv[optind], MDB_NOFLAGS); /* read the catalog */ diff --git a/src/util/mdb-export.c b/src/util/mdb-export.c index 2d44355..8df3e85 100644 --- a/src/util/mdb-export.c +++ b/src/util/mdb-export.c @@ -115,7 +115,7 @@ main(int argc, char **argv) mdb_init(); - if (!(mdb = mdb_open(argv[optind]))) { + if (!(mdb = mdb_open(argv[optind], MDB_NOFLAGS))) { exit(1); } diff --git a/src/util/mdb-header.c b/src/util/mdb-header.c index 65d000a..0b63da5 100644 --- a/src/util/mdb-header.c +++ b/src/util/mdb-header.c @@ -53,7 +53,7 @@ FILE *cfile; /* open the database */ - mdb = mdb_open (argv[1]); + mdb = mdb_open (argv[1], MDB_NOFLAGS); if (!mdb) { mdb_exit(); exit(1); diff --git a/src/util/mdb-import.c b/src/util/mdb-import.c index c0a69f4..108b34d 100644 --- a/src/util/mdb-import.c +++ b/src/util/mdb-import.c @@ -191,7 +191,7 @@ main(int argc, char **argv) mdb_init(); - if (!(mdb = _mdb_open(argv[optind], TRUE))) { + if (!(mdb = mdb_open(argv[optind], MDB_WRITABLE))) { exit(1); } diff --git a/src/util/mdb-prop.c b/src/util/mdb-prop.c index e32c044..efc4d35 100644 --- a/src/util/mdb-prop.c +++ b/src/util/mdb-prop.c @@ -54,7 +54,7 @@ main(int argc, char **argv) mdb_init(); - if (!(mdb = mdb_open(argv[optind]))) { + if (!(mdb = mdb_open(argv[optind], MDB_NOFLAGS))) { exit(1); } mdb_read_catalog(mdb, MDB_TABLE); diff --git a/src/util/mdb-schema.c b/src/util/mdb-schema.c index 4d434a7..75b241e 100644 --- a/src/util/mdb-schema.c +++ b/src/util/mdb-schema.c @@ -68,7 +68,7 @@ main (int argc, char **argv) /* open the database */ - mdb = mdb_open (argv[optind]); + mdb = mdb_open (argv[optind], MDB_NOFLAGS); if (argc - optind >= 2) { if (!mdb_set_default_backend(mdb, argv[optind + 1])) { fprintf(stderr,"Invalid backend type\n"); diff --git a/src/util/mdb-tables.c b/src/util/mdb-tables.c index 08567d8..045623e 100644 --- a/src/util/mdb-tables.c +++ b/src/util/mdb-tables.c @@ -58,7 +58,7 @@ int opt; mdb_init(); /* open the database */ - if (!(mdb = mdb_open (argv[optind]))) { + if (!(mdb = mdb_open (argv[optind], MDB_NOFLAGS))) { fprintf(stderr,"Couldn't open database.\n"); exit(1); } diff --git a/src/util/mdb-ver.c b/src/util/mdb-ver.c index 91e75f7..8acc514 100644 --- a/src/util/mdb-ver.c +++ b/src/util/mdb-ver.c @@ -62,7 +62,7 @@ main(int argc, char **argv) mdb_init(); - if (!(mdb = mdb_open(argv[optind]))) { + if (!(mdb = mdb_open(argv[optind], MDB_NOFLAGS))) { fprintf(stderr,_("Error: unable to open file %s\n"),argv[optind]); exit(1); } diff --git a/src/util/prcat.c b/src/util/prcat.c index fc7b17c..b8c0489 100644 --- a/src/util/prcat.c +++ b/src/util/prcat.c @@ -31,7 +31,7 @@ main(int argc, char **argv) mdb_init(); - mdb = mdb_open(argv[1]); + mdb = mdb_open(argv[1], MDB_NOFLAGS); mdb_dump_catalog(mdb,(argc > 2) ? atoi(argv[2]) : MDB_TABLE); diff --git a/src/util/prdata.c b/src/util/prdata.c index e924484..1312415 100644 --- a/src/util/prdata.c +++ b/src/util/prdata.c @@ -34,7 +34,7 @@ MdbTableDef *table; } mdb_init(); - mdb = mdb_open(argv[1]); + mdb = mdb_open(argv[1], MDB_NOFLAGS); mdb_read_catalog(mdb, MDB_TABLE); diff --git a/src/util/prdump.c b/src/util/prdump.c index 94768d9..3e24bf9 100644 --- a/src/util/prdump.c +++ b/src/util/prdump.c @@ -33,7 +33,7 @@ int page, start, stop; } mdb_init(); - mdb = mdb_open(argv[1]); + mdb = mdb_open(argv[1], MDB_NOFLAGS); mdb_read_catalog(mdb, MDB_TABLE); diff --git a/src/util/prfreemap.c b/src/util/prfreemap.c index c3f31a3..5f9694a 100644 --- a/src/util/prfreemap.c +++ b/src/util/prfreemap.c @@ -35,7 +35,7 @@ unsigned char *map_buf; } mdb_init(); - mdb = mdb_open(argv[1]); + mdb = mdb_open(argv[1], MDB_NOFLAGS); mdb_read_pg (mdb, 1); row_start = mdb_get_int16(mdb, (mdb->fmt->row_count_offset + 2)); diff --git a/src/util/prindex.c b/src/util/prindex.c index d72f17a..20e3bb4 100644 --- a/src/util/prindex.c +++ b/src/util/prindex.c @@ -40,7 +40,7 @@ int found = 0; } mdb_init(); - if (!(mdb = mdb_open(argv[1]))) { + if (!(mdb = mdb_open(argv[1], MDB_NOFLAGS))) { fprintf(stderr,"Unable to open database.\n"); exit(1); } diff --git a/src/util/prkkd.c b/src/util/prkkd.c index 5b8c4e4..1cd05ff 100644 --- a/src/util/prkkd.c +++ b/src/util/prkkd.c @@ -32,7 +32,7 @@ main(int argc, char **argv) } mdb_init(); - mdb = mdb_open(argv[1]); + mdb = mdb_open(argv[1], MDB_NOFLAGS); mdb_read_pg(mdb, MDB_CATALOG_PG); rows = mdb_catalog_rows(mdb); diff --git a/src/util/prole.c b/src/util/prole.c index 54853c6..d1c1ecc 100644 --- a/src/util/prole.c +++ b/src/util/prole.c @@ -39,7 +39,7 @@ char *sargname = NULL; } mdb_init(); - mdb = mdb_open(argv[1]); + mdb = mdb_open(argv[1], MDB_NOFLAGS); dot = strchr(argv[2],'.'); if (argc>3) sargname = argv[3]; diff --git a/src/util/prtable.c b/src/util/prtable.c index 93d7710..23855ee 100644 --- a/src/util/prtable.c +++ b/src/util/prtable.c @@ -35,7 +35,7 @@ int found = 0; } mdb_init(); - mdb = mdb_open(argv[1]); + mdb = mdb_open(argv[1], MDB_NOFLAGS); mdb_read_catalog(mdb, MDB_TABLE); diff --git a/src/util/sargtest.c b/src/util/sargtest.c index baea7b5..915dd11 100644 --- a/src/util/sargtest.c +++ b/src/util/sargtest.c @@ -37,7 +37,7 @@ MdbTableDef *table; mdb_init(); - if (!(mdb = mdb_open(MDB_FILE))) { + if (!(mdb = mdb_open(MDB_FILE, MDB_NOFLAGS))) { exit(1); } diff --git a/src/util/updrow.c b/src/util/updrow.c index 0ebb6c2..ca428ca 100644 --- a/src/util/updrow.c +++ b/src/util/updrow.c @@ -44,7 +44,7 @@ int len; } mdb_init(); - mdb = _mdb_open(argv[1], TRUE); + mdb = mdb_open(argv[1], MDB_WRITABLE); tabname = argv[2]; sargname = argv[3]; updstr = strdup(argv[4]);