Re: [sqlite] When to use SQLITE_STATIC and SQLITE_TRANSIENT?

2007-08-10 Thread Dan Kennedy
On Fri, 2007-08-10 at 11:28 +0200, Jef Driesen wrote:
> When using sqlite3_bind_text() (or a similar function) with 
> SQLITE_STATIC, how long does the pointer have to remain valid? As long 
> as the sqlite3_stmt is not finalized?

Pretty much. It has to be valid during all subsequent calls to 
sqlite3_step() on the statement handle. Or until you bind a
different value to the same parameter.

So the technique below is fine.

Dan.

> 
> It is clear to me the following will cause no problem:
> 
> sqlite3_bind_text (stmt, column, "some text", -1, SQLITE_STATIC);
> 
> But what about this:
> 
> void some_func (const char* text)
> {
> sqlite3_stmt *stmt = 0;
> sqlite3_prepare_v2 (db, sql, -1, , NULL);
> sqlite3_bind_text (stmt, column, text, -1, SQLITE_STATIC);
> sqlite3_step (stmt);
> ...
> sqlite3_finalize (stmt);
> }
> 
> In this case the pointer remains unchanged as long as the statement is 
> valid, but it can change afterwards. Is that a problem and should I use 
> SQLITE_TRANSIENT here?
> 
> 
> 
> -
> To unsubscribe, send email to [EMAIL PROTECTED]
> -
> 


-
To unsubscribe, send email to [EMAIL PROTECTED]
-



[sqlite] When to use SQLITE_STATIC and SQLITE_TRANSIENT?

2007-08-10 Thread Jef Driesen
When using sqlite3_bind_text() (or a similar function) with 
SQLITE_STATIC, how long does the pointer have to remain valid? As long 
as the sqlite3_stmt is not finalized?


It is clear to me the following will cause no problem:

sqlite3_bind_text (stmt, column, "some text", -1, SQLITE_STATIC);

But what about this:

void some_func (const char* text)
{
   sqlite3_stmt *stmt = 0;
   sqlite3_prepare_v2 (db, sql, -1, , NULL);
   sqlite3_bind_text (stmt, column, text, -1, SQLITE_STATIC);
   sqlite3_step (stmt);
   ...
   sqlite3_finalize (stmt);
}

In this case the pointer remains unchanged as long as the statement is 
valid, but it can change afterwards. Is that a problem and should I use 
SQLITE_TRANSIENT here?




-
To unsubscribe, send email to [EMAIL PROTECTED]
-