Combine functions that bind a column and its length

This commit is contained in:
whydoubt
2004-12-31 01:26:28 +00:00
parent 34f39973a1
commit d06cb3e47d
22 changed files with 71 additions and 92 deletions

View File

@@ -1,3 +1,26 @@
Thu Dec 30 19:26:01 CST 2004 Jeff Smith <whydoubt@yahoo.com>
* HACKING:
* doc/reference/libmdb/libmdb-sections.txt:
* include/mdbsql.h:
* include/mdbtools.h:
* src/gmdb/table_data.c:
* src/gmdb/table_export.c:
* src/gmdb2/sql.c:
* src/gmdb2/table_data.c:
* src/gmdb2/table_export.c:
* src/libmdb/backend.c:
* src/libmdb/catalog.c:
* src/libmdb/data.c:
* src/libmdb/file.c:
* src/odbc/odbc.c:
* src/sql/mdbsql.c:
* src/util/mdb-array.c:
* src/util/mdb-export.c:
* src/util/mdb-prop.c:
* src/util/prole.c:
* src/util/sargtest.c:
* src/util/updrow.c: Combine functions that bind a column and its length
Thu Dec 30 06:36:25 CST 2004 Jeff Smith <whydoubt@yahoo.com>
* include/mdbtools.h: Fix MdbSargTreeFunc's typedef
* src/sql/lexer.l: Fix flex warning about A-z ambiguity

View File

@@ -300,9 +300,9 @@ next_pg field.
| Iterate for the number of num_cols (18 bytes per column) |
+-------------------------------------------------------------------------+
| ???? | 1 byte | col_type | Column Type (see table below) |
| ???? | 2 bytes | col_pos | Column Position, (counts deleted cols) |
| ???? | 2 bytes | col_num | Column Number (includes deleted columns) |
| ???? | 2 bytes | offset_V | Offset for variable length columns |
| ???? | 4 bytes | ??? | |
| ???? | 2 bytes | col_num | Column Number |
| ???? | 2 bytes | ??? | |
| ???? | 1 byte | precision | precision if numeric column |
| ???? | 1 byte | scale | scale if numeric column |

View File

@@ -58,7 +58,6 @@ 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

View File

@@ -73,7 +73,6 @@ extern int mdb_sql_eval_expr(MdbSQL *sql, char *const1, int op, char *const2);
extern void mdb_sql_bind_all(MdbSQL *sql);
extern int mdb_sql_fetch_row(MdbSQL *sql, MdbTableDef *table);
extern int mdb_sql_add_temp_col(MdbSQL *sql, MdbTableDef *ttable, int col_num, char *name, int col_type, int col_size, int is_fixed);
extern void mdb_sql_bind_column(MdbSQL *sql, int colnum, char *varaddr);
extern void mdb_sql_bind_len(MdbSQL *sql, int colnum, int *len_ptr);
extern void mdb_sql_bind_column(MdbSQL *sql, int colnum, char *varaddr, int *len_ptr);
#endif

View File

