-C Random\sJS\scleanups\sand\sdocs.
-D 2025-07-01T17:38:08.691
+C Add\sAPI\sdocs\sfor\ssqlite3_column_text_v2()\sand\ssqlite3_column_blob_v2().
+D 2025-07-01T18:36:11.756
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
F src/select.c 882d739e0d5e6c7a8b46a3cca3ada37fe1a56301f1360d6b141312c666bbe482
F src/shell.c.in 4f14a1f5196b6006abc8e73cc8fd6c1a62cf940396f8ba909d6711f35f074bb6
-F src/sqlite.h.in b8acddc332b0ba20f7e46ada5e99156303ec7470ecafcda4dbc59285e4658bab
+F src/sqlite.h.in 54824d50c69df8f81502fcebc23d407ee09cb7f7ebd951be72b670e6f31298c4
F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
F src/sqlite3ext.h 0bfd049bb2088cc44c2ad54f2079d1c6e43091a4e1ce8868779b75f6c1484f1e
F src/sqliteInt.h 21c089759415895c86220d35c22cd17fdc6ca27653e1ec0c744d1e6808d0545a
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 4aab781d2abc64a39c53acd0faf6d60bb38afcce42f25bc8c0fa52b73df05312
-R 8e06e1907693b695373176fe3fdc205a
+P 5a2734bbf8b471fa27f8f4b687e4d24f64c7663b823908f1ee8cd21bb93beb98
+R dae4fce04bcce555b325cd0b17ed5060
U stephan
-Z e3cc89ebfecaca5d22dd5efe42afadb1
+Z 79b34d6cd08aaec438188d7aafa77f7b
# Remove this line to create a well-formed Fossil manifest.
** <b>Summary:</b>
** <blockquote><table border=0 cellpadding=0 cellspacing=0>
** <tr><td><b>sqlite3_column_blob</b><td>→<td>BLOB result
+** <tr><td><b>sqlite3_column_blob_v2</b><td>→<td>BLOB result
** <tr><td><b>sqlite3_column_double</b><td>→<td>REAL result
** <tr><td><b>sqlite3_column_int</b><td>→<td>32-bit INTEGER result
** <tr><td><b>sqlite3_column_int64</b><td>→<td>64-bit INTEGER result
** <tr><td><b>sqlite3_column_text</b><td>→<td>UTF-8 TEXT result
+** <tr><td><b>sqlite3_column_text_v2</b><td>→<td>UTF-8 TEXT result
** <tr><td><b>sqlite3_column_text16</b><td>→<td>UTF-16 TEXT result
** <tr><td><b>sqlite3_column_value</b><td>→<td>The result as an
** [sqlite3_value|unprotected sqlite3_value] object.
** ^The number of columns in the result can be determined using
** [sqlite3_column_count()].
**
+** ^The sqlite3_column_text_v2() and sqlite3_column_blob_v2()
+** interfaces deliver most of their output via their 3rd, 4th, and 5th
+** output-pointer arguments. The first is an output pointer to the
+** resulting memory (the same pointer which would be returned by their
+** non-v2 counterparts). The second is an integer pointer into which,
+** if it is not NULL, the length of the memory, in bytes, is
+** written. The 5th argument is an integer pointer which, if not NULL,
+** gets set to the [SQLITE_INTEGER | column's SQL type]. On success
+** these interfaces return 0. On error they do not modify any of their
+** output pointers and return SQLITE_NOMEM on allocation error,
+** SQLITE_MISUSE if either their first or third arguments are NULL,
+** and SQLITE_RANGE if the given column index is out of range.
+**
** If the SQL statement does not currently point to a valid row, or if the
** column index is out of range, the result is undefined.
** These routines may only be called when the most recent call to
** are called from a different thread while any of these routines
** are pending, then the results are undefined.
**
-** The first six interfaces (_blob, _double, _int, _int64, _text, and _text16)
+** The interfaces (_blob, _double, _int, _int64, _text, and _text16)
** each return the value of a result column in a specific data format. If
** the result column is not initially in the requested format (for example,
** if the query returns an integer but the sqlite3_column_text() interface
** is used to extract the value) then an automatic type conversion is performed.
**
+** ^The interfaces (_text_v2, _blob_v2) interally function identically
+** to their non-_v2 counterparts but have different interfaces. Their
+** internal behaviors are the same for purposes of the following
+** documentation except where specifically noted otherwise.
+**
** ^The sqlite3_column_type() routine returns the
** [SQLITE_INTEGER | datatype code] for the initial data type
** of the result column. ^The returned value is one of [SQLITE_INTEGER],
** The return value of sqlite3_column_type() can be used to decide which
** of the first six interface should be used to extract the column value.
** The value returned by sqlite3_column_type() is only meaningful if no
-** automatic type conversions have occurred for the value in question.
+** automatic type conversions have occurred for the value in question.
** After a type conversion, the result of calling sqlite3_column_type()
** is undefined, though harmless. Future
** versions of SQLite may change the behavior of sqlite3_column_type()
** sqlite3_column_bytes16(), and do not mix calls to sqlite3_column_text16()
** with calls to sqlite3_column_bytes().
**
+** The sqlite3_column_text_v2() and sqlite3_column_blob_v2()
+** interfaces optionally return the byte length and column data type
+** via output pointers.
+**
** ^The pointers returned are valid until a type conversion occurs as
** described above, or until [sqlite3_step()] or [sqlite3_reset()] or
** [sqlite3_finalize()] is called. ^The memory space used to hold strings
**
** <ul>
** <li> sqlite3_column_blob()
+** <li> sqlite3_column_blob_v2()
** <li> sqlite3_column_text()
+** <li> sqlite3_column_text_v2()
** <li> sqlite3_column_text16()
** <li> sqlite3_column_bytes()
** <li> sqlite3_column_bytes16()
** by invoking the [sqlite3_errcode()] immediately after the suspect
** return value is obtained and before any
** other SQLite interface is called on the same [database connection].
+**
+** The previous paragraph does not apply to the text_v2 and blob_v2
+** interfaces, which return SQLITE_NOMEM to the client for
+** out-of-memory conditions.
*/
const void *sqlite3_column_blob(sqlite3_stmt*, int iCol);
int sqlite3_column_blob_v2(sqlite3_stmt*, int iCol, const void **, int*, int*);