On Wed, 2008-09-10 at 22:35 +0100, Andy Chambers wrote:
Everything is pretty straightforward apart from the last two parameters. Length is supposed to be the length of the value being passed in (or -1 if the value is null terminated). The destructor is supposed to be a function that frees the memory required by `value' after sqlite is finished with it. For destructor, you can use the special value 0 if the memory is in "unmanaged" space. So I have a few questions...
from the sqlite documentation: The fifth argument to sqlite3_bind_blob(), sqlite3_bind_text(), and sqlite3_bind_text16() is a destructor used to dispose of the BLOB or string after SQLite has finished with it. If the fifth argument is the special value SQLITE_STATIC, then SQLite assumes that the information is in static, unmanaged space and does not need to be freed. If the fifth argument has the value SQLITE_TRANSIENT, then SQLite makes its own private copy of the data immediately, before the sqlite3_bind_*() routine returns.
You're passing 0 as fifth parameter, which is SQLITE_STATIC, but that's only for static data, while CFFI C-strings are dynamically allocated. Use SQLITE_TRANSIENT instead.