I think I may have misunderstood something in a major way with regards to
the subject.
I have an application that maintains a single application-wide connection
which is opened with SQLITE_OPEN_FULLMUTEX flag. So if I have a method that
inserts multiple rows into a db, does that method need an application-level
lock when hit by multiple threads or does sqlite ensure serialized access
on that connection because of that flag?
This method goes something like this:
void Insert()
{
db_conn = get_one_and_only_db_conn();
db_conn.BeginTransaction();
for (int i = 0; i < 33; ++i) {
db_conn.InsertARow();
}
db_conn.EndTransaction();
}
Which brings me to the second question. The above code throws an exception
when Thread1 had already started a transaction via this method and Thread2
decides to enter this method and calls BeginTransaction again (cannot start
a transaction within a transaction).
Currently I wrap everything except get_one_and_only_db_conn() inside a
do/while loop, catch the exception thrown in the case of that nested
transaction error, sleep for half a second or so and try again. I try maybe
10 times or so. This doesn't look very reliable to me because under heavy
loads I keep hitting whatever retry attempt account I have set for myself.
What is the correct way to do this?
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users