@@ -436,9 +436,9 @@ extern int mdb_is_user_table(MdbCatalogEntry *entry);
extern int mdb_is_system_table(MdbCatalogEntry *entry);
/* data.c */
extern int mdb_bind_column_by_name(MdbTableDef *table, gchar *col_name, void *bind_ptr);
extern int mdb_bind_column_by_name(MdbTableDef *table, gchar *col_name, void *bind_ptr, int *len_ptr);
extern void mdb_data_dump(MdbTableDef *table);
extern void mdb_bind_column(MdbTableDef *table, int col_num, void *bind_ptr);
extern void mdb_bind_column(MdbTableDef *table, int col_num, void *bind_ptr, int *len_ptr);
extern int mdb_rewind_table(MdbTableDef *table);
extern int mdb_fetch_row(MdbTableDef *table);
extern int mdb_is_fixed_col(MdbColumn *col);
@@ -447,7 +447,6 @@ extern int mdb_find_pg_row(MdbHandle *mdb, int pg_row, char **buf, int *off, int
extern int mdb_find_end_of_row(MdbHandle *mdb, int row);
extern int mdb_col_fixed_size(MdbColumn *col);
extern int mdb_col_disp_size(MdbColumn *col);
extern void mdb_bind_len(MdbTableDef *table, int col_num, int *len_ptr);
extern int mdb_ole_read_next(MdbHandle *mdb, MdbColumn *col, void *ole_ptr);
extern int mdb_ole_read(MdbHandle *mdb, MdbColumn *col, void *ole_ptr, int chunk_size);
extern void mdb_set_date_fmt(const char *);

View File

@@ -72,7 +72,7 @@ GMdbDataWindow *dataw = NULL;
/* bind columns */
bound_data[i] = (char *) malloc(MDB_BIND_SIZE);
bound_data[i][0] = '\0';
mdb_bind_column(table, i+1, bound_data[i]);
mdb_bind_column(table, i+1, bound_data[i], NULL);
/* display column titles */
col=g_ptr_array_index(table->columns,i);

View File

@@ -107,7 +107,7 @@ char msg[100];
/* bind columns */
bound_data[i] = (char *) malloc(MDB_BIND_SIZE);
bound_data[i][0] = '\0';
mdb_bind_column(table, i+1, bound_data[i]);
mdb_bind_column(table, i+1, bound_data[i], NULL);
/* display column titles */
col=g_ptr_array_index(table->columns,i);

View File

@@ -450,7 +450,7 @@ gmdb_sql_execute_cb(GtkWidget *w, GladeXML *xml)
for (i=0;i<sql->num_columns;i++) {
bound_data[i] = (char *) malloc(MDB_BIND_SIZE);
bound_data[i][0] = '\0';
mdb_sql_bind_column(sql, i+1, bound_data[i]);
mdb_sql_bind_column(sql, i+1, bound_data[i], NULL);
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);

View File

@@ -90,7 +90,7 @@ GMdbDataWindow *dataw = NULL;
/* bind columns */
bound_data[i] = (char *) malloc(MDB_BIND_SIZE);
bound_data[i][0] = '\0';
mdb_bind_column(table, i+1, bound_data[i]);
mdb_bind_column(table, i+1, bound_data[i], NULL);
/* display column titles */
col=g_ptr_array_index(table->columns,i);

View File

@@ -190,7 +190,7 @@ int rows=0;
/* bind columns */
bound_data[i] = (char *) malloc(MDB_BIND_SIZE);
bound_data[i][0] = '\0';
mdb_bind_column(table, i+1, bound_data[i]);
mdb_bind_column(table, i+1, bound_data[i], NULL);
/* display column titles */
col=g_ptr_array_index(table->columns,i);

View File

@@ -265,10 +265,10 @@ char *mdb_get_relationships(MdbHandle *mdb)
for (i=0;i<4;i++) {
bound[i] = (char *) g_malloc0(MDB_BIND_SIZE);
}
mdb_bind_column_by_name(table, "szColumn", bound[0]);
mdb_bind_column_by_name(table, "szObject", bound[1]);
mdb_bind_column_by_name(table, "szReferencedColumn", bound[2]);
mdb_bind_column_by_name(table, "szReferencedObject", bound[3]);
mdb_bind_column_by_name(table, "szColumn", bound[0], NULL);
mdb_bind_column_by_name(table, "szObject", bound[1], NULL);
mdb_bind_column_by_name(table, "szReferencedColumn", bound[2], NULL);
mdb_bind_column_by_name(table, "szReferencedObject", bound[3], NULL);
mdb_rewind_table(table);
is_init = 1;

View File

@@ -86,10 +86,10 @@ GPtrArray *mdb_read_catalog (MdbHandle *mdb, int objtype)
mdb_read_columns(table);
mdb_bind_column_by_name(table, "Id", obj_id);
mdb_bind_column_by_name(table, "Name", obj_name);
mdb_bind_column_by_name(table, "Type", obj_type);
mdb_bind_column_by_name(table, "Flags", obj_flags);
mdb_bind_column_by_name(table, "Id", obj_id, NULL);
mdb_bind_column_by_name(table, "Name", obj_name, NULL);
mdb_bind_column_by_name(table, "Type", obj_type, NULL);
mdb_bind_column_by_name(table, "Flags", obj_flags, NULL);
mdb_rewind_table(table);

View File

@@ -41,7 +41,7 @@ void mdb_set_date_fmt(const char *fmt)
strncpy(date_fmt, fmt, 63);
}
void mdb_bind_column(MdbTableDef *table, int col_num, void *bind_ptr)
void mdb_bind_column(MdbTableDef *table, int col_num, void *bind_ptr, int *len_ptr)
{
MdbColumn *col;
@@ -49,10 +49,14 @@ MdbColumn *col;
** the column arrary is 0 based, so decrement to get 1 based parameter
*/
col=g_ptr_array_index(table->columns, col_num - 1);
if (bind_ptr)
col->bind_ptr = bind_ptr;
if (len_ptr)
col->len_ptr = len_ptr;
}
int
mdb_bind_column_by_name(MdbTableDef *table, gchar *col_name, void *bind_ptr)
mdb_bind_column_by_name(MdbTableDef *table, gchar *col_name, void *bind_ptr, int *len_ptr)
{
unsigned int i;
int col_num = -1;
@@ -61,21 +65,17 @@ mdb_bind_column_by_name(MdbTableDef *table, gchar *col_name, void *bind_ptr)
for (i=0;i<table->num_cols;i++) {
col=g_ptr_array_index(table->columns,i);
if (!strcmp(col->name,col_name)) {
col_num = col->col_num + 1;
mdb_bind_column(table, col_num, bind_ptr);
col_num = i + 1;
if (bind_ptr)
col->bind_ptr = bind_ptr;
if (len_ptr)
col->len_ptr = len_ptr;
break;
}
}
return col_num;
}
void mdb_bind_len(MdbTableDef *table, int col_num, int *len_ptr)
{
MdbColumn *col;
col=g_ptr_array_index(table->columns, col_num - 1);
col->len_ptr = len_ptr;
}
/**
* mdb_find_pg_row
@@ -397,7 +397,7 @@ void mdb_data_dump(MdbTableDef *table)
for (i=0;i<table->num_cols;i++) {
bound_values[i] = (char *) g_malloc(256);
mdb_bind_column(table, i+1, bound_values[i]);
mdb_bind_column(table, i+1, bound_values[i], NULL);
}
mdb_rewind_table(table);
while (mdb_fetch_row(table)) {

View File

@@ -49,7 +49,7 @@ MdbFormatConstants MdbJet4Constants = {
4096, 0x0c, 16, 45, 47, 51, 55, 56, 63, 12, 15, 23, 5, 25, 59, 7, 21, 9
};
MdbFormatConstants MdbJet3Constants = {
2048, 0x08, 12, 25, 27, 31, 35, 36, 43, 8, 13, 16, 1, 18, 39, 3, 14, 5 /* not sure on 5, need to check */
2048, 0x08, 12, 25, 27, 31, 35, 36, 43, 8, 13, 16, 1, 18, 39, 3, 14, 5
};
static ssize_t _mdb_read_pg(MdbHandle *mdb, unsigned char *pg_buf, unsigned long pg);

