I stand corrected, thank you Andrew. I seriuosly doubt it is a bug in
SQlite, but I have had a hell of a time with sqlite and binding
dynamically allocated text and binary data.
On 7/1/07, Andrew Finkenstadt <[EMAIL PROTECTED]> wrote:
On 7/1/07, Rich Rattanni <[EMAIL PROTECTED]> wrote:
>
> I was trying to look through the SQLITE source code to see how the
> sqlite3_bind_blob routine worked.
>
> sqlite3_bind_blob passes the data pointer to bindText
> bindText passes the data pointer to sqlite3VdbeMemSetStr
> sqlite3VdbeMemSetStr then does...
> ...
> pMem->z = (char *)z;
> if( xDel==SQLITE_STATIC ){
> pMem->flags = MEM_Static;
> }else if( xDel==SQLITE_TRANSIENT ){
> pMem->flags = MEM_Ephem;
> }else{
> pMem->flags = MEM_Dyn;
> pMem->xDel = xDel;
> }
> ...
>
> I dont see anywhere where sqlite3 copies data to a private buffer, I
> just see where sqlite3 saves a copy of the user pointer.
>
Further down in that function, after setting MEM_Ephem, there are these
lines of code:
if( pMem->flags&MEM_Ephem ){
return sqlite3VdbeMemMakeWriteable(pMem);
}
which does the memory copy when SQLITE_TRANSIENT is used as a side-effect of
making it "writable".
In your original outline you issued sqlite3_step before freeing the memory.
If you leave it that way, you can get away with SQLITE_STATIC when binding
the blob... which might indicate something by whether/where the crash still
occurs.
--andy
just a sqlite user, not really a knower-of-code
-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------