Skip to Content.
Sympa Menu

freetds - [freetds] ODBC SQLExecute succeeds when it shouldn't

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: <nj-freetds AT talbott.ws>
  • To: <freetds AT lists.ibiblio.org>
  • Cc: chw AT ch-werner.de
  • Subject: [freetds] ODBC SQLExecute succeeds when it shouldn't
  • Date: Tue, 25 Nov 2003 21:19:04 -0500

I'm using a nightly snapshot of FreeTDS (20031125) with unixODBC and the
Ruby ODBC bindings. It was working well... actually, a little TOO well.
Queries that should raise errors weren't, for instance:

require 'odbc'
d = ODBC::connect('sedev', "sedev", "")

# Should raise an error, but doesn't
d.do("INSERT INTO urls ( recdate ) VALUES ( ? )", "2003-10-1 10:11:1 0")

# Properly raises an error
d.do("INSERT INTO urls ( recdate ) VALUES ( '2003-10-1 10:11:1 0' )")

(I've attached the interesting bits of the TDSDUMP log generated by this
conversation)

After much looking at Ruby/ODBC trace statements and TDSDUMP logs, I made
the following small patch:

<patch>
--- odbc.c Sat Nov 22 11:22:25 2003
+++ cl-freetds-0.62-dev20031125/src/odbc/odbc.c Tue Nov 25 18:42:58 2003
@@ -2385,6 +2385,8 @@

/* TODO test flags ? check error and change result ?
*/
case TDS_DONEINPROC_RESULT:
+ if(done_flags & TDS_DONE_ERROR)
+ result = SQL_ERROR;
if (in_row)
done = 1;
break;
</patch>

See that TODO there? I was hitting an error that showed up in DONEINPROC,
and thus _SQLExecute was returning a SQL_SUCCESS_WITH_INFO instead of a
SQL_ERROR. With the patch, both of the queries above fail correctly.

Note that I haven't removed the TODO line. That's because I have no earthly
idea whether this is a good fix for the problem, or whether the cure is
worse than the disease. My patch is so simplistic, I'm guessing there must
be more that needs to be done here. If there are dangers with the code
above, or a better solution, please, let me know.

Thanks,


Nathaniel

<:((><

Attachment: tds.log
Description: Binary data




Archive powered by MHonArc 2.6.24.

Top of Page