269 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			269 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE html>
 | |
| <html><head>
 | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0">
 | |
| <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 | |
| <link href="../sqlite.css" rel="stylesheet">
 | |
| <title>Setting The Result Of An SQL Function</title>
 | |
| <!-- path=../ -->
 | |
| </head>
 | |
| <body>
 | |
| <div class=nosearch>
 | |
| <a href="../index.html">
 | |
| <img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
 | |
| </a>
 | |
| <div><!-- IE hack to prevent disappearing logo --></div>
 | |
| <div class="tagline desktoponly">
 | |
| Small. Fast. Reliable.<br>Choose any three.
 | |
| </div>
 | |
| <div class="menu mainmenu">
 | |
| <ul>
 | |
| <li><a href="../index.html">Home</a>
 | |
| <li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
 | |
| <li class='wideonly'><a href='../about.html'>About</a>
 | |
| <li class='desktoponly'><a href="../docs.html">Documentation</a>
 | |
| <li class='desktoponly'><a href="../download.html">Download</a>
 | |
| <li class='wideonly'><a href='../copyright.html'>License</a>
 | |
| <li class='desktoponly'><a href="../support.html">Support</a>
 | |
| <li class='desktoponly'><a href="../prosupport.html">Purchase</a>
 | |
| <li class='search' id='search_menubutton'>
 | |
| <a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
 | |
| </ul>
 | |
| </div>
 | |
| <div class="menu submenu" id="submenu">
 | |
| <ul>
 | |
| <li><a href='../about.html'>About</a>
 | |
| <li><a href='../docs.html'>Documentation</a>
 | |
| <li><a href='../download.html'>Download</a>
 | |
| <li><a href='../support.html'>Support</a>
 | |
| <li><a href='../prosupport.html'>Purchase</a>
 | |
| </ul>
 | |
| </div>
 | |
| <div class="searchmenu" id="searchmenu">
 | |
| <form method="GET" action="../search">
 | |
| <select name="s" id="searchtype">
 | |
| <option value="d">Search Documentation</option>
 | |
| <option value="c">Search Changelog</option>
 | |
| </select>
 | |
| <input type="text" name="q" id="searchbox" value="">
 | |
| <input type="submit" value="Go">
 | |
| </form>
 | |
| </div>
 | |
| </div>
 | |
| <script>
 | |
| function toggle_div(nm) {
 | |
| var w = document.getElementById(nm);
 | |
| if( w.style.display=="block" ){
 | |
| w.style.display = "none";
 | |
| }else{
 | |
| w.style.display = "block";
 | |
| }
 | |
| }
 | |
| function toggle_search() {
 | |
| var w = document.getElementById("searchmenu");
 | |
| if( w.style.display=="block" ){
 | |
| w.style.display = "none";
 | |
| } else {
 | |
| w.style.display = "block";
 | |
| setTimeout(function(){
 | |
| document.getElementById("searchbox").focus()
 | |
| }, 30);
 | |
| }
 | |
| }
 | |
| function div_off(nm){document.getElementById(nm).style.display="none";}
 | |
| window.onbeforeunload = function(e){div_off("submenu");}
 | |
| /* Disable the Search feature if we are not operating from CGI, since */
 | |
| /* Search is accomplished using CGI and will not work without it. */
 | |
| if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
 | |
| document.getElementById("search_menubutton").style.display = "none";
 | |
| }
 | |
| /* Used by the Hide/Show button beside syntax diagrams, to toggle the */
 | |
| function hideorshow(btn,obj){
 | |
| var x = document.getElementById(obj);
 | |
| var b = document.getElementById(btn);
 | |
| if( x.style.display!='none' ){
 | |
| x.style.display = 'none';
 | |
| b.innerHTML='show';
 | |
| }else{
 | |
| x.style.display = '';
 | |
| b.innerHTML='hide';
 | |
| }
 | |
| return false;
 | |
| }
 | |
| </script>
 | |
| </div>
 | |
