I added some code before my call to sqlite3_close recently, like so:
hstmt = NULL;
while (hstmt = sqlite3_next_stmt (db,hstmt)) {
sql = sqlite3_sql (hstmt);
if (!sql) sql = "-"
fprintf (log,"Unfinalized statement handle found on database close for
[%s]\n",sql);
sqlite3_finalize (hstmt);
}
This was really just in case code. And to my surprise, I found that the 9
statements that rtreeSqlInit (called by rtreeInit called by rtree's xConnect)
prepares hadn't been finailized. On the other hand, the statement handle used
by my own virtual table module (used in the same query) was finalized. Looking
at the code, it seems that rtree uses a busy count (set to 1 by xConnect or
xCreate, incremented by xUpdate and xFilter and decremented by xDisconnect or
xDestroy), and until it hits 0, the statement handles are not finalized. When
I
traced the behavior in the debugger, I saw the statements get finalized swhen
qlite3_close was called. Is this the expected behavior? I could see it as an
optimization, although I don't see equivalent logic in the FTS code.
Best regards,
Peter Aronson
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users