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

I found a documentation typo and have a question about SQLITE_STATIC. 

The documentation for sqlite3_result_text says, 

        "If the 3rd parameter is non-negative, then it must be the byte
offset into the string where the NUL terminator would appear if the
string where NUL terminated." 

I believe the intent is subjunctive, 

        "if the string were NUL terminated".  

meaning no NUL is required.  It continues: 

        "If the 4th parameter to the sqlite3_result_text* interfaces or
to sqlite3_result_blob is the special constant SQLITE_STATIC, then
SQLite assumes that the text or BLOB result is in constant space and
does not copy the content...."

My data are static (a read-only mmap'ed file), and the columns are not
null-terminated.  

The documentation for the usual column-reading function
sqlite3_column_text() says it always returns a null-terminated string: 

        "Strings returned by sqlite3_column_text() and
sqlite3_column_text16(), even empty strings, are always
zero-terminated."

According to the above, the user gets a null-terminated string from
static data in a virtual table that is not copied and need not contain a
NUL terminator. That seems unlikely.  I would think either a copy is
made or the supplied static data must end in NUL. 

If sqlite3_result_text() is provided data with a nonzero length
marked as SQLITE_STATIC, where does the NUL come from that is returned
to the application by sqlite3_column_text()? 

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

Reply via email to