| <!-- keywords: sqlite3_result_blob sqlite3_result_blob64 sqlite3_result_double sqlite3_result_error sqlite3_result_error16 sqlite3_result_error_code sqlite3_result_error_nomem sqlite3_result_error_toobig sqlite3_result_int sqlite3_result_int64 sqlite3_result_null sqlite3_result_pointer sqlite3_result_text sqlite3_result_text16 sqlite3_result_text16be sqlite3_result_text16le sqlite3_result_text64 sqlite3_result_value sqlite3_result_zeroblob sqlite3_result_zeroblob64 -->
 | |
| <div class=nosearch>
 | |
| <a href="intro.html"><h2>SQLite C Interface</h2></a>
 | |
| <h2>Setting The Result Of An SQL Function</h2>
 | |
| </div>
 | |
| <blockquote><pre>
 | |
| void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*));
 | |
| void sqlite3_result_blob64(sqlite3_context*,const void*,
 | |
|                            sqlite3_uint64,void(*)(void*));
 | |
| void sqlite3_result_double(sqlite3_context*, double);
 | |
| void sqlite3_result_error(sqlite3_context*, const char*, int);
 | |
| void sqlite3_result_error16(sqlite3_context*, const void*, int);
 | |
| void sqlite3_result_error_toobig(sqlite3_context*);
 | |
| void sqlite3_result_error_nomem(sqlite3_context*);
 | |
| void sqlite3_result_error_code(sqlite3_context*, int);
 | |
| void sqlite3_result_int(sqlite3_context*, int);
 | |
| void sqlite3_result_int64(sqlite3_context*, sqlite3_int64);
 | |
| void sqlite3_result_null(sqlite3_context*);
 | |
| void sqlite3_result_text(sqlite3_context*, const char*, int, void(*)(void*));
 | |
| void sqlite3_result_text64(sqlite3_context*, const char*,sqlite3_uint64,
 | |
|                            void(*)(void*), unsigned char encoding);
 | |
| void sqlite3_result_text16(sqlite3_context*, const void*, int, void(*)(void*));
 | |
| void sqlite3_result_text16le(sqlite3_context*, const void*, int,void(*)(void*));
 | |
| void sqlite3_result_text16be(sqlite3_context*, const void*, int,void(*)(void*));
 | |
| void sqlite3_result_value(sqlite3_context*, sqlite3_value*);
 | |
| void sqlite3_result_pointer(sqlite3_context*, void*,const char*,void(*)(void*));
 | |
| void sqlite3_result_zeroblob(sqlite3_context*, int n);
 | |
| int sqlite3_result_zeroblob64(sqlite3_context*, sqlite3_uint64 n);
 | |
| </pre></blockquote>
 | |
| <p>
 | |
| These routines are used by the xFunc or xFinal callbacks that
 | |
| implement SQL functions and aggregates.  See
 | |
| <a href="../c3ref/create_function.html">sqlite3_create_function()</a> and <a href="../c3ref/create_function.html">sqlite3_create_function16()</a>
 | |
| for additional information.</p>
 | |
| 
 | |
| <p>These functions work very much like the <a href="../c3ref/bind_blob.html">parameter binding</a> family of
 | |
| functions used to bind values to host parameters in prepared statements.
 | |
| Refer to the <a href="../c3ref/bind_blob.html">SQL parameter</a> documentation for additional information.</p>
 | |
| 
 | |
| <p>The sqlite3_result_blob() interface sets the result from
 | |
| an application-defined function to be the BLOB whose content is pointed
 | |
| to by the second parameter and which is N bytes long where N is the
 | |
| third parameter.</p>
 | |
| 
 | |
| <p>The sqlite3_result_zeroblob(C,N) and sqlite3_result_zeroblob64(C,N)
 | |
| interfaces set the result of the application-defined function to be
 | |
| a BLOB containing all zero bytes and N bytes in size.</p>
 | |
| 
 | |
| <p>The sqlite3_result_double() interface sets the result from
 | |
| an application-defined function to be a floating point value specified
 | |
| by its 2nd argument.</p>
 | |
| 
 | |
| <p>The sqlite3_result_error() and sqlite3_result_error16() functions
 | |
| cause the implemented SQL function to throw an exception.
 | |
| SQLite uses the string pointed to by the
 | |
