But... why don't you simply ask your users for a static string as well??? C++
makes it trivial to support this requirement of the C API.
// pointerType should be a static string
void wxSQLite3Statement::Bind(int paramIndex, void* pointer, char
*pointerType, void(*DeletePointer)(void*))
Gwendal
> Le 3 août 2017 à 17:30, Ulrich Telle <[email protected]> a écrit :
>
> Richard,
>
>> Can you please provide more details on how having a dynamic string for
>> the pointer type would be helpful? What is it that you are trying to
>> do that string constant will not work? Please be as specific as
>> possible, so that I might better understand your problem.
>
> I maintain a C++ wrapper library for SQLite especially for developers of
> wxWidgets based applications. This wrapper library offers access to almost
> all SQLite features (that make sense for an end-user application) through the
> use of C++ classes. That is, the wrapper classes encapsulate all calls to the
> SQlite C API.
>
> With the release of SQLite 3.20.0 the new pointer-passing interface was
> introduced, and I found it quite useful to support extensions like carray.
> Therefore, I implemented a pointer bind method for the prepared SQL statement
> classs. This method makes internally a call to function sqlite3_bind_pointer.
> The signature and implementation of the method looks like this:
>
> void wxSQLite3Statement::Bind(int paramIndex, void* pointer, const wxString&
> pointerType, void(*DeletePointer)(void*))
> {
> CheckStmt();
> const char* localPointerType = m_stmt->MakePointerTypeCopy(pointerType);
> int rc = sqlite3_bind_pointer(m_stmt->m_stmt, paramIndex, pointer,
> localPointerType, DeletePointer);
> }
>
> The member variable m_stmt is a reference counted reference object to a
> prepared SQL statement (sqlite3_stmt). This makes it possible to pass around
> the SQL statement object and to clean up the SQLite data structures when the
> last reference to the statement is deleted. This reference object now
> includes a dynamic array holding pointer type string duplicates until the
> reference object itself goes out of scope.
>
> However, in my first implementation I converted the pointer type string
> parameter (wxString object) to a local char* variable. Since this local
> variable was destroyed after leaving the method, the select on the carray
> table failed, since the pointer type string was void.
>
> Now, I create a copy of the pointer type string in a data structure that is
> kept alive until the SQL statement object is deleted. The carray extension
> now works flawlessly in the context of my wrapper.
>
> For a C++ wrapper you could argue that using the SQLite API directly is
> feasible. However, for SQLite wrappers for other languages like Python or
> Lua, this might not work out.
>
> Regards,
>
> Ulrich
> _______________________________________________
> sqlite-users mailing list
> [email protected]
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users