1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
3
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
4
<title>Obtaining SQL Function Parameter Values</title>
5
<style type="text/css">
8
font-family: Verdana, sans-serif;
13
a:visited { color: #734559 }
15
.logo { position:absolute; margin:3px; }
31
.toolbar a { color: white; text-decoration: none; padding: 6px 12px; }
32
.toolbar a:visited { color: white; }
33
.toolbar a:hover { color: #044a64; background: white; }
35
.content { margin: 5%; }
36
.content dt { font-weight:bold; }
37
.content dd { margin-bottom: 25px; margin-left:20%; }
38
.content ul { padding:0px; padding-left: 15px; margin:0px; }
41
.se { background: url(../images/se.gif) 100% 100% no-repeat #044a64}
42
.sw { background: url(../images/sw.gif) 0% 100% no-repeat }
43
.ne { background: url(../images/ne.gif) 100% 0% no-repeat }
44
.nw { background: url(../images/nw.gif) 0% 0% no-repeat }
46
/* Things for "fancyformat" documents start here. */
47
.fancy img+p {font-style:italic}
48
.fancy .codeblock i { color: darkblue; }
49
.fancy h1,.fancy h2,.fancy h3,.fancy h4 {font-weight:normal;color:#044a64}
50
.fancy h2 { margin-left: 10px }
51
.fancy h3 { margin-left: 20px }
52
.fancy h4 { margin-left: 30px }
53
.fancy th {white-space:nowrap;text-align:left;border-bottom:solid 1px #444}
54
.fancy th, .fancy td {padding: 0.2em 1ex; vertical-align:top}
55
.fancy #toc a { color: darkblue ; text-decoration: none }
56
.fancy .todo { color: #AA3333 ; font-style : italic }
57
.fancy .todo:before { content: 'TODO:' }
58
.fancy p.todo { border: solid #AA3333 1px; padding: 1ex }
59
.fancy img { display:block; }
60
.fancy :link:hover, .fancy :visited:hover { background: wheat }
61
.fancy p,.fancy ul,.fancy ol { margin: 1em 5ex }
62
.fancy li p { margin: 1em 0 }
63
/* End of "fancyformat" specific rules. */
69
<div><!-- container div to satisfy validator -->
71
<a href="../index.html">
72
<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite Logo"
74
<div><!-- IE hack to prevent disappearing logo--></div>
75
<div class="tagline">Small. Fast. Reliable.<br>Choose any three.</div>
77
<table width=100% style="clear:both"><tr><td>
78
<div class="se"><div class="sw"><div class="ne"><div class="nw">
79
<table width=100% style="padding:0;margin:0;cell-spacing:0"><tr>
82
<a href="../about.html">About</a>
83
<a href="../sitemap.html">Sitemap</a>
84
<a href="../docs.html">Documentation</a>
85
<a href="../download.html">Download</a>
86
<a href="../copyright.html">License</a>
87
<a href="../news.html">News</a>
88
<a href="../support.html">Support</a>
91
gMsg = "Search SQLite Docs..."
92
function entersearch() {
93
var q = document.getElementById("q");
94
if( q.value == gMsg ) { q.value = "" }
95
q.style.color = "black"
96
q.style.fontStyle = "normal"
98
function leavesearch() {
99
var q = document.getElementById("q");
100
if( q.value == "" ) {
102
q.style.color = "#044a64"
103
q.style.fontStyle = "italic"
108
<div style="padding:0 1em 0px 0;white-space:nowrap">
109
<form name=f method="GET" action="http://www.sqlite.org/search">
110
<input id=q name=q type=text
111
onfocus="entersearch()" onblur="leavesearch()" style="width:24ex;padding:1px 1ex; border:solid white 1px; font-size:0.9em ; font-style:italic;color:#044a64;" value="Search SQLite Docs...">
112
<input type=submit value="Go" style="border:solid white 1px;background-color:#044a64;color:white;font-size:0.9em;padding:0 1ex">
116
</div></div></div></div>
118
<div class=startsearch></div>
120
<a href="intro.html"><h2>SQLite C Interface</h2></a><h2>Obtaining SQL Function Parameter Values</h2><blockquote><pre>const void *sqlite3_value_blob(sqlite3_value*);
121
int sqlite3_value_bytes(sqlite3_value*);
122
int sqlite3_value_bytes16(sqlite3_value*);
123
double sqlite3_value_double(sqlite3_value*);
124
int sqlite3_value_int(sqlite3_value*);
125
sqlite3_int64 sqlite3_value_int64(sqlite3_value*);
126
const unsigned char *sqlite3_value_text(sqlite3_value*);
127
const void *sqlite3_value_text16(sqlite3_value*);
128
const void *sqlite3_value_text16le(sqlite3_value*);
129
const void *sqlite3_value_text16be(sqlite3_value*);
130
int sqlite3_value_type(sqlite3_value*);
131
int sqlite3_value_numeric_type(sqlite3_value*);
132
</pre></blockquote><p>
133
The C-language implementation of SQL functions and aggregates uses
134
this set of interface routines to access the parameter values on
135
the function or aggregate.</p>
137
<p>The xFunc (for scalar functions) or xStep (for aggregates) parameters
138
to <a href="../c3ref/create_function.html">sqlite3_create_function()</a> and <a href="../c3ref/create_function.html">sqlite3_create_function16()</a>
139
define callbacks that implement the SQL functions and aggregates.
140
The 3rd parameter to these callbacks is an array of pointers to
141
<a href="../c3ref/value.html">protected sqlite3_value</a> objects. There is one <a href="../c3ref/value.html">sqlite3_value</a> object for
142
each parameter to the SQL function. These routines are used to
143
extract values from the <a href="../c3ref/value.html">sqlite3_value</a> objects.</p>
145
<p>These routines work only with <a href="../c3ref/value.html">protected sqlite3_value</a> objects.
146
Any attempt to use these routines on an <a href="../c3ref/value.html">unprotected sqlite3_value</a>
147
object results in undefined behavior.</p>
149
<p>These routines work just like the corresponding <a href="../c3ref/column_blob.html">column access functions</a>
150
except that these routines take a single <a href="../c3ref/value.html">protected sqlite3_value</a> object
151
pointer instead of a <a href="../c3ref/stmt.html">sqlite3_stmt*</a> pointer and an integer column number.</p>
153
<p>The sqlite3_value_text16() interface extracts a UTF-16 string
154
in the native byte-order of the host machine. The
155
sqlite3_value_text16be() and sqlite3_value_text16le() interfaces
156
extract UTF-16 strings as big-endian and little-endian respectively.</p>
158
<p>The sqlite3_value_numeric_type() interface attempts to apply
159
numeric affinity to the value. This means that an attempt is
160
made to convert the value to an integer or floating point. If
161
such a conversion is possible without loss of information (in other
162
words, if the value is a string that looks like a number)
163
then the conversion is performed. Otherwise no conversion occurs.
164
The <a href="../c3ref/c_blob.html">datatype</a> after conversion is returned.</p>
166
<p>Please pay particular attention to the fact that the pointer returned
167
from <a href="../c3ref/value_blob.html">sqlite3_value_blob()</a>, <a href="../c3ref/value_blob.html">sqlite3_value_text()</a>, or
168
<a href="../c3ref/value_blob.html">sqlite3_value_text16()</a> can be invalidated by a subsequent call to
169
<a href="../c3ref/value_blob.html">sqlite3_value_bytes()</a>, <a href="../c3ref/value_blob.html">sqlite3_value_bytes16()</a>, <a href="../c3ref/value_blob.html">sqlite3_value_text()</a>,
170
or <a href="../c3ref/value_blob.html">sqlite3_value_text16()</a>.</p>
172
<p>These routines must be called from the same thread as
173
the SQL function that supplied the <a href="../c3ref/value.html">sqlite3_value*</a> parameters.
174
</p><p>See also lists of
175
<a href="objlist.html">Objects</a>,
176
<a href="constlist.html">Constants</a>, and
177
<a href="funclist.html">Functions</a>.</p>