From de1ce907a4663661f951f026e33db29b56e39ed2 Mon Sep 17 00:00:00 2001 From: whydoubt Date: Fri, 4 Nov 2005 12:12:11 +0000 Subject: [PATCH] Fixes in reading data into bound fields --- ChangeLog | 4 ++++ src/libmdb/data.c | 34 +++++++++++++++++++++------------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2f4190d..5379aca 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Fri Nov 4 06:10:41 CST 2005 Jeff Smith + * src/libmdb/data.c: Fix in reading bound boolean fields (Yasir Assam) + * src/libmdb/data.c: Several more fixes in reading data into bound fields + Mon Oct 17 06:25:44 CDT 2005 Jeff Smith * src/util/mdb-prop.c: General cleanup * HACKING: Correct info about MDBICONV diff --git a/src/libmdb/data.c b/src/libmdb/data.c index b78a90b..1c36e75 100644 --- a/src/libmdb/data.c +++ b/src/libmdb/data.c @@ -33,7 +33,7 @@ static int _mdb_attempt_bind(MdbHandle *mdb, static char *mdb_num_to_string(MdbHandle *mdb, int start, int datatype, int prec, int scale); static char *mdb_date_to_string(MdbHandle *mdb, int start); #ifdef MDB_COPY_OLE -static size_t mdb_copy_ole(MdbHandle *mdb, char *dest, int start, int size); +static size_t mdb_copy_ole(MdbHandle *mdb, void *dest, int start, int size); #endif static char date_fmt[64] = "%x %X"; @@ -163,20 +163,23 @@ int bit_num = (col_num - 1) % 8; } /* bool has to be handled specially because it uses the null bit to store its ** value*/ -static int +static size_t mdb_xfer_bound_bool(MdbHandle *mdb, MdbColumn *col, int value) { - col->cur_value_len = value; if (col->bind_ptr) { - strcpy(col->bind_ptr, value ? "0" : "1"); + strcpy(col->bind_ptr, value ? "0" : "1"); + } + if (col->len_ptr) { + *col->len_ptr = 1; } - return 0; + return 1; } -static int mdb_xfer_bound_ole(MdbHandle *mdb, int start, MdbColumn *col, int len) +static size_t +mdb_xfer_bound_ole(MdbHandle *mdb, int start, MdbColumn *col, int len) { - int ret = 0; + size_t ret = 0; if (len) { col->cur_value_start = start; col->cur_value_len = len; @@ -184,18 +187,23 @@ static int mdb_xfer_bound_ole(MdbHandle *mdb, int start, MdbColumn *col, int len col->cur_value_start = 0; col->cur_value_len = 0; } - if (col->bind_ptr || col->len_ptr) { #ifdef MDB_COPY_OLE + if (col->bind_ptr || col->len_ptr) { ret = mdb_copy_ole(mdb, col->bind_ptr, start, len); -#endif - memcpy(col->bind_ptr, &mdb->pg_buf[start], MDB_MEMO_OVERHEAD); } +#else + if (col->bind_ptr) { + memcpy(col->bind_ptr, mdb->pg_buf + start, MDB_MEMO_OVERHEAD); + } + ret = MDB_MEMO_OVERHEAD; +#endif if (col->len_ptr) { - *col->len_ptr = MDB_MEMO_OVERHEAD; + *col->len_ptr = ret; } return ret; } -static int mdb_xfer_bound_data(MdbHandle *mdb, int start, MdbColumn *col, int len) +static size_t +mdb_xfer_bound_data(MdbHandle *mdb, int start, MdbColumn *col, int len) { int ret; //if (!strcmp("Name",col->name)) { @@ -532,7 +540,7 @@ mdb_ole_read(MdbHandle *mdb, MdbColumn *col, void *ole_ptr, int chunk_size) } } #ifdef MDB_COPY_OLE -static size_t mdb_copy_ole(MdbHandle *mdb, char *dest, int start, int size) +static size_t mdb_copy_ole(MdbHandle *mdb, void *dest, int start, int size) { guint32 ole_len; gint32 row_start, pg_row;