On 2 Dec 2005, at 13:07, [EMAIL PROTECTED] wrote:

Right. So it's retreival that's the issue when this occurs, because I
do:

   int col_type = sqlite3_column_type(stmt, i);

and it returns SQLITE_TEXT, so I then do:

   val = (char*)sqlite3_column_text(stmt, i);

which doesn't return a length for me.

Would sqlite3_column_bytes() return the right length there rather than
me doing strlen() on the resulting data?


yes it will.

OK, so 1.11 is on CPAN which fixes this. However I have another bug report about this not working for user defined functions, where I do this:

        s = SvPV(result, len);
        sqlite3_result_text( context, s, len, SQLITE_TRANSIENT );

(SvPV is a macro that retrieves a char* from result, and as a side effect sets len to the length of the string in bytes, even if it contains nuls).

Is this maybe a bug in sqlite3_result_text()? I could patch it to do:

       if (memchr(s, 0, len)) {
           /* if the result contains NUL(s) treat it as a blob */
           sqlite3_result_blob(context, s, len, SQLITE_TRANSIENT );
       }
       else {
           sqlite3_result_text( context, s, len, SQLITE_TRANSIENT );
       }

But that seems a waste of resources if it's a bug in sqlite3_result_text().

Matt.


______________________________________________________________________
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email ______________________________________________________________________

Reply via email to