View File

@@ -27,7 +27,7 @@
#include "connectparams.h"
static char software_version[] = "$Id: odbc.c,v 1.27 2004/12/11 06:07:22 whydoubt Exp $";
static char software_version[] = "$Id: odbc.c,v 1.28 2004/12/31 01:26:50 whydoubt Exp $";
static void *no_unused_var_warn[] = {software_version,
no_unused_var_warn};
@@ -803,11 +803,8 @@ struct _sql_bind_info *cur;
while (cur) {
if (cur->column_number>0 &&
cur->column_number <= env->sql->num_columns) {
mdb_sql_bind_column(env->sql,
cur->column_number, cur->varaddr);
if (cur->column_lenbind)
mdb_sql_bind_len(env->sql,
cur->column_number, cur->column_lenbind);
mdb_sql_bind_column(env->sql, cur->column_number,
cur->varaddr, cur->column_lenbind);
} else {
/* log error ? */
}

View File

@@ -717,32 +717,13 @@ int found = 0;
}
void
mdb_sql_bind_column(MdbSQL *sql, int colnum, char *varaddr)
mdb_sql_bind_column(MdbSQL *sql, int colnum, char *varaddr, int *len_ptr)
{
MdbSQLColumn *sqlcol;
/* sql columns are traditionally 1 based, so decrement colnum */
sqlcol = g_ptr_array_index(sql->columns,colnum - 1);
mdb_bind_column_by_name(sql->cur_table, sqlcol->name, varaddr);
}
void
mdb_sql_bind_len(MdbSQL *sql, int colnum, int *len_ptr)
{
MdbTableDef *table = sql->cur_table;
MdbSQLColumn *sqlcol;
MdbColumn *col;
unsigned int j;
/* sql columns are traditionally 1 based, so decrement colnum */
sqlcol = g_ptr_array_index(sql->columns,colnum - 1);
for (j=0;j<table->num_cols;j++) {
col=g_ptr_array_index(table->columns,j);
if (!strcasecmp(sqlcol->name, col->name)) {
/* bind the column length to its listed (SQL) position */
mdb_bind_len(table, j+1, len_ptr);
break;
}
}
mdb_bind_column_by_name(sql->cur_table, sqlcol->name, varaddr, len_ptr);
}
void
mdb_sql_bind_all(MdbSQL *sql)
@@ -751,7 +732,7 @@ mdb_sql_bind_all(MdbSQL *sql)
for (i=0;i<sql->num_columns;i++) {
sql->bound_values[i] = (char *) g_malloc0(MDB_BIND_SIZE);
mdb_sql_bind_column(sql, i+1, sql->bound_values[i]);
mdb_sql_bind_column(sql, i+1, sql->bound_values[i], NULL);
}
}
/*

View File

@@ -60,7 +60,7 @@ int started;
{
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_column (table, j+1, bound_values[j], NULL);
}
fprintf (stdout, "/******************************************************************/\n");

