On 08/21/2015 12:30 PM, Jeff M wrote: > Sometimes my iOS app creates an unreasonable number of prepared statements > (perhaps 1,000, an app bug that I'm fixing). These prepared statements are > later finalized just prior to doing sqlite3_close(), which sometimes returns > SQL_BUSY. The docs say SQL_BUSY will be returned if I haven't finalized all > prepared statements, but I believe I have done so. My iOS app has only one > connection to the DB and I'm doing all this work on the main thread. > > 1. The docs don't say what to do in the case of SQL_BUSY. Does that mean > I've certainly failed to finalize one or more prepared statements, or does > SQLite just need more time (in which case can I loop on sqlite3_close() until > I get SQLITE_OK)? > > 2. Does SQLite keep a record of prepared statements? If so, is there a way > I can ask SQLite to close them all, or are there any tricks to debugging > which statements have not been finalized?
It does. Here: https://www.sqlite.org/c3ref/next_stmt.html If sqlite3_close() returns SQLITE_BUSY, this can be used to find the unfinalized statements. Sometimes using sqlite3_sql() on the statement handles helps to determine where the leak occurred. Dan.