> -----Original Message-----
> From: D. Richard Hipp [mailto:[EMAIL PROTECTED] 
> Sent: Sunday, July 10, 2005 6:12 AM
> To: sqlite-users@sqlite.org
> Subject: RE: [sqlite] Binding a column name?
> 
> On Sun, 2005-07-10 at 00:23 -0700, Brown, Dave wrote:
> > That is what I do. But that also means I have to call 
> sqlite_prepare() 
> > each time, instead of just once. I was originally hoping I could 
> > prepare() once and just bind.
> > 
> 
> If another thread or process VACUUMs the database or creates 
> a new table or makes any other structure changes to the 
> database file, all of your prepared statements will be 
> invalided and you will have to rerun sqlite3_prepare().  
> Since you generally have no control over when another process 
> might VACUUM the database, you should always be prepared to 
> rerun sqlite3_prepare() if necessary.  This is true even if 
> you are only running your SQL statement once and then 
> finalizing it because another process might VACUUM and 
> invalidate your statement in the very brief window of time 
> between your calls to sqlite3_prepare() and sqlite3_step().
> 
> Your best bet it to use a wrapper class of some sort that 
> automates the task of rerunning sqlite3_prepare() when necessary.
> 

Does sqlite store the SQL text passed into sqlite3_prepare?
If not, then I assume this means that any time we use sqlite3_prepare,
we should cache the SQL text "in the wrapper" in case we need to
re-prepare it.
Along the same line, I suppose we have to cache all the bound
parameters, since they will have to re-bound as well.

Is it possible to get the SQLITE_SCHEMA error after the first
sqlite3_step call, while iterating throw the rows?

Tim

Reply via email to