Hi, The C code that I use with SQLite is pretty well tested and known to work well so far, but I've ran into some documentation which leads me to suspect there is a problem with my existing code, or a problem with the documentation.
>From the documentation: http://www.sqlite.org/c3ref/step.html "SQLITE_BUSY means that the database engine was unable to acquire the database locks it needs to do its job. If the statement is a COMMIT or occurs outside of an explicit transaction, then you can retry the statement. If the statement is not a COMMIT and occurs within an explicit transaction then you should rollback the transaction before continuing." This last sentence is disconcerting, what I've done to simplify my code is have a common function through which all statements are executed, ... while executing a statement, usually with sqlite3_exec(), I test for SQLITE_BUSY and run a retry loop there. Since I run all of these statements withing transactions (between "BEGIN" statements and "COMMIT" / "ROLLBACK" statements"), my expectation is that SQLITE_BUSY will only ever be returned for the leading "BEGIN" statement. Now that I've started converting some of the code (just the deletes/inserts) to use prepared statements, I've run into the above, worrisome documentation. If my prepared statements are always run after "BEGIN" and before "COMMIT" or "ROLLBACK", is there any way that SQLITE_BUSY can be returned ? >From the documentation, it looks as though I should be writing much more paranoid code, i.e. I should be checking for SQLITE_BUSY at *any* point within the transaction and, if it occurs I should rollback the whole transaction and try again from the beginning. Is that the case ? Thanks for your input. Kind Regards, -Tristan _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users