| 2nd parameter of sqlite3_result_error() or sqlite3_result_error16()
 | |
| as the text of an error message.  SQLite interprets the error
 | |
| message string from sqlite3_result_error() as UTF-8. SQLite
 | |
| interprets the string from sqlite3_result_error16() as UTF-16 using
 | |
| the same <a href="../c3ref/bind_blob.html#byteorderdeterminationrules">byte-order determination rules</a> as <a href="../c3ref/bind_blob.html">sqlite3_bind_text16()</a>.
 | |
| If the third parameter to sqlite3_result_error()
 | |
| or sqlite3_result_error16() is negative then SQLite takes as the error
 | |
| message all text up through the first zero character.
 | |
| If the third parameter to sqlite3_result_error() or
 | |
| sqlite3_result_error16() is non-negative then SQLite takes that many
 | |
| bytes (not characters) from the 2nd parameter as the error message.
 | |
| The sqlite3_result_error() and sqlite3_result_error16()
 | |
| routines make a private copy of the error message text before
 | |
| they return.  Hence, the calling function can deallocate or
 | |
| modify the text after they return without harm.
 | |
| The sqlite3_result_error_code() function changes the error code
 | |
| returned by SQLite as a result of an error in a function.  By default,
 | |
| the error code is SQLITE_ERROR.  A subsequent call to sqlite3_result_error()
 | |
| or sqlite3_result_error16() resets the error code to SQLITE_ERROR.</p>
 | |
| 
 | |
| <p>The sqlite3_result_error_toobig() interface causes SQLite to throw an
 | |
| error indicating that a string or BLOB is too long to represent.</p>
 | |
| 
 | |
| <p>The sqlite3_result_error_nomem() interface causes SQLite to throw an
 | |
| error indicating that a memory allocation failed.</p>
 | |
| 
 | |
| <p>The sqlite3_result_int() interface sets the return value
 | |
| of the application-defined function to be the 32-bit signed integer
 | |
| value given in the 2nd argument.
 | |
| The sqlite3_result_int64() interface sets the return value
 | |
| of the application-defined function to be the 64-bit signed integer
 | |
| value given in the 2nd argument.</p>
 | |
| 
 | |
| <p>The sqlite3_result_null() interface sets the return value
 | |
| of the application-defined function to be NULL.</p>
 | |
| 
 | |
| <p>The sqlite3_result_text(), sqlite3_result_text16(),
 | |
| sqlite3_result_text16le(), and sqlite3_result_text16be() interfaces
 | |
| set the return value of the application-defined function to be
 | |
| a text string which is represented as UTF-8, UTF-16 native byte order,
 | |
| UTF-16 little endian, or UTF-16 big endian, respectively.
 | |
| The sqlite3_result_text64() interface sets the return value of an
 | |
| application-defined function to be a text string in an encoding
 | |
| specified by the fifth (and last) parameter, which must be one
 | |
| of <a href="../c3ref/c_any.html">SQLITE_UTF8</a>, <a href="../c3ref/c_any.html">SQLITE_UTF16</a>, <a href="../c3ref/c_any.html">SQLITE_UTF16BE</a>, or <a href="../c3ref/c_any.html">SQLITE_UTF16LE</a>.
 | |
| SQLite takes the text result from the application from
 | |
| the 2nd parameter of the sqlite3_result_text* interfaces.
 | |
| If the 3rd parameter to the sqlite3_result_text* interfaces
 | |
| is negative, then SQLite takes result text from the 2nd parameter
 | |
| through the first zero character.
 | |
| If the 3rd parameter to the sqlite3_result_text* interfaces
 | |
| is non-negative, then as many bytes (not characters) of the text
 | |
| pointed to by the 2nd parameter are taken as the application-defined
 | |
| function result.  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.  If any NUL characters occur
 | |
| in the string at a byte offset that is less than the value of the 3rd
 | |
| parameter, then the resulting string will contain embedded NULs and the
 | |
| result of expressions operating on strings with embedded NULs is undefined.
 | |
| If the 4th parameter to the sqlite3_result_text* interfaces
 | |
