The attached patch addresses three problems with nsodbc.
1. ODBCGetRow can't retrieve large values, e.g. from a
SQL Server TEXT column, as it only calls SQLGetData
once with a 8192 byte buffer. In your server log you
will see something like:
odbc message: SQLSTATE = 01004, Native err = 0, msg =
'[Microsoft][ODBC SQL Server Driver]String data, right
truncation'
With the patch, we call SQLGetData until there is no
more data left, building up the result in a DString.
2. If an error is thrown while retrieving rows with
ns_db getrow, so that not all rows are retrieved, then
the next ns_db select will hang. The patch makes
ODBCExec cancel the active select if there is one,
which I believe is the current behavior in at least
some other db drivers, like nsoracle.
3. Wrap nsdb.h include in #ifndef NS_DML to build with
both AOLserver 3.x and 4.x. (I haven't actually tested
this with 3.x)