On Sat, Oct 16, 2010 at 11:03:08AM +0100, Martin J. Evans wrote:
> On 15/10/2010 22:20, Roode, Eric wrote:
> >Hello all,
> >
> >DBI docs says that statement handle method execute() returns undef on
> >error. I have found a situation where that does not hold. Was hoping
> >someone could help me out, maybe there's a workaround.
>
> (Tim Bunce, if you see this could you clarify what dbd_st_execute is
> supposed to return as I could not find the full details in DBI::DBD.
> It would appear DBD::ODBC returns -2 for error, -1 for rowcount not
> known and a positive number for rows affected).
I see it's not mentioned in the DBI::DBD docs. From Driver.xst:
retval = dbd_st_execute(sth, imp_sth);
/* remember that dbd_st_execute must return <= -2 for error */
if (retval == 0) /* ok with no rows affected */
XST_mPV(0, "0E0"); /* (true but zero) */
else if (retval < -1) /* -1 == unknown number of rows */
XST_mUNDEF(0); /* <= -2 means error */
else
XST_mIV(0, retval); /* typically 1, rowcount or -1 */
> The status returned was SQL_SUCCESS_WITH_INFO:
>
> !!dbd_error2(err_rc=1, what=st_execute/SQLExecute,
> handles=(3194c98,2b5a848,30d4cd0)
>
> that err_rc=1 which is not an error.
>
> If SQLRowCount returns -1 then dbd_st_execute will return -1, that
> may be a bug but really the code should not have got to this point
> anyway. The are differences between what DBI documents for the
> execute method and what DBD::ODBC returns from the dbd_st_execute
> and I cannot see for instance the -2 (for errors) documented in
> DBI::DBD so I'm not sure if this is right or wrong (Tim?).
It should be documented that dbd_st_execute should return <= -2 to
indicate an error.
Tim.
> As far as I can see this looks like a bug in your driver (but I'll
> try and reproduce here). Surely failing to insert into a column
> should be an error not success with info (an example of the latter
> is say an insert which worked but truncated your data). What ODBC
> Driver manager and driver versions are you using - you can find
> these from the Administrative tools, data sources or in windows 7 by
> searching for data sources in the control panel top right.
>
> Martin
>
>