Add function mdb_read_table_by_name

This commit is contained in:
whydoubt 2004-07-02 12:29:09 +00:00
parent 30e79efcce
commit 3d47cc5570
14 changed files with 159 additions and 245 deletions

View File

@ -1,3 +1,18 @@
Fri Jul 2 07:27:32 CDT 2004 Jeff Smith <whydoubt@yahoo.com>
* src/libmdb/backend.c:
* src/libmdb/table.c:
* src/sql/mdbsql.c:
* src/util/mdb-array.c:
* src/util/mdb-export.c:
* src/util/mdb-import.c:
* src/util/mdb-prop.c:
* src/util/prdata.c:
* src/util/prindex.c:
* src/util/prole.c:
* src/util/sargtest.c:
* src/util/updrow.c:
* include/mdbtools.h: Add function mdb_read_table_by_name
Wed Jun 23 23:19:43 CDT 2004 Jeff Smith <whydoubt@yahoo.com>
* src/libmdb/table.c:
* src/util/mdb-array.c:

View File

@ -416,6 +416,7 @@ extern char *mdb_get_objtype_string(int obj_type);
extern MdbTableDef *mdb_alloc_tabledef(MdbCatalogEntry *entry);
extern void mdb_free_tabledef(MdbTableDef *table);
extern MdbTableDef *mdb_read_table(MdbCatalogEntry *entry);
extern MdbTableDef *mdb_read_table_by_name(MdbHandle *mdb, gchar *table_name, int obj_type);
extern void mdb_append_column(GPtrArray *columns, MdbColumn *in_col);
extern void mdb_free_columns(GPtrArray *columns);
extern GPtrArray *mdb_read_columns(MdbTableDef *table);

View File

