freetds AT lists.ibiblio.org
Subject: FreeTDS Development Group
List archive
[freetds] ODBC SQLExecute succeeds when it shouldn't
- 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
-
[freetds] ODBC SQLExecute succeeds when it shouldn't,
nj-freetds, 11/25/2003
-
Re: [freetds] ODBC SQLExecute succeeds when it shouldn't,
James K. Lowden, 11/29/2003
- Re: [freetds] ODBC SQLExecute succeeds when it shouldn't, Nathaniel Talbott, 11/29/2003
-
Re: [freetds] ODBC SQLExecute succeeds when it shouldn't,
James K. Lowden, 11/29/2003
Archive powered by MHonArc 2.6.24.