Shaun Seckman (Firaxis) wrote:
> Hello everyone,
>
>                 I'm in the process of writing some C++ wrappers to
> SQLite in order to shoehorn it into some legacy code.  I'm curious if
> there is any performance impact to having several prepared statements
> active at any given time.  

That depends.  There is a time hit for preparing a query, but it is 
minimal.  That being said, I wrote a performance analyzer for our Delphi 
wrappers which tracked the amount of time in each phase and eliminated 
60% of our application's overall query time cost by caching prepared 
queries.


> I was thinking about using a prepared
> statement per instance of a Query class.  Also, what is the lifetime of
> the text received by sqlite3_column_text?
>   
This one caught me.  There is a parameter argument you can pass which 
transfers the management of the string to the sqlite engine itself:

Note that this code is in Delphi, but you get the idea:

procedure TSqlite3PreparedStatement.bind(const oneBasedIndex: integer; 
const value: ansistring);
begin
  logParam(itsParamName, oneBasedIndex, value);
  checkSqliteReturnResult(
    _sqlite3_bind_text(itsSqlitePreparedStatement, oneBasedIndex, 
pAnsiChar(value), length(value), pointer(SQLITE_TRANSIENT)),
    bindingError('string', value, oneBasedIndex));
end;

SQLITE_TRANSIENT is the value you are looking for:

http://www.sqlite.org/c3ref/bind_blob.html

"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."


HTH,


John


_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to