@ -258,22 +258,7 @@ char *mdb_get_relationships(MdbHandle *mdb)
}
if (is_init == 0) {
MdbCatalogEntry *entry;
mdb_read_catalog (mdb, MDB_TABLE);
/* loop over each entry in the catalog */
for (i=0; i < mdb->num_catalog; i++) {
entry = g_ptr_array_index (mdb->catalog, i);
if ((entry->object_type == MDB_TABLE) &&
(strncmp (entry->object_name, "MSysRelationships", 17) == 0))
break;
}
if (i == mdb->num_catalog) {
return NULL;
}
table = mdb_read_table (entry);
table = mdb_read_table_by_name(mdb, "MSysRelationships", MDB_TABLE);
if ((!table) || (table->num_rows == 0)) {
return NULL;
}

View File

@ -117,6 +117,21 @@ MdbTableDef *mdb_read_table(MdbCatalogEntry *entry)
return table;
}
MdbTableDef *mdb_read_table_by_name(MdbHandle *mdb, gchar *table_name, int obj_type)
{
unsigned int i;
MdbCatalogEntry *entry;
mdb_read_catalog(mdb, obj_type);
for (i=0; i<mdb->num_catalog; i++) {
entry = g_ptr_array_index(mdb->catalog, i);
if (!strcasecmp(entry->object_name, table_name))
return mdb_read_table(entry);
}
return NULL;
}
/*
** read the next page if offset is > pg_size

View File

@ -574,7 +574,6 @@ void mdb_sql_describe_table(MdbSQL *sql)
{
MdbTableDef *ttable, *table = NULL;
MdbSQLTable *sql_tab;
MdbCatalogEntry *entry;
MdbHandle *mdb = sql->mdb;
MdbColumn *col;
int i;
@ -593,16 +592,7 @@ void mdb_sql_describe_table(MdbSQL *sql)
sql_tab = g_ptr_array_index(sql->tables,0);
mdb_read_catalog(mdb, MDB_TABLE);
for (i=0;i<mdb->num_catalog;i++) {
entry = g_ptr_array_index(mdb->catalog,i);
if (entry->object_type == MDB_TABLE &&
!strcasecmp(entry->object_name,sql_tab->name)) {
table = mdb_read_table(entry);
break;
}
}
table = mdb_read_table_by_name(mdb, sql_tab->name, MDB_TABLE);
if (!table) {
mdb_sql_error("%s is not a table in this database", sql_tab->name);
/* the column and table names are no good now */
@ -670,7 +660,6 @@ void
mdb_sql_select(MdbSQL *sql)
{
int i,j;
MdbCatalogEntry *entry;
MdbHandle *mdb = sql->mdb;
MdbTableDef *table = NULL;
MdbSQLTable *sql_tab;
@ -685,16 +674,7 @@ int found = 0;
sql_tab = g_ptr_array_index(sql->tables,0);
mdb_read_catalog(mdb, MDB_TABLE);
for (i=0;i<mdb->num_catalog;i++) {
entry = g_ptr_array_index(mdb->catalog,i);
if (entry->object_type == MDB_TABLE &&
!strcasecmp(entry->object_name,sql_tab->name)) {
table = mdb_read_table(entry);
break;
}
}
table = mdb_read_table_by_name(mdb, sql_tab->name, MDB_TABLE);
if (!table) {
mdb_sql_error("%s is not a table in this database", sql_tab->name);
/* the column and table names are no good now */

View File

@ -30,9 +30,8 @@
int
main (int argc, char **argv)
{
int i, j;
int j;
MdbHandle *mdb;
MdbCatalogEntry *entry;
MdbTableDef *table;
MdbColumn *col;
/* doesn't handle tables > 256 columns. Can that happen? */
@ -51,15 +50,9 @@ int started;
mdb_init();
mdb = mdb_open (argv [1], MDB_NOFLAGS);
mdb_read_catalog (mdb, MDB_TABLE);
for (i = 0; i < mdb->num_catalog; i++)
{
entry = g_ptr_array_index (mdb->catalog, i);
if (entry->object_type == MDB_TABLE &&
!strcmp (entry->object_name, argv [2]))
table = mdb_read_table_by_name (mdb, argv[2], MDB_TABLE);
if (table)
{
table = mdb_read_table (entry);
mdb_read_columns (table);
mdb_rewind_table (table);
@ -123,7 +116,6 @@ int started;
mdb_free_tabledef(table);
}
}
mdb_close (mdb);
mdb_exit();

View File

@ -49,9 +49,8 @@ print_col(gchar *col_val, int quote_text, int col_type)
int
main(int argc, char **argv)
{
int i, j;
int j;
MdbHandle *mdb;
MdbCatalogEntry *entry;
MdbTableDef *table;
MdbColumn *col;
/* doesn't handle tables > 256 columns. Can that happen? */
@ -120,87 +119,75 @@ main(int argc, char **argv)
mdb_init();
if (!(mdb = mdb_open(argv[optind], MDB_NOFLAGS))) {
g_free (delimiter);
g_free (row_delimiter);
mdb_exit();
exit(1);
}
table = mdb_read_table_by_name(mdb, argv[argc-1], MDB_TABLE);
if (!table) {
g_free (delimiter);
g_free (row_delimiter);
mdb_close(mdb);
mdb_exit();
exit(0);
}
mdb_read_columns(table);
mdb_rewind_table(table);
if (!mdb_read_catalog (mdb, MDB_TABLE)) {
fprintf(stderr,"File does not appear to be an Access database\n");
exit(1);
for (j=0;j<table->num_cols;j++) {
bound_values[j] = (char *) g_malloc0(MDB_BIND_SIZE);
mdb_bind_column(table, j+1, bound_values[j]);
mdb_bind_len(table, j+1, &bound_lens[j]);
}
for (i=0;i<mdb->num_catalog;i++) {
entry = g_ptr_array_index(mdb->catalog,i);
if (entry->object_type == MDB_TABLE &&
!strcmp(entry->object_name,argv[argc-1])) {
table = mdb_read_table(entry);
mdb_read_columns(table);
mdb_rewind_table(table);
for (j=0;j<table->num_cols;j++) {
bound_values[j] = (char *) g_malloc(MDB_BIND_SIZE);
bound_values[j][0] = '\0';
mdb_bind_column(table, j+1, bound_values[j]);
mdb_bind_len(table, j+1, &bound_lens[j]);
}
if (header_row) {
col=g_ptr_array_index(table->columns,0);
fprintf(stdout,"%s",col->name);
for (j=1;j<table->num_cols;j++) {
col=g_ptr_array_index(table->columns,j);
fprintf(stdout,"%s%s",delimiter,col->name);
}
fprintf(stdout,"\n");
}
while(mdb_fetch_row(table)) {
if (insert_statements) {
fprintf(stdout, "INSERT INTO %s (",
sanitize_name(argv[optind + 1],sanitize));
for (j=0;j<table->num_cols;j++) {
if (j>0) fprintf(stdout, ", ");
col=g_ptr_array_index(table->columns,j);
fprintf(stdout,"%s", sanitize_name(col->name,sanitize));
}
fprintf(stdout, ") VALUES (");
}
col=g_ptr_array_index(table->columns,0);
if (col->col_type == MDB_OLE) {
mdb_ole_read(mdb, col, bound_values[0], MDB_BIND_SIZE);
}
if (insert_statements && !bound_lens[0])
print_col("NULL",0,col->col_type);
else
print_col(bound_values[0],
quote_text,
col->col_type);
for (j=1;j<table->num_cols;j++) {
col=g_ptr_array_index(table->columns,j);
if (col->col_type == MDB_OLE) {
if (col->cur_value_len)
mdb_ole_read(mdb, col, bound_values[j], MDB_BIND_SIZE);
}
fprintf(stdout,"%s",delimiter);
if (insert_statements && !bound_lens[j])
print_col("NULL",0,col->col_type);
else
print_col(bound_values[j],
quote_text,
col->col_type);
}
if (insert_statements) fprintf(stdout,")");
fprintf(stdout,"%s", row_delimiter);
}
for (j=0;j<table->num_cols;j++) {
g_free(bound_values[j]);
}
mdb_free_tabledef(table);
if (header_row) {
col=g_ptr_array_index(table->columns,0);
fprintf(stdout,"%s",col->name);
for (j=1;j<table->num_cols;j++) {
col=g_ptr_array_index(table->columns,j);
fprintf(stdout,"%s%s",delimiter,col->name);
}
fprintf(stdout,"\n");
}
while(mdb_fetch_row(table)) {
if (insert_statements) {
fprintf(stdout, "INSERT INTO %s (",
sanitize_name(argv[optind + 1],sanitize));
for (j=0;j<table->num_cols;j++) {
if (j>0) fprintf(stdout, ", ");
col=g_ptr_array_index(table->columns,j);
fprintf(stdout,"%s", sanitize_name(col->name,sanitize));
}
fprintf(stdout, ") VALUES (");
}
for (j=0;j<table->num_cols;j++) {
col=g_ptr_array_index(table->columns,j);
if ((col->col_type == MDB_OLE)
&& ((j==0) || (col->cur_value_len))) {
mdb_ole_read(mdb, col, bound_values[j], MDB_BIND_SIZE);
}
if (j>0) {
fprintf(stdout,"%s",delimiter);
}
if (insert_statements && !bound_lens[j]) {
print_col("NULL",0,col->col_type);
} else {
print_col(bound_values[j], quote_text, col->col_type);
}
}
if (insert_statements) fprintf(stdout,")");
fprintf(stdout,"%s", row_delimiter);
}
for (j=0;j<table->num_cols;j++) {
g_free(bound_values[j]);
}
mdb_free_tabledef(table);
g_free (delimiter);
g_free (row_delimiter);
mdb_close(mdb);

View File

@ -150,7 +150,6 @@ main(int argc, char **argv)
{
int i, row;
MdbHandle *mdb;
MdbCatalogEntry *entry;
MdbTableDef *table;
MdbField fields[256];
unsigned char line[MAX_ROW_SIZE];
@ -196,23 +195,15 @@ main(int argc, char **argv)
exit(1);
}
mdb_read_catalog(mdb, MDB_TABLE);
for (i=0;i<mdb->num_catalog;i++) {
entry = g_ptr_array_index(mdb->catalog,i);
if (entry->object_type == MDB_TABLE &&
!strcmp(entry->object_name,argv[argc-2])) {
table = mdb_read_table(entry);
mdb_read_columns(table);
mdb_read_indices(table);
mdb_rewind_table(table);
break;
}
}
table = mdb_read_table_by_name(mdb, argv[argc-2], MDB_TABLE);
if (!table) {
fprintf(stderr,"Table %s not found in database\n", argv[argc-2]);
exit(1);
}
mdb_read_columns(table);
mdb_read_indices(table);
mdb_rewind_table(table);
/*
* open the CSV file and read any header rows
*/

View File

@ -33,10 +33,9 @@ MdbHandle *mdb;
int
main(int argc, char **argv)
{
int i, len, pos, col_num;
int len, pos, col_num;
MdbColumn *col;
MdbTableDef *table;
MdbCatalogEntry *entry;
gchar name[256];
gchar buf[MDB_BIND_SIZE];
gchar kkd_pg[200000];
@ -57,15 +56,7 @@ main(int argc, char **argv)
if (!(mdb = mdb_open(argv[optind], MDB_NOFLAGS))) {
exit(1);
}
mdb_read_catalog(mdb, MDB_ANY);
for (i=0;i<mdb->num_catalog;i++) {
entry = g_ptr_array_index(mdb->catalog,i);
if (!strcmp(entry->object_name,MSYSOBJECTS)) {
break;
}
}
table = mdb_read_table(entry);
table = mdb_read_table_by_name(mdb, MSYSOBJECTS, MDB_ANY);
mdb_read_columns(table);
mdb_rewind_table(table);

View File

@ -23,10 +23,8 @@
int
main(int argc, char **argv)
{
int i;
MdbHandle *mdb;
MdbCatalogEntry *entry;
MdbTableDef *table;
MdbHandle *mdb;
MdbTableDef *table;
if (argc<2) {
fprintf(stderr,"Usage: %s <file> <table>\n",argv[0]);
@ -36,17 +34,11 @@ MdbTableDef *table;
mdb_init();
mdb = mdb_open(argv[1], MDB_NOFLAGS);
mdb_read_catalog(mdb, MDB_TABLE);
for (i=0;i<mdb->num_catalog;i++) {
entry = g_ptr_array_index(mdb->catalog,i);
if (entry->object_type == MDB_TABLE &&
!strcmp(entry->object_name,argv[2])) {
table = mdb_read_table(entry);
mdb_read_columns(table);
mdb_data_dump(table);
mdb_free_tabledef(table);
}
table = mdb_read_table_by_name(mdb, argv[2], MDB_TABLE);
if (table) {
mdb_read_columns(table);
mdb_data_dump(table);
mdb_free_tabledef(table);
}
mdb_close(mdb);

View File

@ -26,13 +26,10 @@ void walk_index(MdbHandle *mdb, MdbIndex *idx);
int
main(int argc, char **argv)
{
int i, j;
MdbHandle *mdb;
MdbCatalogEntry *entry;
MdbTableDef *table;
MdbIndex *idx;
int found = 0;
int j;
MdbHandle *mdb;
MdbTableDef *table;
MdbIndex *idx;
if (argc<4) {
fprintf(stderr,"Usage: %s <file> <table> <index>\n",argv[0]);
@ -45,31 +42,22 @@ int found = 0;
exit(1);
}
mdb_read_catalog(mdb, MDB_TABLE);
table = mdb_read_table_by_name(mdb, argv[2], MDB_TABLE);
for (i=0;i<mdb->num_catalog;i++) {
entry = g_ptr_array_index(mdb->catalog,i);
if (entry->object_type == MDB_TABLE &&
!strcmp(entry->object_name,argv[2])) {
table = mdb_read_table(entry);
mdb_read_columns(table);
mdb_read_indices(table);
for (j=0;j<table->num_idxs;j++) {
idx = g_ptr_array_index (table->indices, j);
if (!strcmp(idx->name, argv[3])) {
walk_index(mdb, idx);
}
}
mdb_free_tabledef(table);
//mdb_table_dump(entry);
found++;
if (table) {
mdb_read_columns(table);
mdb_read_indices(table);
for (j=0;j<table->num_idxs;j++) {
idx = g_ptr_array_index (table->indices, j);
if (!strcmp(idx->name, argv[3])) {
walk_index(mdb, idx);
}
}
}
if (!found) {
mdb_free_tabledef(table);
} else {
fprintf(stderr,"No table named %s found.\n", argv[2]);
}
mdb_close(mdb);
mdb_exit();

View File

@ -25,12 +25,10 @@ void dump_ole(MdbTableDef *table, char *colname, char *sargname);
int
main(int argc, char **argv)
{
int i;
MdbHandle *mdb;
MdbCatalogEntry *entry;
MdbTableDef *table;
char *dot, *colname, *tabname;
char *sargname = NULL;
MdbHandle *mdb;
MdbTableDef *table;
char *dot, *colname, *tabname;
char *sargname = NULL;
if (argc<2) {
@ -51,17 +49,12 @@ char *sargname = NULL;
*dot='\0';
colname = ++dot;
mdb_read_catalog(mdb, MDB_TABLE);
table = mdb_read_table_by_name(mdb, tabname, MDB_TABLE);
for (i=0;i<mdb->num_catalog;i++) {
entry = g_ptr_array_index(mdb->catalog,i);
if (entry->object_type == MDB_TABLE &&
!strcmp(entry->object_name,tabname)) {
table = mdb_read_table(entry);
mdb_read_columns(table);
dump_ole(table, colname, sargname);
mdb_free_tabledef(table);
}
if (table) {
mdb_read_columns(table);
dump_ole(table, colname, sargname);
mdb_free_tabledef(table);
}
mdb_close(mdb);

View File

@ -28,12 +28,8 @@ void print_table(MdbTableDef *table);
main(int argc, char **argv)
{
int rows;
int i;
unsigned char buf[2048];
MdbHandle *mdb;
MdbCatalogEntry *entry;
MdbTableDef *table;
MdbHandle *mdb;
MdbTableDef *table;
mdb_init();
@ -41,16 +37,11 @@ MdbTableDef *table;
exit(1);
}
mdb_read_catalog(mdb, MDB_TABLE);
table = mdb_read_table_by_name(mdb, TABLE_NAME, MDB_TABLE);
for (i=0;i<mdb->num_catalog;i++) {
entry = g_ptr_array_index(mdb->catalog,i);
if (entry->object_type == MDB_TABLE &&
!strcmp(entry->object_name,TABLE_NAME)) {
table = mdb_read_table(entry);
print_table(table);
mdb_free_tabledef(table);
}
if (table) {
print_table(table);
mdb_free_tabledef(table);
}
mdb_close(mdb);

View File

@ -26,9 +26,7 @@ void read_to_row(MdbTableDef *table, char *sargname);
int
main(int argc, char **argv)
{
int i;
MdbHandle *mdb;
MdbCatalogEntry *entry;
MdbTableDef *table;
char *colname, *tabname;
char *colval;
@ -49,26 +47,21 @@ int len;
sargname = argv[3];
updstr = strdup(argv[4]);
mdb_read_catalog(mdb, MDB_TABLE);
table = mdb_read_table_by_name(mdb, tabname, MDB_TABLE);
for (i=0;i<mdb->num_catalog;i++) {
entry = g_ptr_array_index(mdb->catalog,i);
if (entry->object_type == MDB_TABLE &&
!strcmp(entry->object_name,tabname)) {
table = mdb_read_table(entry);
mdb_read_columns(table);
mdb_read_indices(table);
printf("updstr %s\n",updstr);
colname = strtok(updstr,"=");
colval = strtok(NULL,"=");
bind_column(table, colname, data, &len);
read_to_row(table, sargname);
printf("current value of %s is %s, changing to %s\n", colname, data, colval);
len = strlen(colval);
strcpy(data,colval);
mdb_update_row(table);
mdb_free_tabledef(table);
}
if (table) {
mdb_read_columns(table);
mdb_read_indices(table);
printf("updstr %s\n",updstr);
colname = strtok(updstr,"=");
colval = strtok(NULL,"=");
bind_column(table, colname, data, &len);
read_to_row(table, sargname);
printf("current value of %s is %s, changing to %s\n", colname, data, colval);
len = strlen(colval);
strcpy(data,colval);
mdb_update_row(table);
mdb_free_tabledef(table);
}
mdb_close(mdb);