On Tue, Jun 26, 2012 at 11:15 AM, Simon Slavin <[email protected]> wrote:

>
> On 26 Jun 2012, at 4:11pm, "Black, Michael (IS)" <[email protected]>
> wrote:
>
> > So...transaction is started at sqlite3_step and stays open until
> sqlite3_reset or sqlite3_finalize, right?
> >
> > sqlite3_close would do what if you didn't finalize?  Just a memory leak
> or worse?  Or would sqlite3_close return an error if there's an open
> transaction?
>
> <http://www.sqlite.org/c3ref/close.html>
>
> "Applications must finalize all prepared statements and close all BLOB
> handles associated with the sqlite3 object prior to attempting to close the
> object. If sqlite3_close() is called on a database connection that still
> has outstanding prepared statements or BLOB handles, then it returns
> SQLITE_BUSY."
>
>
> on the other hand ...
>
> "If sqlite3_close() is invoked while a transaction is open, the
> transaction is automatically rolled back."
>
> It is not an error to close the file while you're in the middle of a
> transaction.  It just means you didn't commit the transaction.
>

The second statement above refers to an explicit transaction created using
the BEGIN statement.  It does not follow that implied transactions created
by running queries are automatically cancelled when you do
sqlite3_close().  To cancel the implied transaction, you have to
sqlite3_reset() or sqlite3_finalize() the prepared statement that created
the transaction in the first place.


>
> Simon.
> _______________________________________________
> sqlite-users mailing list
> [email protected]
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>



-- 
D. Richard Hipp
[email protected]
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to