-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 10/04/2011 10:52 PM, James Brison wrote: > Can you open a database twice without closing it?
That has absolutely nothing whatsoever with what you are seeing. > What is odd, is that I am using the prepare_v2 API. The documentation says > it should not happen but I am getting a return code 17. The traditional reason you get this error is because of how prepared statements are used internally. Effectively they say things like get the value from column 7 of table 14. If you change the schema then those *may* have moved around so prepare has to be run again. prepare_v2 causes sqlite3_step to have a do-while loop that reprepares the statement if SQLITE_SCHEMA is returned. It tries this 5 times. In general this will catch the database schema changing and automatically handle it. There is unfortunately a fly in the ointment and my biggest irritation with SQLite. If the reprepare fails for (almost) any reason then SQLITE_SCHEMA is returned instead of the actual failure code. For example if you call prepare with a non-existent collation then SQLITE_ERROR is returned, but if you removed the collation between the calls of prepare_v2 and step then you get SQLITE_SCHEMA instead. The team decided this behaviour was a good thing to do: http://www.sqlite.org/src/tktview?name=8d510499cc You can find the actual error code by calling prepare again yourself when getting SQLITE_SCHEMA. You can call sqlite3_sql() to get the original statement text. You should also look at the error string being returned in addition to the code. In my own code I gave up on prepare_v2 and use the older interface handling SLITE_SCHEMA myself because of the API inconsistencies. It also saved a redundant copy of the statement text since my cache has that as a key anyway. (prepare_v2 causes a copy of the statement text to be saved to reprepares can be done in step.) Roger -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iEYEARECAAYFAk6L98gACgkQmOOfHg372QQTDgCg4iBLydcF1KtCRrpSIwsrK4jj g+8AnjhVxZns9EXUJphYplUeZLxwDB8x =GvAY -----END PGP SIGNATURE----- _______________________________________________ sqlite-users mailing list [email protected] http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

