Skip to Content.
Sympa Menu

freetds - [freetds] SQL_SUCCESS_WITH[out]_INFO in ODBC lib

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: Nathan Bird <nathan AT acceleration.net>
  • To: freetds AT lists.ibiblio.org
  • Subject: [freetds] SQL_SUCCESS_WITH[out]_INFO in ODBC lib
  • Date: Thu, 10 Apr 2008 14:41:38 -0400

I ran into a problem recently where trying to read data through the ODBC lib gave me a number of problems, updating to 0.82RC4 fixed most of them, but one remains.

Reading data in chunks with SQLGetData if the buffer is not long enough for the value to copy, it should fill the buffer, and return SQL_SUCCESS_WITH_INFO, along with setting the StrLen_or_IndPtr to point at the how much data is available. At least according to http://msdn2.microsoft.com/en-us/library//ms715441.aspx [1] the info should be "01004" to indicate the string is right truncated-- this isn't being set right now.

SQLGetData is defined in src/odbc/odbc.c line 4617 [2], there is a note on 4717, "TODO: add diagnostic"... I think if that were replaced with something like

odbc_errs_add(&stmt->errs, "01004", NULL);

that would be pretty much taken care of. As I understand it, at that branch it is already only dealing with character (or binary) data so that is about all that is applicable.

I am working with some code that depended on that status being set to indicate it should continue querying for more data. I've changed this to just keep querying as long as it is success_with_info, and the size pointer indicates there is more data. Having this flag set as well would still be nice and may save someone else the trouble.

[1] From my searching this was the most definitive source for ODBC spec I could find, if there is a better source please let me know.
[2] http://freetds.cvs.sourceforge.net/freetds/freetds/src/odbc/odbc.c?revision=1.478&view=markup

Nathan Bird




Archive powered by MHonArc 2.6.24.

Top of Page