Hi everyone,

I have an interesting locking problem that I'm wondering if someone can help 
with some insight.

I have a master database with some metadata, and several sub-databases to store 
logging events. I have one reader object and one writer object that attach to 
the sub-databases and encapsulate the read/write operations respectively.

I've found a very unexpected locking behavior with the attached databases and 
exclusive transactions. One of my unit tests does the following:

Begin EXCLUSIVE TRANSACTION;
insert several rows of data;
Commit transaction;

Prepare query statement;
Iterate through one or more rows;
Reset statement;

Attempt to begin transaction; <--- SQLITE_BUSY!!!!
Would like to write more here, but can't unless I close/open the connection;

I can't seem to figure out any reason why I can't create a new exclusive 
transaction here, and I feel it must have to do with the fact that I have 
attached to sub-databases (possibly the same sub-database) with my 
reader/writer objects. This is single threaded and only database connection 
(with attach/detach logic).
I have verified that all statements prepared by the connection are properly 
reset - this is handled by my C++ wrappers, and any errors will throw an 
exception. I even iterated through all of the current statements with the 
following code immediately before my transaction failure, with no results:

sqlite3_stmt *stmt = NULL;
while ((stmt = sqlite3_next_stmt(db, stmt)) != NULL)
{
    if (sqlite3_stmt_busy(stmt))
    {
        const char* sql = sqlite3_sql(stmt);
        std::cout << sql << "\r\n";
    }
}

Can anyone think of a reason why attached databases would prevent entering a 
second transaction? BTW, it doesn't seem to work with immediate transactions 
either. If I remove the query, everything works fine.

Thanks!


________________________________
This email, including any attachments and files transmitted with it, are for 
the sole use of the intended recipient(s) to whom this email is addressed, and 
may contain confidential and/or privileged information. Any unauthorized 
review, use, disclosure or distribution is prohibited. If you are not the 
intended recipient, please be advised that you have received this email in 
error, and please contact the sender by reply email and destroy all copies 
(including all electronic and hard copies) of the original message. Thank you.
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to