The documentation for BEGIN TRANSACTION (http://www.sqlite.org/lang_transaction.html) does:

An implicit transaction (a transaction that is started automatically, not a transaction started by BEGIN) is committed automatically when the last active statement finishes. A statement finishes when its prepared statement is reset or finalized.

The explicit COMMIT command runs immediately, even if there are pending SELECT statements. However, if there are pending write operations, the COMMIT command will fail with an error code SQLITE_BUSY.

The ROLLBACK will fail with an error code SQLITE_BUSY if there are any pending queries. Both read-only and read/write queries will cause a ROLLBACK to fail. A ROLLBACK must fail if there are pending read operations (unlike COMMIT which can succeed) because bad things will happen if the in-memory image of the database is changed out from under an active query.

Igor Tandetnik

On 10/30/2013 12:09 PM, Normand Mongeau wrote:
Then IMO the documentation for either sqlite3_prepare_xx or SQLITE_BUSY
should state this. It would have been helpful in my case, I was pulling my
hair looking at the transaction model which was sound.



-----Original Message-----
From: sqlite-users-boun...@sqlite.org
[mailto:sqlite-users-boun...@sqlite.org] On Behalf Of Simon Slavin
Sent: October-30-13 12:07 PM
To: General Discussion of SQLite Database
Subject: Re: [sqlite] Problem with SQLITE_BUSY


On 30 Oct 2013, at 4:03pm, Normand Mongeau <nmong...@theobjects.com> wrote:

Well finally found the problem: a forgotten sqlite3_finalize() call.

Very disturbing, I'd expect leakage, not the results I was seeing.

SQLite has to keep the state of your SELECT available until you tell it
you're done with that SELECT.  After all, you might look at the results you
have retrieved and decide to make some changes based on what you see there.
This means SQLite has to stop everything from changing the database.
Therefore it locks it.

Simon.
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users



_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to