mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-09-18 18:22:07 +08:00
Combine functions that bind a column and its length
This commit is contained in:
23
ChangeLog
23
ChangeLog
@@ -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
|
||||
|
4
HACKING
4
HACKING
@@ -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 |
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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 *);
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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)) {
|
||||
|
@@ -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);
|
||||
|
@@ -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 ? */
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
/*
|
||||
|
@@ -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");
|
||||
|
@@ -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);
|
||||
|
@@ -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])) {
|
||||
|
@@ -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," ");
|
||||
|
@@ -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 */
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user