On Wed, Aug 01, 2012 at 04:48:48PM +0000, Rob Richardson scratched on the wall: > Is "acceptable" good enough? I admit I haven't played with this function > (actually, I never heard of it until today), but from what I read in the > documentation, the case described looked dangerous to me.
It's somewhat undefined, and I suspect that's intentional. There are a lot of specifics that are undocumented because they change from version to version of SQLite. > SQLITE_STATIC > seemed to me to imply that the contents of the memory used by the sqlite > statement would never change over the life of the statement. It's more the lifetime of the binding. Which reminds me (and I see others on the list already pointed this out), freeing the memory after a call to _reset() would be a Bad Idea since the binding is still in effect. It would have to be _finalize() or _clear_bindings(). But yes... the key is that the memory remains valid for the lifetime of the binding, not the fact that is or isn't statically allocated. -j > -----Original Message----- > From: sqlite-users-boun...@sqlite.org > [mailto:sqlite-users-boun...@sqlite.org] On Behalf Of Jay A. Kreibich > Sent: Wednesday, August 01, 2012 12:16 PM > To: General Discussion of SQLite Database > Cc: c...@iki.fi > Subject: Re: [sqlite] SQLITE_STATIC and temporary data > > 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 > _finalize() is called, but, yes... this use of SQLITE_STATIC is > acceptable (and somewhat common). > > -j -- Jay A. Kreibich < J A Y @ K R E I B I.C H > "Intelligence is like underwear: it is important that you have it, but showing it to the wrong people has the tendency to make them feel uncomfortable." -- Angela Johnson _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users