Re: There's an error, but $sth->execute returns -1

[email protected] ("Martin J. Evans")
Newsgroups perl.dbi.users
Organization Easysoft Limited
Message-ID <[email protected]>
On 18/10/10 23:05, Tim Bunce wrote:
> 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.

I've updated DBI::DBD to that effect.

Martin

>> 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
>>
>>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.