> If you use sqlite3_prepare_v2 function to prepare your statement,
> you opt out of this legacy behavior and then sqlite3_step returns 
> the actual error code directly, and sqlite3_reset and _finalize 
> behave in a sane way. 

Thanks for the clarification!

-- Igor


 
-----Original Message-----
From: Igor Tandetnik [mailto:[EMAIL PROTECTED] 
Sent: Friday, November 23, 2007 11:14 PM
To: SQLite
Subject: [sqlite] Re: How to reset errcode

Igor Sereda <[EMAIL PROTECTED]> wrote:
> From API docs:
>
> [quote]
> The sqlite3_errcode() interface returns the numeric result code or 
> extended result code for the most recent failed sqlite3_* API call 
> associated with sqlite3 handle 'db'. If a prior API call failed but 
> the most recent API call succeeded, the return value from
> sqlite3_errcode() is undefined.
> [/quote]
>
> I find this contract very inconvenient, as for each API call I would 
> like to know exactly whether it had succeeded.

The return value of each API tells you whether it has succeeded or not.

> I suppose that the
> same contract applies to int return values from sqlite3_* calls -- for 
> example, docs for sqlite3_finalize() state that the return code can be 
> an error from previous execution of the statement.

That's because of an unfortunate historical behavior of sqlite3_step, which now 
has to be maintained for backward compatibility. When sqlite3_step fails, it 
returns a generic SQLITE_ERROR code. One has to follow up with a call to 
sqlite3_reset or sqlite3_finalize, which returns the actual error code that 
sqlite3_step should have returned in the first place, even though the actual 
reset or finalize operation succeeds.

If you use sqlite3_prepare_v2 function to prepare your statement, you opt out 
of this legacy behavior and then sqlite3_step returns the actual error code 
directly, and sqlite3_reset and _finalize behave in a sane way.

Igor Tandetnik 


-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------



-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------

Reply via email to