View File

@@ -139,8 +139,7 @@ main(int argc, char **argv)
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]);
mdb_bind_column(table, j+1, bound_values[j], &bound_lens[j]);
}
if (header_row) {
col=g_ptr_array_index(table->columns,0);

View File

@@ -60,9 +60,8 @@ main(int argc, char **argv)
mdb_read_columns(table);
mdb_rewind_table(table);
col_num = mdb_bind_column_by_name(table, argv[optind+2], buf);
mdb_bind_len(table, col_num, &len);
mdb_bind_column_by_name(table, "Name", name);
col_num = mdb_bind_column_by_name(table, argv[optind+2], buf, &len);
mdb_bind_column_by_name(table, "Name", name, NULL);
while(mdb_fetch_row(table)) {
if (!strcmp(name, argv[optind+1])) {

View File

@@ -80,8 +80,7 @@ char *sargcol, *sargop, *sargval;
}
}
printf("column %d\n",found);
mdb_bind_column(table, found, ole_data);
mdb_bind_len(table, found, &len);
mdb_bind_column(table, found, ole_data, &len);
if (sargname) {
sargcol = strtok(sargname," ");

View File

@@ -70,7 +70,7 @@ MdbSarg sarg;
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_column(table, j+1, bound_values[j], NULL);
}
/* print header */

View File

@@ -20,7 +20,6 @@
#include "mdbtools.h"
int bind_column(MdbTableDef *table, char *colname, unsigned char *data, int *len);
void read_to_row(MdbTableDef *table, char *sargname);
int
@@ -30,6 +29,7 @@ MdbHandle *mdb;
MdbTableDef *table;
char *colname, *tabname;
char *colval;
int colnum;
char *sargname = NULL;
char *updstr = NULL;
unsigned char data[255];
@@ -55,7 +55,8 @@ int len;
printf("updstr %s\n",updstr);
colname = strtok(updstr,"=");
colval = strtok(NULL,"=");
bind_column(table, colname, data, &len);
colnum = mdb_bind_column_by_name(table, colname, data, &len);
printf("column %d\n", colnum);
read_to_row(table, sargname);
printf("current value of %s is %s, changing to %s\n", colname, data, colval);
len = strlen(colval);
@@ -70,23 +71,6 @@ int len;
exit(0);
}
int bind_column(MdbTableDef *table, char *colname, unsigned char *data, int *len)
{
unsigned int i, found = 0;
MdbColumn *col;
for (i=0;i<table->num_cols;i++) {
col=g_ptr_array_index(table->columns,i);
printf("%d colname %s\n", i, col->name);
if (col && !strcmp(col->name,colname)) {
found = i+1;
}
}
printf("column %d\n",found);
mdb_bind_column(table, found, data);
mdb_bind_len(table, found, len);
return 0;
}
void read_to_row(MdbTableDef *table, char *sargname)
{
static MdbSargNode sarg;