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

Reply via email to