[freetds] Patch for ODBC binary data.

Gerhard Esterhuizen gerhard.esterhuizen at swistgroup.com
Fri Apr 25 10:18:18 EDT 2003


Attached is a patch that allows the FreeTDS ODBC driver to handle binary
data (SQL types SQL_BINARY and SQL_VARBINARY and C type SQL_C_BINARY).
This allows binary data (IMAGE fields and void*/length) to be read and
written using the ODBC interface.

The patches were created against nightly snapshot of 17/03/2003 (i.e.
freetds-0.62.dev.20030317). I didn't do it against the CVS snapshot as
my automake/autoconf complained about missing files (e.g. config.h.in) -
probably due to old autotools). The latest nightly snapshot (25/04/2003)
built fine, but refused to authenticate (unixODBC gave "Login

The patch does the following:

1. Add handling of SQL_C_BINARY to

2. Add src/odbc/convert_sql2string.c:convert_binary2string().

3. Add handling of SQL_C_BINARY to

4. Add handling of SQL_BINARY and SQL_VARBINARY in

My motivation for creating these patches are:

1. The existing convert_sql2string didn't handle a source type of
SQL_C_BINARY specially, but forwarded to tds_convert() (in
src/tds/convert.c) which didn't work (due to the omission of the "0x"
prefix in the encoded string - changing this would probably have broken
other interfaces depending on tds_convert).

2. Returning a binary field as a hex-encoded C string (i.e. SQL type
SQL_BINARY and C type SQL_C_CHAR) doesn't work properly due to a bug in
SQLGetData() (in src/odbc/odbc.c): convert_tds2sql() returns the size of
the converted buffer, but it is used as an offset into the source
buffer. As each binary source byte gets converted to two bytes, this
doesn't work.

I hope these patches don't break anything else and works as advertised.




Gerhard Esterhuizen
Software Engineer
SWiST Group Technologies (Pty) Ltd
email: gerhard.esterhuizen at swistgroup.com
Cell: +27 82 370 9737

Web: http://www.swistgroup.com
Voice: +27 21 888 7920, Fax: +27 21 888 7979
Click here to view our e-mail legal notice: 
 http://www.swistgroup.com/email.htm or call: +27 21 888 7920.

More information about the FreeTDS mailing list