Jay A. Kreibich wrote: > On Wed, Aug 01, 2012 at 08:49:19PM +1000, Yose Widjaja scratched on the wall: >> Dear Friends, >> >> So SQLITE_STATIC is meant to be used for data that is static. However, >> would it still be safe when it is used with data that expires after the >> sqlite3_step() function? >> >> For example: >> >> string hello = "hello world"; >> >> sqlite3_bind(statement, 1, hello.c_str(), hello.size(), SQLITE_STATIC); >> >> sqlite3_step(statement);
>> hello = "moo"; >> >> Would there be anything that can potentially go wrong? I mean, since >> SQLITE_STATIC is meant to imply static stuff, would sqlite cache the value >> in such a way that subsequence SELECT_ statements actually use this static >> value that was passed in through the bind function? > > It would be better to keep the value valid until _reset() or No, _reset is NOT enough, as it *won't* clear bindings. You *must* keep data till either sqlite3_clear_bindings or sqlite3_finalize is (successfully) called. > _finalize() is called, but, yes... this use of SQLITE_STATIC is > acceptable (and somewhat common). Above code is certainly incorrect. Maybe you won't be slapped with SIGSEGV immediately (depending on surrounding code and sqlite3 implementation details), but still this is incorrect and unsafe. You should insert sqlite3_clear_bindings(statement); or sqlite3_bind_null(statement, 1); before hello = "moo"; _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users