| or sqlite3_result_blob is a non-NULL pointer, then SQLite calls that
 | |
| function as the destructor on the text or BLOB result when it has
 | |
| finished using that result.
 | |
| 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 of the parameter nor call a destructor on the content
 | |
| when it has finished using that result.
 | |
| If the 4th parameter to the sqlite3_result_text* interfaces
 | |
| or sqlite3_result_blob is the special constant SQLITE_TRANSIENT
 | |
| then SQLite makes a copy of the result into space obtained
 | |
| from <a href="../c3ref/free.html">sqlite3_malloc()</a> before it returns.</p>
 | |
| 
 | |
| <p>For the sqlite3_result_text16(), sqlite3_result_text16le(), and
 | |
| sqlite3_result_text16be() routines, and for sqlite3_result_text64()
 | |
| when the encoding is not UTF8, if the input UTF16 begins with a
 | |
| byte-order mark (BOM, U+FEFF) then the BOM is removed from the
 | |
| string and the rest of the string is interpreted according to the
 | |
| byte-order specified by the BOM.  The byte-order specified by
 | |
| the BOM at the beginning of the text overrides the byte-order
 | |
| specified by the interface procedure.  So, for example, if
 | |
| sqlite3_result_text16le() is invoked with text that begins
 | |
| with bytes 0xfe, 0xff (a big-endian byte-order mark) then the
 | |
| first two bytes of input are skipped and the remaining input
 | |
| is interpreted as UTF16BE text.</p>
 | |
| 
 | |
| <p>For UTF16 input text to the sqlite3_result_text16(),
 | |
| sqlite3_result_text16be(), sqlite3_result_text16le(), and
 | |
| sqlite3_result_text64() routines, if the text contains invalid
 | |
| UTF16 characters, the invalid characters might be converted
 | |
| into the unicode replacement character, U+FFFD.</p>
 | |
| 
 | |
| <p>The sqlite3_result_value() interface sets the result of
 | |
| the application-defined function to be a copy of the
 | |
| <a href="../c3ref/value.html">unprotected sqlite3_value</a> object specified by the 2nd parameter.  The
 | |
| sqlite3_result_value() interface makes a copy of the <a href="../c3ref/value.html">sqlite3_value</a>
 | |
| so that the <a href="../c3ref/value.html">sqlite3_value</a> specified in the parameter may change or
 | |
| be deallocated after sqlite3_result_value() returns without harm.
 | |
| A <a href="../c3ref/value.html">protected sqlite3_value</a> object may always be used where an
 | |
| <a href="../c3ref/value.html">unprotected sqlite3_value</a> object is required, so either
 | |
| kind of <a href="../c3ref/value.html">sqlite3_value</a> object can be used with this interface.</p>
 | |
| 
 | |
| <p>The sqlite3_result_pointer(C,P,T,D) interface sets the result to an
 | |
| SQL NULL value, just like <a href="../c3ref/result_blob.html">sqlite3_result_null(C)</a>, except that it
 | |
| also associates the host-language pointer P or type T with that
 | |
| NULL value such that the pointer can be retrieved within an
 | |
| <a href="../appfunc.html">application-defined SQL function</a> using <a href="../c3ref/value_blob.html">sqlite3_value_pointer()</a>.
 | |
| If the D parameter is not NULL, then it is a pointer to a destructor
 | |
| for the P parameter.  SQLite invokes D with P as its only argument
 | |
| when SQLite is finished with P.  The T parameter should be a static
 | |
| string and preferably a string literal. The sqlite3_result_pointer()
 | |
| routine is part of the <a href="../bindptr.html">pointer passing interface</a> added for SQLite 3.20.0.</p>
 | |
| 
 | |
| <p>If these routines are called from within the different thread
 | |
| than the one containing the application-defined function that received
 | |
| the <a href="../c3ref/context.html">sqlite3_context</a> pointer, the results are undefined.
 | |
| </p><p>See also lists of
 | |
|   <a href="objlist.html">Objects</a>,
 | |
|   <a href="constlist.html">Constants</a>, and
 | |
|   <a href="funclist.html">Functions</a>.</p>
 |