Hello,

We came across an issue last week with SQLite 3.5.9 on Windows.  A 
program stopped working on Windows when we upgraded from SQLite 3.4.1 to 
SQLite 3.5.9.  It turned out that the cause was that SQLite 3.5.9 (and 
perhaps SQLite 3.5.x in general) was not fully honoring the 
temp_store_directory pragma.  That is, the pathname for the pager's 
statement journal (Pager::zStmtJrnl) is computed when the pager is 
opened but not necessarily recomputed when the temp_store_directory is 
changed, so the pager may try to use a different directory than 
intended.  This was aggravated by some bug (apparently in MinGW) where 
GetTempPath() is only cycling through the TMP, TEMP, and USERPROFILE 
environment variables to find a viable temporary folder when running as 
Administrator (or perhaps a user in the Administrators group).

My fix was to compute Pager::zStmtJrnl in pagerStmtBegin(), right before 
opening the statement journal.  It appears that some rearchitecture in 
SQLite 3.6.0 (http://www.sqlite.org/cvstrac/chngview?cn=5190) removes 
this bug, so I won't submit a patch, but I'll be happy to provide one 
should anyone request it.

By the way, it seems a little bit questionable that 
sqlite3_temp_directory is a global, and hence the temp_store_directory 
pragma is also global, affecting all databases opened within the same 
process.

cheers,
Arun Bhalla
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to