blob: e1ad9a36cc0598e8fb425f8ab7d1602dfcb4fbd0 [file] [log] [blame]
drhdc04c582002-02-24 01:55:15 +00001/*
2** 2002 February 23
3**
4** The author disclaims copyright to this source code. In place of
5** a legal notice, here is a blessing:
6**
7** May you do good and not evil.
8** May you find forgiveness for yourself and forgive others.
9** May you share freely, never taking more than you give.
10**
11*************************************************************************
12** This file contains the C functions that implement various SQL
13** functions of SQLite.
14**
15** There is only one exported symbol in this file - the function
16** sqliteRegisterBuildinFunctions() found at the bottom of the file.
17** All other code has file scope.
drhdc04c582002-02-24 01:55:15 +000018*/
drhb659e9b2005-01-28 01:29:08 +000019#include "sqliteInt.h"
drhd3a149e2002-02-24 17:12:53 +000020#include <stdlib.h>
drh0bce8352002-02-28 00:41:10 +000021#include <assert.h>
danielk197788208052004-05-25 01:13:20 +000022#include "vdbeInt.h"
drh0bce8352002-02-28 00:41:10 +000023
drh55ef4d92005-08-14 01:20:37 +000024/*
25** Return the collating function associated with a function.
26*/
danielk1977dc1bdc42004-06-11 10:51:27 +000027static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
28 return context->pColl;
29}
30
drh0bce8352002-02-28 00:41:10 +000031/*
32** Implementation of the non-aggregate min() and max() functions
33*/
drhf9b596e2004-05-26 16:54:42 +000034static void minmaxFunc(
35 sqlite3_context *context,
36 int argc,
37 sqlite3_value **argv
38){
drh0bce8352002-02-28 00:41:10 +000039 int i;
drh268380c2004-02-25 13:47:31 +000040 int mask; /* 0 for min() or 0xffffffff for max() */
drhf9b596e2004-05-26 16:54:42 +000041 int iBest;
danielk1977dc1bdc42004-06-11 10:51:27 +000042 CollSeq *pColl;
drh0bce8352002-02-28 00:41:10 +000043
drh65595cd2009-02-02 16:32:55 +000044 assert( argc>1 );
drhc44af712004-09-02 15:53:56 +000045 mask = sqlite3_user_data(context)==0 ? 0 : -1;
danielk1977dc1bdc42004-06-11 10:51:27 +000046 pColl = sqlite3GetFuncCollSeq(context);
47 assert( pColl );
danielk1977c572ef72004-05-27 09:28:41 +000048 assert( mask==-1 || mask==0 );
drhf9b596e2004-05-26 16:54:42 +000049 iBest = 0;
drh9c054832004-05-31 18:51:57 +000050 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhf9b596e2004-05-26 16:54:42 +000051 for(i=1; i<argc; i++){
drh9c054832004-05-31 18:51:57 +000052 if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
danielk1977dc1bdc42004-06-11 10:51:27 +000053 if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
drh65595cd2009-02-02 16:32:55 +000054 testcase( mask==0 );
drhf9b596e2004-05-26 16:54:42 +000055 iBest = i;
drh0bce8352002-02-28 00:41:10 +000056 }
57 }
drhf4479502004-05-27 03:12:53 +000058 sqlite3_result_value(context, argv[iBest]);
drh0bce8352002-02-28 00:41:10 +000059}
drh0bce8352002-02-28 00:41:10 +000060
drh268380c2004-02-25 13:47:31 +000061/*
62** Return the type of the argument.
63*/
drhf9b596e2004-05-26 16:54:42 +000064static void typeofFunc(
65 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +000066 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +000067 sqlite3_value **argv
68){
danielk197735bb9d02004-05-24 12:55:54 +000069 const char *z = 0;
danielk197762c14b32008-11-19 09:05:26 +000070 UNUSED_PARAMETER(NotUsed);
danielk197735bb9d02004-05-24 12:55:54 +000071 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +000072 case SQLITE_INTEGER: z = "integer"; break;
73 case SQLITE_TEXT: z = "text"; break;
74 case SQLITE_FLOAT: z = "real"; break;
75 case SQLITE_BLOB: z = "blob"; break;
drh65595cd2009-02-02 16:32:55 +000076 default: z = "null"; break;
danielk197735bb9d02004-05-24 12:55:54 +000077 }
danielk1977d8123362004-06-12 09:25:12 +000078 sqlite3_result_text(context, z, -1, SQLITE_STATIC);
drh0bce8352002-02-28 00:41:10 +000079}
80
drh5708d2d2005-06-22 10:53:59 +000081
82/*
drh0bce8352002-02-28 00:41:10 +000083** Implementation of the length() function
84*/
drhf9b596e2004-05-26 16:54:42 +000085static void lengthFunc(
86 sqlite3_context *context,
87 int argc,
88 sqlite3_value **argv
89){
drh0bce8352002-02-28 00:41:10 +000090 int len;
91
92 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +000093 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +000094 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +000095 case SQLITE_BLOB:
96 case SQLITE_INTEGER:
97 case SQLITE_FLOAT: {
drhf4479502004-05-27 03:12:53 +000098 sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
drhf9b596e2004-05-26 16:54:42 +000099 break;
100 }
drh9c054832004-05-31 18:51:57 +0000101 case SQLITE_TEXT: {
drh2646da72005-12-09 20:02:05 +0000102 const unsigned char *z = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +0000103 if( z==0 ) return;
drh4a919112007-05-15 11:55:09 +0000104 len = 0;
105 while( *z ){
106 len++;
107 SQLITE_SKIP_UTF8(z);
108 }
drhf4479502004-05-27 03:12:53 +0000109 sqlite3_result_int(context, len);
drhf9b596e2004-05-26 16:54:42 +0000110 break;
111 }
112 default: {
113 sqlite3_result_null(context);
114 break;
115 }
116 }
drh0bce8352002-02-28 00:41:10 +0000117}
118
119/*
120** Implementation of the abs() function
121*/
danielk19770ae8b832004-05-25 12:05:56 +0000122static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +0000123 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000124 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000125 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000126 case SQLITE_INTEGER: {
danielk1977f93bbbe2004-05-27 10:30:52 +0000127 i64 iVal = sqlite3_value_int64(argv[0]);
drh52fc8492006-02-23 21:43:55 +0000128 if( iVal<0 ){
129 if( (iVal<<1)==0 ){
130 sqlite3_result_error(context, "integer overflow", -1);
131 return;
132 }
133 iVal = -iVal;
134 }
danielk1977f93bbbe2004-05-27 10:30:52 +0000135 sqlite3_result_int64(context, iVal);
drhf9b596e2004-05-26 16:54:42 +0000136 break;
137 }
drh9c054832004-05-31 18:51:57 +0000138 case SQLITE_NULL: {
drhf9b596e2004-05-26 16:54:42 +0000139 sqlite3_result_null(context);
140 break;
141 }
142 default: {
danielk1977f93bbbe2004-05-27 10:30:52 +0000143 double rVal = sqlite3_value_double(argv[0]);
drh52fc8492006-02-23 21:43:55 +0000144 if( rVal<0 ) rVal = -rVal;
danielk1977f93bbbe2004-05-27 10:30:52 +0000145 sqlite3_result_double(context, rVal);
drhf9b596e2004-05-26 16:54:42 +0000146 break;
147 }
148 }
drh0bce8352002-02-28 00:41:10 +0000149}
150
151/*
drhf764e6f2007-05-15 01:13:47 +0000152** Implementation of the substr() function.
153**
154** substr(x,p1,p2) returns p2 characters of x[] beginning with p1.
155** p1 is 1-indexed. So substr(x,1,1) returns the first character
156** of x. If x is text, then we actually count UTF-8 characters.
157** If x is a blob, then we count bytes.
158**
159** If p1 is negative, then we begin abs(p1) from the end of x[].
drh0bce8352002-02-28 00:41:10 +0000160*/
drhf9b596e2004-05-26 16:54:42 +0000161static void substrFunc(
162 sqlite3_context *context,
163 int argc,
164 sqlite3_value **argv
165){
drh2646da72005-12-09 20:02:05 +0000166 const unsigned char *z;
167 const unsigned char *z2;
drh023ae032007-05-08 12:12:16 +0000168 int len;
drhf764e6f2007-05-15 01:13:47 +0000169 int p0type;
drh023ae032007-05-08 12:12:16 +0000170 i64 p1, p2;
drh65595cd2009-02-02 16:32:55 +0000171 int negP2 = 0;
drhf9b596e2004-05-26 16:54:42 +0000172
drh64f31512007-10-12 19:11:55 +0000173 assert( argc==3 || argc==2 );
drh8198d252009-02-01 19:42:37 +0000174 if( sqlite3_value_type(argv[1])==SQLITE_NULL
175 || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL)
176 ){
177 return;
178 }
drhf764e6f2007-05-15 01:13:47 +0000179 p0type = sqlite3_value_type(argv[0]);
drh4adc4cb2009-11-11 20:53:31 +0000180 p1 = sqlite3_value_int(argv[1]);
drhf764e6f2007-05-15 01:13:47 +0000181 if( p0type==SQLITE_BLOB ){
182 len = sqlite3_value_bytes(argv[0]);
183 z = sqlite3_value_blob(argv[0]);
184 if( z==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000185 assert( len==sqlite3_value_bytes(argv[0]) );
drhf764e6f2007-05-15 01:13:47 +0000186 }else{
187 z = sqlite3_value_text(argv[0]);
188 if( z==0 ) return;
drh4a919112007-05-15 11:55:09 +0000189 len = 0;
drh4adc4cb2009-11-11 20:53:31 +0000190 if( p1<0 ){
191 for(z2=z; *z2; len++){
192 SQLITE_SKIP_UTF8(z2);
193 }
drh4a919112007-05-15 11:55:09 +0000194 }
drhf764e6f2007-05-15 01:13:47 +0000195 }
drh64f31512007-10-12 19:11:55 +0000196 if( argc==3 ){
197 p2 = sqlite3_value_int(argv[2]);
drh65595cd2009-02-02 16:32:55 +0000198 if( p2<0 ){
199 p2 = -p2;
200 negP2 = 1;
201 }
drh64f31512007-10-12 19:11:55 +0000202 }else{
drhbb4957f2008-03-20 14:03:29 +0000203 p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH];
drh64f31512007-10-12 19:11:55 +0000204 }
drh0bce8352002-02-28 00:41:10 +0000205 if( p1<0 ){
drh89425d52002-02-28 03:04:48 +0000206 p1 += len;
drh653bc752002-02-28 03:31:10 +0000207 if( p1<0 ){
208 p2 += p1;
drh65595cd2009-02-02 16:32:55 +0000209 if( p2<0 ) p2 = 0;
drh653bc752002-02-28 03:31:10 +0000210 p1 = 0;
211 }
drh0bce8352002-02-28 00:41:10 +0000212 }else if( p1>0 ){
213 p1--;
drh65595cd2009-02-02 16:32:55 +0000214 }else if( p2>0 ){
215 p2--;
drh0bce8352002-02-28 00:41:10 +0000216 }
drh65595cd2009-02-02 16:32:55 +0000217 if( negP2 ){
218 p1 -= p2;
drh4e79c592009-02-01 19:23:32 +0000219 if( p1<0 ){
220 p2 += p1;
221 p1 = 0;
222 }
223 }
drh65595cd2009-02-02 16:32:55 +0000224 assert( p1>=0 && p2>=0 );
drhf764e6f2007-05-15 01:13:47 +0000225 if( p0type!=SQLITE_BLOB ){
drh4a919112007-05-15 11:55:09 +0000226 while( *z && p1 ){
227 SQLITE_SKIP_UTF8(z);
228 p1--;
drhf764e6f2007-05-15 01:13:47 +0000229 }
drh4a919112007-05-15 11:55:09 +0000230 for(z2=z; *z2 && p2; p2--){
231 SQLITE_SKIP_UTF8(z2);
drhf764e6f2007-05-15 01:13:47 +0000232 }
drh1bd10f82008-12-10 21:19:56 +0000233 sqlite3_result_text(context, (char*)z, (int)(z2-z), SQLITE_TRANSIENT);
drhf764e6f2007-05-15 01:13:47 +0000234 }else{
drh4adc4cb2009-11-11 20:53:31 +0000235 if( p1+p2>len ){
236 p2 = len-p1;
237 if( p2<0 ) p2 = 0;
238 }
drh1bd10f82008-12-10 21:19:56 +0000239 sqlite3_result_blob(context, (char*)&z[p1], (int)p2, SQLITE_TRANSIENT);
drh0bce8352002-02-28 00:41:10 +0000240 }
drh0bce8352002-02-28 00:41:10 +0000241}
242
243/*
244** Implementation of the round() function
245*/
shanefbd60f82009-02-04 03:59:25 +0000246#ifndef SQLITE_OMIT_FLOATING_POINT
danielk19770ae8b832004-05-25 12:05:56 +0000247static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197751ad0ec2004-05-24 12:39:02 +0000248 int n = 0;
drh0bce8352002-02-28 00:41:10 +0000249 double r;
drh50d654d2009-06-03 01:24:54 +0000250 char *zBuf;
drh0bce8352002-02-28 00:41:10 +0000251 assert( argc==1 || argc==2 );
danielk197751ad0ec2004-05-24 12:39:02 +0000252 if( argc==2 ){
drh9c054832004-05-31 18:51:57 +0000253 if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
danielk197751ad0ec2004-05-24 12:39:02 +0000254 n = sqlite3_value_int(argv[1]);
255 if( n>30 ) n = 30;
256 if( n<0 ) n = 0;
257 }
drhd589a922006-03-02 03:02:48 +0000258 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drh4f26d6c2004-05-26 23:25:30 +0000259 r = sqlite3_value_double(argv[0]);
drh50d654d2009-06-03 01:24:54 +0000260 zBuf = sqlite3_mprintf("%.*f",n,r);
261 if( zBuf==0 ){
262 sqlite3_result_error_nomem(context);
263 }else{
264 sqlite3AtoF(zBuf, &r);
265 sqlite3_free(zBuf);
266 sqlite3_result_double(context, r);
267 }
drh0bce8352002-02-28 00:41:10 +0000268}
shanefbd60f82009-02-04 03:59:25 +0000269#endif
drhdc04c582002-02-24 01:55:15 +0000270
danielk197726783a52007-08-29 14:06:22 +0000271/*
272** Allocate nByte bytes of space using sqlite3_malloc(). If the
273** allocation fails, call sqlite3_result_error_nomem() to notify
drh27e62db2009-04-02 10:16:17 +0000274** the database handle that malloc() has failed and return NULL.
275** If nByte is larger than the maximum string or blob length, then
276** raise an SQLITE_TOOBIG exception and return NULL.
danielk197726783a52007-08-29 14:06:22 +0000277*/
drhb1a6c3c2008-03-20 16:30:17 +0000278static void *contextMalloc(sqlite3_context *context, i64 nByte){
drhbb4957f2008-03-20 14:03:29 +0000279 char *z;
drh27e62db2009-04-02 10:16:17 +0000280 sqlite3 *db = sqlite3_context_db_handle(context);
drhef31c6a2009-04-02 09:07:12 +0000281 assert( nByte>0 );
drh27e62db2009-04-02 10:16:17 +0000282 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] );
283 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
284 if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drhbb4957f2008-03-20 14:03:29 +0000285 sqlite3_result_error_toobig(context);
286 z = 0;
287 }else{
drh1bd10f82008-12-10 21:19:56 +0000288 z = sqlite3Malloc((int)nByte);
drhef31c6a2009-04-02 09:07:12 +0000289 if( !z ){
drhbb4957f2008-03-20 14:03:29 +0000290 sqlite3_result_error_nomem(context);
291 }
danielk1977a1644fd2007-08-29 12:31:25 +0000292 }
293 return z;
294}
295
drhdc04c582002-02-24 01:55:15 +0000296/*
297** Implementation of the upper() and lower() SQL functions.
298*/
danielk19770ae8b832004-05-25 12:05:56 +0000299static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh7a521cf2007-04-25 18:23:52 +0000300 char *z1;
301 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000302 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000303 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000304 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000305 n = sqlite3_value_bytes(argv[0]);
306 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
307 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000308 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000309 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000310 if( z1 ){
drh5bb3eb92007-05-04 13:15:55 +0000311 memcpy(z1, z2, n+1);
drh7a521cf2007-04-25 18:23:52 +0000312 for(i=0; z1[i]; i++){
danielk197778ca0e72009-01-20 16:53:39 +0000313 z1[i] = (char)sqlite3Toupper(z1[i]);
drh7a521cf2007-04-25 18:23:52 +0000314 }
315 sqlite3_result_text(context, z1, -1, sqlite3_free);
316 }
drhdc04c582002-02-24 01:55:15 +0000317 }
318}
danielk19770ae8b832004-05-25 12:05:56 +0000319static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197778ca0e72009-01-20 16:53:39 +0000320 u8 *z1;
drh7a521cf2007-04-25 18:23:52 +0000321 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000322 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000323 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000324 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000325 n = sqlite3_value_bytes(argv[0]);
326 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
327 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000328 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000329 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000330 if( z1 ){
drh5bb3eb92007-05-04 13:15:55 +0000331 memcpy(z1, z2, n+1);
drh7a521cf2007-04-25 18:23:52 +0000332 for(i=0; z1[i]; i++){
danielk197778ca0e72009-01-20 16:53:39 +0000333 z1[i] = sqlite3Tolower(z1[i]);
drh7a521cf2007-04-25 18:23:52 +0000334 }
danielk197778ca0e72009-01-20 16:53:39 +0000335 sqlite3_result_text(context, (char *)z1, -1, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000336 }
drhdc04c582002-02-24 01:55:15 +0000337 }
338}
339
drhae6bb952009-11-11 00:24:31 +0000340
341#if 0 /* This function is never used. */
342/*
343** The COALESCE() and IFNULL() functions used to be implemented as shown
344** here. But now they are implemented as VDBE code so that unused arguments
345** do not have to be computed. This legacy implementation is retained as
346** comment.
347*/
drhdc04c582002-02-24 01:55:15 +0000348/*
drhfbc99082002-02-28 03:14:18 +0000349** Implementation of the IFNULL(), NVL(), and COALESCE() functions.
jplyonb6c9e6e2004-01-19 04:53:24 +0000350** All three do the same thing. They return the first non-NULL
351** argument.
drh3212e182002-02-28 00:46:26 +0000352*/
drhf9b596e2004-05-26 16:54:42 +0000353static void ifnullFunc(
354 sqlite3_context *context,
355 int argc,
356 sqlite3_value **argv
357){
drhfbc99082002-02-28 03:14:18 +0000358 int i;
359 for(i=0; i<argc; i++){
drh9c054832004-05-31 18:51:57 +0000360 if( SQLITE_NULL!=sqlite3_value_type(argv[i]) ){
drhf4479502004-05-27 03:12:53 +0000361 sqlite3_result_value(context, argv[i]);
drhfbc99082002-02-28 03:14:18 +0000362 break;
363 }
364 }
drh3212e182002-02-28 00:46:26 +0000365}
drhae6bb952009-11-11 00:24:31 +0000366#endif /* NOT USED */
367#define ifnullFunc versionFunc /* Substitute function - never called */
drh3212e182002-02-28 00:46:26 +0000368
369/*
drhf9ffac92002-03-02 19:00:31 +0000370** Implementation of random(). Return a random integer.
371*/
drhf9b596e2004-05-26 16:54:42 +0000372static void randomFunc(
373 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000374 int NotUsed,
375 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000376){
drh52fc8492006-02-23 21:43:55 +0000377 sqlite_int64 r;
danielk197762c14b32008-11-19 09:05:26 +0000378 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drh2fa18682008-03-19 14:15:34 +0000379 sqlite3_randomness(sizeof(r), &r);
drh3034e3d2009-04-02 14:05:21 +0000380 if( r<0 ){
381 /* We need to prevent a random number of 0x8000000000000000
382 ** (or -9223372036854775808) since when you do abs() of that
383 ** number of you get the same value back again. To do this
384 ** in a way that is testable, mask the sign bit off of negative
385 ** values, resulting in a positive value. Then take the
386 ** 2s complement of that positive value. The end result can
387 ** therefore be no less than -9223372036854775807.
388 */
389 r = -(r ^ (((sqlite3_int64)1)<<63));
390 }
drh52fc8492006-02-23 21:43:55 +0000391 sqlite3_result_int64(context, r);
drhf9ffac92002-03-02 19:00:31 +0000392}
393
394/*
drh137c7282007-01-29 17:58:28 +0000395** Implementation of randomblob(N). Return a random blob
396** that is N bytes long.
drh63cf66f2007-01-29 15:50:05 +0000397*/
drh137c7282007-01-29 17:58:28 +0000398static void randomBlob(
drh63cf66f2007-01-29 15:50:05 +0000399 sqlite3_context *context,
400 int argc,
401 sqlite3_value **argv
402){
drh137c7282007-01-29 17:58:28 +0000403 int n;
404 unsigned char *p;
drh63cf66f2007-01-29 15:50:05 +0000405 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000406 UNUSED_PARAMETER(argc);
drh63cf66f2007-01-29 15:50:05 +0000407 n = sqlite3_value_int(argv[0]);
drh023ae032007-05-08 12:12:16 +0000408 if( n<1 ){
409 n = 1;
410 }
danielk1977a1644fd2007-08-29 12:31:25 +0000411 p = contextMalloc(context, n);
drh02d85832007-05-07 19:31:15 +0000412 if( p ){
drh2fa18682008-03-19 14:15:34 +0000413 sqlite3_randomness(n, p);
drh17435752007-08-16 04:30:38 +0000414 sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
drh02d85832007-05-07 19:31:15 +0000415 }
drh63cf66f2007-01-29 15:50:05 +0000416}
417
418/*
drh6ed41ad2002-04-06 14:10:47 +0000419** Implementation of the last_insert_rowid() SQL function. The return
danielk197724b03fd2004-05-10 10:34:34 +0000420** value is the same as the sqlite3_last_insert_rowid() API function.
drh6ed41ad2002-04-06 14:10:47 +0000421*/
danielk197751ad0ec2004-05-24 12:39:02 +0000422static void last_insert_rowid(
danielk19770ae8b832004-05-25 12:05:56 +0000423 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000424 int NotUsed,
425 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000426){
drhfa4a4b92008-03-19 21:45:51 +0000427 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000428 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhf9b596e2004-05-26 16:54:42 +0000429 sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
drh6ed41ad2002-04-06 14:10:47 +0000430}
431
rdcf146a772004-02-25 22:51:06 +0000432/*
danielk1977b28af712004-06-21 06:50:26 +0000433** Implementation of the changes() SQL function. The return value is the
434** same as the sqlite3_changes() API function.
rdcf146a772004-02-25 22:51:06 +0000435*/
danielk1977b28af712004-06-21 06:50:26 +0000436static void changes(
drhf9b596e2004-05-26 16:54:42 +0000437 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000438 int NotUsed,
439 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000440){
drhfa4a4b92008-03-19 21:45:51 +0000441 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000442 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhf4479502004-05-27 03:12:53 +0000443 sqlite3_result_int(context, sqlite3_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000444}
rdcf146a772004-02-25 22:51:06 +0000445
446/*
danielk1977b28af712004-06-21 06:50:26 +0000447** Implementation of the total_changes() SQL function. The return value is
448** the same as the sqlite3_total_changes() API function.
rdcf146a772004-02-25 22:51:06 +0000449*/
danielk1977b28af712004-06-21 06:50:26 +0000450static void total_changes(
451 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000452 int NotUsed,
453 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000454){
drhfa4a4b92008-03-19 21:45:51 +0000455 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000456 UNUSED_PARAMETER2(NotUsed, NotUsed2);
danielk1977b28af712004-06-21 06:50:26 +0000457 sqlite3_result_int(context, sqlite3_total_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000458}
459
drh6ed41ad2002-04-06 14:10:47 +0000460/*
drh4e5ffc52004-08-31 00:52:37 +0000461** A structure defining how to do GLOB-style comparisons.
danielk1977d02eb1f2004-06-06 09:44:03 +0000462*/
drh4e5ffc52004-08-31 00:52:37 +0000463struct compareInfo {
464 u8 matchAll;
465 u8 matchOne;
466 u8 matchSet;
467 u8 noCase;
danielk1977d02eb1f2004-06-06 09:44:03 +0000468};
drh55ef4d92005-08-14 01:20:37 +0000469
drhb9175ae2007-12-07 18:39:04 +0000470/*
471** For LIKE and GLOB matching on EBCDIC machines, assume that every
472** character is exactly one byte in size. Also, all characters are
473** able to participate in upper-case-to-lower-case mappings in EBCDIC
474** whereas only characters less than 0x80 do in ASCII.
475*/
476#if defined(SQLITE_EBCDIC)
drh769e97e2009-04-01 16:33:37 +0000477# define sqlite3Utf8Read(A,C) (*(A++))
drh6ed4b782007-12-10 18:07:20 +0000478# define GlogUpperToLower(A) A = sqlite3UpperToLower[A]
drhb9175ae2007-12-07 18:39:04 +0000479#else
drh6ed4b782007-12-10 18:07:20 +0000480# define GlogUpperToLower(A) if( A<0x80 ){ A = sqlite3UpperToLower[A]; }
drhb9175ae2007-12-07 18:39:04 +0000481#endif
482
drh4e5ffc52004-08-31 00:52:37 +0000483static const struct compareInfo globInfo = { '*', '?', '[', 0 };
drh55ef4d92005-08-14 01:20:37 +0000484/* The correct SQL-92 behavior is for the LIKE operator to ignore
485** case. Thus 'a' LIKE 'A' would be true. */
486static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
487/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
488** is case sensitive causing 'a' LIKE 'A' to be false */
489static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
danielk1977d02eb1f2004-06-06 09:44:03 +0000490
491/*
drh4e5ffc52004-08-31 00:52:37 +0000492** Compare two UTF-8 strings for equality where the first string can
493** potentially be a "glob" expression. Return true (1) if they
494** are the same and false (0) if they are different.
drh0ac65892002-04-20 14:24:41 +0000495**
drh4e5ffc52004-08-31 00:52:37 +0000496** Globbing rules:
drh0ac65892002-04-20 14:24:41 +0000497**
drh4e5ffc52004-08-31 00:52:37 +0000498** '*' Matches any sequence of zero or more characters.
danielk1977d02eb1f2004-06-06 09:44:03 +0000499**
drh4e5ffc52004-08-31 00:52:37 +0000500** '?' Matches exactly one character.
501**
502** [...] Matches one character from the enclosed list of
503** characters.
504**
505** [^...] Matches one character not in the enclosed list.
506**
507** With the [...] and [^...] matching, a ']' character can be included
508** in the list by making it the first character after '[' or '^'. A
509** range of characters can be specified using '-'. Example:
510** "[a-z]" matches any single lower-case letter. To match a '-', make
511** it the last character in the list.
512**
513** This routine is usually quick, but can be N**2 in the worst case.
514**
515** Hints: to match '*' or '?', put them in "[]". Like this:
516**
517** abc[*]xyz Matches "abc*xyz" only
drh0ac65892002-04-20 14:24:41 +0000518*/
danielk19777c6303c2004-11-17 16:41:29 +0000519static int patternCompare(
drh4e5ffc52004-08-31 00:52:37 +0000520 const u8 *zPattern, /* The glob pattern */
521 const u8 *zString, /* The string to compare against the glob */
danielk19777c6303c2004-11-17 16:41:29 +0000522 const struct compareInfo *pInfo, /* Information about how to do the compare */
523 const int esc /* The escape character */
danielk197751ad0ec2004-05-24 12:39:02 +0000524){
drh66150952007-07-23 19:12:41 +0000525 int c, c2;
drh4e5ffc52004-08-31 00:52:37 +0000526 int invert;
527 int seen;
drh4e5ffc52004-08-31 00:52:37 +0000528 u8 matchOne = pInfo->matchOne;
529 u8 matchAll = pInfo->matchAll;
530 u8 matchSet = pInfo->matchSet;
531 u8 noCase = pInfo->noCase;
danielk19777c6303c2004-11-17 16:41:29 +0000532 int prevEscape = 0; /* True if the previous character was 'escape' */
danielk1977d02eb1f2004-06-06 09:44:03 +0000533
drh769e97e2009-04-01 16:33:37 +0000534 while( (c = sqlite3Utf8Read(zPattern,&zPattern))!=0 ){
danielk19777c6303c2004-11-17 16:41:29 +0000535 if( !prevEscape && c==matchAll ){
drh769e97e2009-04-01 16:33:37 +0000536 while( (c=sqlite3Utf8Read(zPattern,&zPattern)) == matchAll
drh66150952007-07-23 19:12:41 +0000537 || c == matchOne ){
drh769e97e2009-04-01 16:33:37 +0000538 if( c==matchOne && sqlite3Utf8Read(zString, &zString)==0 ){
drh66150952007-07-23 19:12:41 +0000539 return 0;
drh4e5ffc52004-08-31 00:52:37 +0000540 }
danielk1977ad7dd422004-06-06 12:41:49 +0000541 }
drh66150952007-07-23 19:12:41 +0000542 if( c==0 ){
543 return 1;
544 }else if( c==esc ){
drh769e97e2009-04-01 16:33:37 +0000545 c = sqlite3Utf8Read(zPattern, &zPattern);
drh66150952007-07-23 19:12:41 +0000546 if( c==0 ){
547 return 0;
548 }
549 }else if( c==matchSet ){
550 assert( esc==0 ); /* This is GLOB, not LIKE */
551 assert( matchSet<0x80 ); /* '[' is a single-byte character */
552 while( *zString && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){
drh4a919112007-05-15 11:55:09 +0000553 SQLITE_SKIP_UTF8(zString);
drh4e5ffc52004-08-31 00:52:37 +0000554 }
555 return *zString!=0;
drh66150952007-07-23 19:12:41 +0000556 }
drh769e97e2009-04-01 16:33:37 +0000557 while( (c2 = sqlite3Utf8Read(zString,&zString))!=0 ){
drh66150952007-07-23 19:12:41 +0000558 if( noCase ){
drh6ed4b782007-12-10 18:07:20 +0000559 GlogUpperToLower(c2);
560 GlogUpperToLower(c);
drh66150952007-07-23 19:12:41 +0000561 while( c2 != 0 && c2 != c ){
drh769e97e2009-04-01 16:33:37 +0000562 c2 = sqlite3Utf8Read(zString, &zString);
drh6ed4b782007-12-10 18:07:20 +0000563 GlogUpperToLower(c2);
drh4e5ffc52004-08-31 00:52:37 +0000564 }
drh66150952007-07-23 19:12:41 +0000565 }else{
566 while( c2 != 0 && c2 != c ){
drh769e97e2009-04-01 16:33:37 +0000567 c2 = sqlite3Utf8Read(zString, &zString);
drh66150952007-07-23 19:12:41 +0000568 }
drh4e5ffc52004-08-31 00:52:37 +0000569 }
drh66150952007-07-23 19:12:41 +0000570 if( c2==0 ) return 0;
571 if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
572 }
573 return 0;
574 }else if( !prevEscape && c==matchOne ){
drh769e97e2009-04-01 16:33:37 +0000575 if( sqlite3Utf8Read(zString, &zString)==0 ){
drh4e5ffc52004-08-31 00:52:37 +0000576 return 0;
danielk1977d02eb1f2004-06-06 09:44:03 +0000577 }
drh4e5ffc52004-08-31 00:52:37 +0000578 }else if( c==matchSet ){
579 int prior_c = 0;
danielk19777c6303c2004-11-17 16:41:29 +0000580 assert( esc==0 ); /* This only occurs for GLOB, not LIKE */
drh4e5ffc52004-08-31 00:52:37 +0000581 seen = 0;
582 invert = 0;
drh769e97e2009-04-01 16:33:37 +0000583 c = sqlite3Utf8Read(zString, &zString);
drh4e5ffc52004-08-31 00:52:37 +0000584 if( c==0 ) return 0;
drh769e97e2009-04-01 16:33:37 +0000585 c2 = sqlite3Utf8Read(zPattern, &zPattern);
drh66150952007-07-23 19:12:41 +0000586 if( c2=='^' ){
587 invert = 1;
drh769e97e2009-04-01 16:33:37 +0000588 c2 = sqlite3Utf8Read(zPattern, &zPattern);
drh66150952007-07-23 19:12:41 +0000589 }
drh4e5ffc52004-08-31 00:52:37 +0000590 if( c2==']' ){
591 if( c==']' ) seen = 1;
drh769e97e2009-04-01 16:33:37 +0000592 c2 = sqlite3Utf8Read(zPattern, &zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000593 }
drh66150952007-07-23 19:12:41 +0000594 while( c2 && c2!=']' ){
595 if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
drh769e97e2009-04-01 16:33:37 +0000596 c2 = sqlite3Utf8Read(zPattern, &zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000597 if( c>=prior_c && c<=c2 ) seen = 1;
598 prior_c = 0;
drh4e5ffc52004-08-31 00:52:37 +0000599 }else{
drh66150952007-07-23 19:12:41 +0000600 if( c==c2 ){
601 seen = 1;
602 }
drh4e5ffc52004-08-31 00:52:37 +0000603 prior_c = c2;
604 }
drh769e97e2009-04-01 16:33:37 +0000605 c2 = sqlite3Utf8Read(zPattern, &zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000606 }
drh66150952007-07-23 19:12:41 +0000607 if( c2==0 || (seen ^ invert)==0 ){
608 return 0;
609 }
610 }else if( esc==c && !prevEscape ){
danielk19777c6303c2004-11-17 16:41:29 +0000611 prevEscape = 1;
drh4e5ffc52004-08-31 00:52:37 +0000612 }else{
drh769e97e2009-04-01 16:33:37 +0000613 c2 = sqlite3Utf8Read(zString, &zString);
drh4e5ffc52004-08-31 00:52:37 +0000614 if( noCase ){
drh6ed4b782007-12-10 18:07:20 +0000615 GlogUpperToLower(c);
616 GlogUpperToLower(c2);
drh4e5ffc52004-08-31 00:52:37 +0000617 }
drh66150952007-07-23 19:12:41 +0000618 if( c!=c2 ){
619 return 0;
620 }
danielk19777c6303c2004-11-17 16:41:29 +0000621 prevEscape = 0;
danielk1977d02eb1f2004-06-06 09:44:03 +0000622 }
danielk197751ad0ec2004-05-24 12:39:02 +0000623 }
drh4e5ffc52004-08-31 00:52:37 +0000624 return *zString==0;
drh0ac65892002-04-20 14:24:41 +0000625}
drh4e5ffc52004-08-31 00:52:37 +0000626
drh55ef4d92005-08-14 01:20:37 +0000627/*
628** Count the number of times that the LIKE operator (or GLOB which is
629** just a variation of LIKE) gets called. This is used for testing
630** only.
631*/
632#ifdef SQLITE_TEST
633int sqlite3_like_count = 0;
634#endif
635
danielk19773f6b0872004-06-17 05:36:44 +0000636
637/*
638** Implementation of the like() SQL function. This function implements
639** the build-in LIKE operator. The first argument to the function is the
640** pattern and the second argument is the string. So, the SQL statements:
641**
642** A LIKE B
643**
644** is implemented as like(B,A).
645**
drh55ef4d92005-08-14 01:20:37 +0000646** This same function (with a different compareInfo structure) computes
647** the GLOB operator.
danielk19773f6b0872004-06-17 05:36:44 +0000648*/
649static void likeFunc(
650 sqlite3_context *context,
651 int argc,
652 sqlite3_value **argv
653){
drhbeb818d2007-05-08 15:34:47 +0000654 const unsigned char *zA, *zB;
drh85892bd2007-05-10 13:23:22 +0000655 int escape = 0;
drh27e62db2009-04-02 10:16:17 +0000656 int nPat;
drhbb4957f2008-03-20 14:03:29 +0000657 sqlite3 *db = sqlite3_context_db_handle(context);
drhbeb818d2007-05-08 15:34:47 +0000658
drh1f0feef2007-05-15 13:27:07 +0000659 zB = sqlite3_value_text(argv[0]);
660 zA = sqlite3_value_text(argv[1]);
661
drhbeb818d2007-05-08 15:34:47 +0000662 /* Limit the length of the LIKE or GLOB pattern to avoid problems
663 ** of deep recursion and N*N behavior in patternCompare().
664 */
drh27e62db2009-04-02 10:16:17 +0000665 nPat = sqlite3_value_bytes(argv[0]);
666 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );
667 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );
668 if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
drhbeb818d2007-05-08 15:34:47 +0000669 sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
670 return;
671 }
drh1f0feef2007-05-15 13:27:07 +0000672 assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */
drhbeb818d2007-05-08 15:34:47 +0000673
danielk19777c6303c2004-11-17 16:41:29 +0000674 if( argc==3 ){
675 /* The escape character string must consist of a single UTF-8 character.
676 ** Otherwise, return an error.
677 */
678 const unsigned char *zEsc = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +0000679 if( zEsc==0 ) return;
drhee858132007-05-08 20:37:38 +0000680 if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
danielk19777c6303c2004-11-17 16:41:29 +0000681 sqlite3_result_error(context,
682 "ESCAPE expression must be a single character", -1);
683 return;
684 }
drh769e97e2009-04-01 16:33:37 +0000685 escape = sqlite3Utf8Read(zEsc, &zEsc);
danielk19777c6303c2004-11-17 16:41:29 +0000686 }
danielk19773f6b0872004-06-17 05:36:44 +0000687 if( zA && zB ){
drh55ef4d92005-08-14 01:20:37 +0000688 struct compareInfo *pInfo = sqlite3_user_data(context);
689#ifdef SQLITE_TEST
690 sqlite3_like_count++;
691#endif
drhbeb818d2007-05-08 15:34:47 +0000692
danielk1977b56fe1f2007-05-09 08:24:44 +0000693 sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape));
danielk197751ad0ec2004-05-24 12:39:02 +0000694 }
drh8912d102002-05-26 21:34:58 +0000695}
696
697/*
698** Implementation of the NULLIF(x,y) function. The result is the first
699** argument if the arguments are different. The result is NULL if the
700** arguments are equal to each other.
701*/
drhf9b596e2004-05-26 16:54:42 +0000702static void nullifFunc(
703 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000704 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +0000705 sqlite3_value **argv
706){
danielk1977dc1bdc42004-06-11 10:51:27 +0000707 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk197762c14b32008-11-19 09:05:26 +0000708 UNUSED_PARAMETER(NotUsed);
danielk1977dc1bdc42004-06-11 10:51:27 +0000709 if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
drhf4479502004-05-27 03:12:53 +0000710 sqlite3_result_value(context, argv[0]);
drh8912d102002-05-26 21:34:58 +0000711 }
drh0ac65892002-04-20 14:24:41 +0000712}
713
drh647cb0e2002-11-04 19:32:25 +0000714/*
drh47baebc2009-08-14 16:01:24 +0000715** Implementation of the sqlite_version() function. The result is the version
drh647cb0e2002-11-04 19:32:25 +0000716** of the SQLite library that is running.
717*/
drhf9b596e2004-05-26 16:54:42 +0000718static void versionFunc(
719 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000720 int NotUsed,
721 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000722){
danielk197762c14b32008-11-19 09:05:26 +0000723 UNUSED_PARAMETER2(NotUsed, NotUsed2);
danielk1977d8123362004-06-12 09:25:12 +0000724 sqlite3_result_text(context, sqlite3_version, -1, SQLITE_STATIC);
drh647cb0e2002-11-04 19:32:25 +0000725}
726
drh47baebc2009-08-14 16:01:24 +0000727/*
728** Implementation of the sqlite_source_id() function. The result is a string
729** that identifies the particular version of the source code used to build
730** SQLite.
731*/
732static void sourceidFunc(
733 sqlite3_context *context,
734 int NotUsed,
735 sqlite3_value **NotUsed2
736){
737 UNUSED_PARAMETER2(NotUsed, NotUsed2);
738 sqlite3_result_text(context, SQLITE_SOURCE_ID, -1, SQLITE_STATIC);
739}
740
drh137c7282007-01-29 17:58:28 +0000741/* Array for converting from half-bytes (nybbles) into ASCII hex
742** digits. */
743static const char hexdigits[] = {
744 '0', '1', '2', '3', '4', '5', '6', '7',
745 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
746};
danielk1977d641d642004-11-18 15:44:29 +0000747
drh47394702003-08-20 01:03:33 +0000748/*
749** EXPERIMENTAL - This is not an official function. The interface may
750** change. This function may disappear. Do not write code that depends
751** on this function.
752**
753** Implementation of the QUOTE() function. This function takes a single
754** argument. If the argument is numeric, the return value is the same as
755** the argument. If the argument is NULL, the return value is the string
756** "NULL". Otherwise, the argument is enclosed in single quotes with
757** single-quote escapes.
758*/
danielk19770ae8b832004-05-25 12:05:56 +0000759static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drha0df4cc2009-02-02 17:29:59 +0000760 assert( argc==1 );
drh1d34fde2009-02-03 15:50:33 +0000761 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000762 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000763 case SQLITE_INTEGER:
764 case SQLITE_FLOAT: {
drhf4479502004-05-27 03:12:53 +0000765 sqlite3_result_value(context, argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000766 break;
767 }
danielk19773f41e972004-06-08 00:39:01 +0000768 case SQLITE_BLOB: {
danielk19773f41e972004-06-08 00:39:01 +0000769 char *zText = 0;
danielk19773f41e972004-06-08 00:39:01 +0000770 char const *zBlob = sqlite3_value_blob(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000771 int nBlob = sqlite3_value_bytes(argv[0]);
772 assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +0000773 zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4);
danielk1977a1644fd2007-08-29 12:31:25 +0000774 if( zText ){
danielk19773f41e972004-06-08 00:39:01 +0000775 int i;
776 for(i=0; i<nBlob; i++){
777 zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
778 zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
779 }
780 zText[(nBlob*2)+2] = '\'';
781 zText[(nBlob*2)+3] = '\0';
782 zText[0] = 'X';
783 zText[1] = '\'';
danielk1977d8123362004-06-12 09:25:12 +0000784 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
drh17435752007-08-16 04:30:38 +0000785 sqlite3_free(zText);
danielk19773f41e972004-06-08 00:39:01 +0000786 }
787 break;
788 }
drh9c054832004-05-31 18:51:57 +0000789 case SQLITE_TEXT: {
drh023ae032007-05-08 12:12:16 +0000790 int i,j;
791 u64 n;
drh2646da72005-12-09 20:02:05 +0000792 const unsigned char *zArg = sqlite3_value_text(argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000793 char *z;
794
drh7a521cf2007-04-25 18:23:52 +0000795 if( zArg==0 ) return;
drh023ae032007-05-08 12:12:16 +0000796 for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
drhb1a6c3c2008-03-20 16:30:17 +0000797 z = contextMalloc(context, ((i64)i)+((i64)n)+3);
danielk1977a1644fd2007-08-29 12:31:25 +0000798 if( z ){
799 z[0] = '\'';
800 for(i=0, j=1; zArg[i]; i++){
801 z[j++] = zArg[i];
802 if( zArg[i]=='\'' ){
803 z[j++] = '\'';
804 }
drhf9b596e2004-05-26 16:54:42 +0000805 }
danielk1977a1644fd2007-08-29 12:31:25 +0000806 z[j++] = '\'';
807 z[j] = 0;
808 sqlite3_result_text(context, z, j, sqlite3_free);
drhf9b596e2004-05-26 16:54:42 +0000809 }
drha0df4cc2009-02-02 17:29:59 +0000810 break;
811 }
812 default: {
813 assert( sqlite3_value_type(argv[0])==SQLITE_NULL );
814 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
815 break;
drhf9b596e2004-05-26 16:54:42 +0000816 }
drh47394702003-08-20 01:03:33 +0000817 }
818}
819
drh137c7282007-01-29 17:58:28 +0000820/*
821** The hex() function. Interpret the argument as a blob. Return
822** a hexadecimal rendering as text.
823*/
824static void hexFunc(
825 sqlite3_context *context,
826 int argc,
827 sqlite3_value **argv
828){
829 int i, n;
830 const unsigned char *pBlob;
831 char *zHex, *z;
832 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000833 UNUSED_PARAMETER(argc);
drh1f0feef2007-05-15 13:27:07 +0000834 pBlob = sqlite3_value_blob(argv[0]);
drh137c7282007-01-29 17:58:28 +0000835 n = sqlite3_value_bytes(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000836 assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +0000837 z = zHex = contextMalloc(context, ((i64)n)*2 + 1);
danielk1977a1644fd2007-08-29 12:31:25 +0000838 if( zHex ){
839 for(i=0; i<n; i++, pBlob++){
840 unsigned char c = *pBlob;
841 *(z++) = hexdigits[(c>>4)&0xf];
842 *(z++) = hexdigits[c&0xf];
843 }
844 *z = 0;
845 sqlite3_result_text(context, zHex, n*2, sqlite3_free);
drh137c7282007-01-29 17:58:28 +0000846 }
drh137c7282007-01-29 17:58:28 +0000847}
848
drh26b6d902007-03-17 13:27:54 +0000849/*
drh8cff3822007-05-02 02:08:28 +0000850** The zeroblob(N) function returns a zero-filled blob of size N bytes.
851*/
852static void zeroblobFunc(
853 sqlite3_context *context,
854 int argc,
855 sqlite3_value **argv
856){
drh98640a32007-06-07 19:08:32 +0000857 i64 n;
drh27e62db2009-04-02 10:16:17 +0000858 sqlite3 *db = sqlite3_context_db_handle(context);
drh8cff3822007-05-02 02:08:28 +0000859 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000860 UNUSED_PARAMETER(argc);
drh98640a32007-06-07 19:08:32 +0000861 n = sqlite3_value_int64(argv[0]);
drh27e62db2009-04-02 10:16:17 +0000862 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH] );
863 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
864 if( n>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drh98640a32007-06-07 19:08:32 +0000865 sqlite3_result_error_toobig(context);
866 }else{
drh1bd10f82008-12-10 21:19:56 +0000867 sqlite3_result_zeroblob(context, (int)n);
drh98640a32007-06-07 19:08:32 +0000868 }
drh8cff3822007-05-02 02:08:28 +0000869}
870
871/*
drh26b6d902007-03-17 13:27:54 +0000872** The replace() function. Three arguments are all strings: call
873** them A, B, and C. The result is also a string which is derived
874** from A by replacing every occurance of B with C. The match
875** must be exact. Collating sequences are not used.
876*/
877static void replaceFunc(
878 sqlite3_context *context,
879 int argc,
880 sqlite3_value **argv
881){
882 const unsigned char *zStr; /* The input string A */
883 const unsigned char *zPattern; /* The pattern string B */
884 const unsigned char *zRep; /* The replacement string C */
885 unsigned char *zOut; /* The output */
886 int nStr; /* Size of zStr */
887 int nPattern; /* Size of zPattern */
888 int nRep; /* Size of zRep */
drh2e6400b2007-05-08 15:46:18 +0000889 i64 nOut; /* Maximum size of zOut */
drh26b6d902007-03-17 13:27:54 +0000890 int loopLimit; /* Last zStr[] that might match zPattern[] */
891 int i, j; /* Loop counters */
892
893 assert( argc==3 );
danielk1977f3d3c272008-11-19 16:52:44 +0000894 UNUSED_PARAMETER(argc);
drh26b6d902007-03-17 13:27:54 +0000895 zStr = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +0000896 if( zStr==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000897 nStr = sqlite3_value_bytes(argv[0]);
898 assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +0000899 zPattern = sqlite3_value_text(argv[1]);
drha605fe82009-02-01 18:08:40 +0000900 if( zPattern==0 ){
drh23336062009-02-03 13:19:12 +0000901 assert( sqlite3_value_type(argv[1])==SQLITE_NULL
902 || sqlite3_context_db_handle(context)->mallocFailed );
drha605fe82009-02-01 18:08:40 +0000903 return;
904 }
905 if( zPattern[0]==0 ){
906 assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
907 sqlite3_result_value(context, argv[0]);
908 return;
909 }
drh1f0feef2007-05-15 13:27:07 +0000910 nPattern = sqlite3_value_bytes(argv[1]);
911 assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +0000912 zRep = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +0000913 if( zRep==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000914 nRep = sqlite3_value_bytes(argv[2]);
915 assert( zRep==sqlite3_value_text(argv[2]) );
drh2e6400b2007-05-08 15:46:18 +0000916 nOut = nStr + 1;
917 assert( nOut<SQLITE_MAX_LENGTH );
drhb1a6c3c2008-03-20 16:30:17 +0000918 zOut = contextMalloc(context, (i64)nOut);
drh2e6400b2007-05-08 15:46:18 +0000919 if( zOut==0 ){
920 return;
drh26b6d902007-03-17 13:27:54 +0000921 }
drh26b6d902007-03-17 13:27:54 +0000922 loopLimit = nStr - nPattern;
923 for(i=j=0; i<=loopLimit; i++){
924 if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
925 zOut[j++] = zStr[i];
926 }else{
drh4a50aac2007-08-23 02:47:53 +0000927 u8 *zOld;
drhbb4957f2008-03-20 14:03:29 +0000928 sqlite3 *db = sqlite3_context_db_handle(context);
drh2e6400b2007-05-08 15:46:18 +0000929 nOut += nRep - nPattern;
drh27e62db2009-04-02 10:16:17 +0000930 testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
931 testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
932 if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drha0206bc2007-05-08 15:15:02 +0000933 sqlite3_result_error_toobig(context);
drh633e6d52008-07-28 19:34:53 +0000934 sqlite3DbFree(db, zOut);
danielk197717374e82007-05-08 14:39:04 +0000935 return;
936 }
drh4a50aac2007-08-23 02:47:53 +0000937 zOld = zOut;
drh2e6400b2007-05-08 15:46:18 +0000938 zOut = sqlite3_realloc(zOut, (int)nOut);
939 if( zOut==0 ){
danielk1977a1644fd2007-08-29 12:31:25 +0000940 sqlite3_result_error_nomem(context);
drh633e6d52008-07-28 19:34:53 +0000941 sqlite3DbFree(db, zOld);
drh2e6400b2007-05-08 15:46:18 +0000942 return;
943 }
drh26b6d902007-03-17 13:27:54 +0000944 memcpy(&zOut[j], zRep, nRep);
945 j += nRep;
946 i += nPattern-1;
947 }
948 }
drh2e6400b2007-05-08 15:46:18 +0000949 assert( j+nStr-i+1==nOut );
drh26b6d902007-03-17 13:27:54 +0000950 memcpy(&zOut[j], &zStr[i], nStr-i);
951 j += nStr - i;
952 assert( j<=nOut );
953 zOut[j] = 0;
954 sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
955}
956
drh309b3382007-03-17 17:52:42 +0000957/*
958** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
959** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
960*/
961static void trimFunc(
962 sqlite3_context *context,
963 int argc,
964 sqlite3_value **argv
965){
966 const unsigned char *zIn; /* Input string */
967 const unsigned char *zCharSet; /* Set of characters to trim */
968 int nIn; /* Number of bytes in input */
drh7209c692008-04-27 18:40:11 +0000969 int flags; /* 1: trimleft 2: trimright 3: trim */
drhd1e3a612007-04-27 21:59:52 +0000970 int i; /* Loop counter */
drh1bd10f82008-12-10 21:19:56 +0000971 unsigned char *aLen = 0; /* Length of each character in zCharSet */
972 unsigned char **azChar = 0; /* Individual characters in zCharSet */
drhd1e3a612007-04-27 21:59:52 +0000973 int nChar; /* Number of characters in zCharSet */
974
drh309b3382007-03-17 17:52:42 +0000975 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
976 return;
977 }
978 zIn = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +0000979 if( zIn==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000980 nIn = sqlite3_value_bytes(argv[0]);
981 assert( zIn==sqlite3_value_text(argv[0]) );
drh309b3382007-03-17 17:52:42 +0000982 if( argc==1 ){
drhd1e3a612007-04-27 21:59:52 +0000983 static const unsigned char lenOne[] = { 1 };
danielk1977a4de4532008-09-02 15:44:08 +0000984 static unsigned char * const azOne[] = { (u8*)" " };
drhd1e3a612007-04-27 21:59:52 +0000985 nChar = 1;
drh8cff3822007-05-02 02:08:28 +0000986 aLen = (u8*)lenOne;
danielk1977bc67da42007-12-11 04:23:19 +0000987 azChar = (unsigned char **)azOne;
drhd1e3a612007-04-27 21:59:52 +0000988 zCharSet = 0;
drh7a521cf2007-04-25 18:23:52 +0000989 }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
drh309b3382007-03-17 17:52:42 +0000990 return;
drhd1e3a612007-04-27 21:59:52 +0000991 }else{
992 const unsigned char *z;
993 for(z=zCharSet, nChar=0; *z; nChar++){
drh4a919112007-05-15 11:55:09 +0000994 SQLITE_SKIP_UTF8(z);
drhd1e3a612007-04-27 21:59:52 +0000995 }
996 if( nChar>0 ){
drhb1a6c3c2008-03-20 16:30:17 +0000997 azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));
drhd1e3a612007-04-27 21:59:52 +0000998 if( azChar==0 ){
999 return;
1000 }
1001 aLen = (unsigned char*)&azChar[nChar];
1002 for(z=zCharSet, nChar=0; *z; nChar++){
danielk1977bc67da42007-12-11 04:23:19 +00001003 azChar[nChar] = (unsigned char *)z;
drh4a919112007-05-15 11:55:09 +00001004 SQLITE_SKIP_UTF8(z);
drh3abbd392008-12-10 23:04:13 +00001005 aLen[nChar] = (u8)(z - azChar[nChar]);
drhd1e3a612007-04-27 21:59:52 +00001006 }
1007 }
drh309b3382007-03-17 17:52:42 +00001008 }
drhd1e3a612007-04-27 21:59:52 +00001009 if( nChar>0 ){
shane1fc41292008-07-08 22:28:48 +00001010 flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
drh309b3382007-03-17 17:52:42 +00001011 if( flags & 1 ){
drhd1e3a612007-04-27 21:59:52 +00001012 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001013 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001014 for(i=0; i<nChar; i++){
1015 len = aLen[i];
drh27e62db2009-04-02 10:16:17 +00001016 if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
drhd1e3a612007-04-27 21:59:52 +00001017 }
1018 if( i>=nChar ) break;
1019 zIn += len;
1020 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001021 }
1022 }
1023 if( flags & 2 ){
drhd1e3a612007-04-27 21:59:52 +00001024 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001025 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001026 for(i=0; i<nChar; i++){
1027 len = aLen[i];
1028 if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
1029 }
1030 if( i>=nChar ) break;
1031 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001032 }
1033 }
drhd1e3a612007-04-27 21:59:52 +00001034 if( zCharSet ){
1035 sqlite3_free(azChar);
1036 }
drh309b3382007-03-17 17:52:42 +00001037 }
1038 sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
1039}
drh26b6d902007-03-17 13:27:54 +00001040
danielk1977a4de4532008-09-02 15:44:08 +00001041
drhd24cc422003-03-27 12:51:24 +00001042#ifdef SQLITE_SOUNDEX
1043/*
1044** Compute the soundex encoding of a word.
1045*/
drh137c7282007-01-29 17:58:28 +00001046static void soundexFunc(
1047 sqlite3_context *context,
1048 int argc,
1049 sqlite3_value **argv
1050){
drhd24cc422003-03-27 12:51:24 +00001051 char zResult[8];
drh4c755c02004-08-08 20:22:17 +00001052 const u8 *zIn;
drhd24cc422003-03-27 12:51:24 +00001053 int i, j;
1054 static const unsigned char iCode[] = {
1055 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1056 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1057 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1058 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1059 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1060 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1061 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1062 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1063 };
1064 assert( argc==1 );
drh4c755c02004-08-08 20:22:17 +00001065 zIn = (u8*)sqlite3_value_text(argv[0]);
drhbdf67e02006-08-19 11:34:01 +00001066 if( zIn==0 ) zIn = (u8*)"";
drhdc86e2b2009-01-24 11:30:42 +00001067 for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
drhd24cc422003-03-27 12:51:24 +00001068 if( zIn[i] ){
drhbdf67e02006-08-19 11:34:01 +00001069 u8 prevcode = iCode[zIn[i]&0x7f];
danielk197778ca0e72009-01-20 16:53:39 +00001070 zResult[0] = sqlite3Toupper(zIn[i]);
drhd24cc422003-03-27 12:51:24 +00001071 for(j=1; j<4 && zIn[i]; i++){
1072 int code = iCode[zIn[i]&0x7f];
1073 if( code>0 ){
drhbdf67e02006-08-19 11:34:01 +00001074 if( code!=prevcode ){
1075 prevcode = code;
1076 zResult[j++] = code + '0';
1077 }
1078 }else{
1079 prevcode = 0;
drhd24cc422003-03-27 12:51:24 +00001080 }
1081 }
1082 while( j<4 ){
1083 zResult[j++] = '0';
1084 }
1085 zResult[j] = 0;
danielk1977d8123362004-06-12 09:25:12 +00001086 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
drhd24cc422003-03-27 12:51:24 +00001087 }else{
danielk1977d8123362004-06-12 09:25:12 +00001088 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
drhd24cc422003-03-27 12:51:24 +00001089 }
1090}
1091#endif
1092
drhfdb83b22006-06-17 14:12:47 +00001093#ifndef SQLITE_OMIT_LOAD_EXTENSION
1094/*
1095** A function that loads a shared-library extension then returns NULL.
1096*/
1097static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197765fd59f2006-06-24 11:51:33 +00001098 const char *zFile = (const char *)sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001099 const char *zProc;
drhfa4a4b92008-03-19 21:45:51 +00001100 sqlite3 *db = sqlite3_context_db_handle(context);
drhfdb83b22006-06-17 14:12:47 +00001101 char *zErrMsg = 0;
1102
1103 if( argc==2 ){
danielk197765fd59f2006-06-24 11:51:33 +00001104 zProc = (const char *)sqlite3_value_text(argv[1]);
drh7a521cf2007-04-25 18:23:52 +00001105 }else{
1106 zProc = 0;
drhfdb83b22006-06-17 14:12:47 +00001107 }
drh7a521cf2007-04-25 18:23:52 +00001108 if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
drhfdb83b22006-06-17 14:12:47 +00001109 sqlite3_result_error(context, zErrMsg, -1);
1110 sqlite3_free(zErrMsg);
1111 }
1112}
1113#endif
1114
danielk197701427a62005-01-11 13:02:33 +00001115
drh0ac65892002-04-20 14:24:41 +00001116/*
drhd3a149e2002-02-24 17:12:53 +00001117** An instance of the following structure holds the context of a
drhdd5baa92002-02-27 19:50:59 +00001118** sum() or avg() aggregate computation.
1119*/
1120typedef struct SumCtx SumCtx;
1121struct SumCtx {
drh8c08e862006-02-11 17:34:00 +00001122 double rSum; /* Floating point sum */
1123 i64 iSum; /* Integer sum */
1124 i64 cnt; /* Number of elements summed */
1125 u8 overflow; /* True if integer overflow seen */
1126 u8 approx; /* True if non-integer value was input to the sum */
drhdd5baa92002-02-27 19:50:59 +00001127};
1128
1129/*
drha97fdd32006-01-12 22:17:50 +00001130** Routines used to compute the sum, average, and total.
1131**
1132** The SUM() function follows the (broken) SQL standard which means
1133** that it returns NULL if it sums over no inputs. TOTAL returns
1134** 0.0 in that case. In addition, TOTAL always returns a float where
1135** SUM might return an integer if it never encounters a floating point
drhc806d852006-05-11 13:25:39 +00001136** value. TOTAL never fails, but SUM might through an exception if
1137** it overflows an integer.
drhdd5baa92002-02-27 19:50:59 +00001138*/
danielk19770ae8b832004-05-25 12:05:56 +00001139static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdd5baa92002-02-27 19:50:59 +00001140 SumCtx *p;
drh3d1d95e2005-09-08 10:37:01 +00001141 int type;
drh3f219f42005-09-08 19:45:57 +00001142 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001143 UNUSED_PARAMETER(argc);
drh4f26d6c2004-05-26 23:25:30 +00001144 p = sqlite3_aggregate_context(context, sizeof(*p));
drh29d72102006-02-09 22:13:41 +00001145 type = sqlite3_value_numeric_type(argv[0]);
drh3d1d95e2005-09-08 10:37:01 +00001146 if( p && type!=SQLITE_NULL ){
drh739105c2002-05-29 23:22:23 +00001147 p->cnt++;
drh29d72102006-02-09 22:13:41 +00001148 if( type==SQLITE_INTEGER ){
drh8c08e862006-02-11 17:34:00 +00001149 i64 v = sqlite3_value_int64(argv[0]);
1150 p->rSum += v;
1151 if( (p->approx|p->overflow)==0 ){
1152 i64 iNewSum = p->iSum + v;
drh1bd10f82008-12-10 21:19:56 +00001153 int s1 = (int)(p->iSum >> (sizeof(i64)*8-1));
1154 int s2 = (int)(v >> (sizeof(i64)*8-1));
1155 int s3 = (int)(iNewSum >> (sizeof(i64)*8-1));
1156 p->overflow = ((s1&s2&~s3) | (~s1&~s2&s3))?1:0;
drh8c08e862006-02-11 17:34:00 +00001157 p->iSum = iNewSum;
drh29d72102006-02-09 22:13:41 +00001158 }
1159 }else{
drh8c08e862006-02-11 17:34:00 +00001160 p->rSum += sqlite3_value_double(argv[0]);
drh29d72102006-02-09 22:13:41 +00001161 p->approx = 1;
drh3f219f42005-09-08 19:45:57 +00001162 }
drh739105c2002-05-29 23:22:23 +00001163 }
drhdd5baa92002-02-27 19:50:59 +00001164}
danielk19770ae8b832004-05-25 12:05:56 +00001165static void sumFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001166 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001167 p = sqlite3_aggregate_context(context, 0);
drhc2bd9132005-09-08 20:37:43 +00001168 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001169 if( p->overflow ){
1170 sqlite3_result_error(context,"integer overflow",-1);
1171 }else if( p->approx ){
1172 sqlite3_result_double(context, p->rSum);
drhc2bd9132005-09-08 20:37:43 +00001173 }else{
drh8c08e862006-02-11 17:34:00 +00001174 sqlite3_result_int64(context, p->iSum);
drhc2bd9132005-09-08 20:37:43 +00001175 }
drh3d1d95e2005-09-08 10:37:01 +00001176 }
drhdd5baa92002-02-27 19:50:59 +00001177}
danielk19770ae8b832004-05-25 12:05:56 +00001178static void avgFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001179 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001180 p = sqlite3_aggregate_context(context, 0);
drh739105c2002-05-29 23:22:23 +00001181 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001182 sqlite3_result_double(context, p->rSum/(double)p->cnt);
drhdd5baa92002-02-27 19:50:59 +00001183 }
1184}
drha97fdd32006-01-12 22:17:50 +00001185static void totalFinalize(sqlite3_context *context){
1186 SumCtx *p;
1187 p = sqlite3_aggregate_context(context, 0);
shanefbd60f82009-02-04 03:59:25 +00001188 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
1189 sqlite3_result_double(context, p ? p->rSum : (double)0);
drha97fdd32006-01-12 22:17:50 +00001190}
drhdd5baa92002-02-27 19:50:59 +00001191
1192/*
drh0bce8352002-02-28 00:41:10 +00001193** The following structure keeps track of state information for the
1194** count() aggregate function.
1195*/
1196typedef struct CountCtx CountCtx;
1197struct CountCtx {
drhfc6ad392006-02-09 13:38:19 +00001198 i64 n;
drh0bce8352002-02-28 00:41:10 +00001199};
drhdd5baa92002-02-27 19:50:59 +00001200
drh0bce8352002-02-28 00:41:10 +00001201/*
1202** Routines to implement the count() aggregate function.
1203*/
danielk19770ae8b832004-05-25 12:05:56 +00001204static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +00001205 CountCtx *p;
drh4f26d6c2004-05-26 23:25:30 +00001206 p = sqlite3_aggregate_context(context, sizeof(*p));
drh9c054832004-05-31 18:51:57 +00001207 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
drh0bce8352002-02-28 00:41:10 +00001208 p->n++;
1209 }
drh2e79c3d2009-04-08 23:04:14 +00001210
drhd3264c72009-04-15 13:39:47 +00001211#ifndef SQLITE_OMIT_DEPRECATED
drh2e79c3d2009-04-08 23:04:14 +00001212 /* The sqlite3_aggregate_count() function is deprecated. But just to make
1213 ** sure it still operates correctly, verify that its count agrees with our
1214 ** internal count when using count(*) and when the total count can be
1215 ** expressed as a 32-bit integer. */
1216 assert( argc==1 || p==0 || p->n>0x7fffffff
1217 || p->n==sqlite3_aggregate_count(context) );
drhd3264c72009-04-15 13:39:47 +00001218#endif
drh0bce8352002-02-28 00:41:10 +00001219}
danielk19770ae8b832004-05-25 12:05:56 +00001220static void countFinalize(sqlite3_context *context){
drh0bce8352002-02-28 00:41:10 +00001221 CountCtx *p;
drhabfcea22005-09-06 20:36:48 +00001222 p = sqlite3_aggregate_context(context, 0);
drhfc6ad392006-02-09 13:38:19 +00001223 sqlite3_result_int64(context, p ? p->n : 0);
drh0bce8352002-02-28 00:41:10 +00001224}
1225
1226/*
drh0bce8352002-02-28 00:41:10 +00001227** Routines to implement min() and max() aggregate functions.
1228*/
danielk197762c14b32008-11-19 09:05:26 +00001229static void minmaxStep(
1230 sqlite3_context *context,
1231 int NotUsed,
1232 sqlite3_value **argv
1233){
danielk197788208052004-05-25 01:13:20 +00001234 Mem *pArg = (Mem *)argv[0];
drh9eb516c2004-07-18 20:52:32 +00001235 Mem *pBest;
danielk197762c14b32008-11-19 09:05:26 +00001236 UNUSED_PARAMETER(NotUsed);
drh9eb516c2004-07-18 20:52:32 +00001237
1238 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
1239 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
danielk19773aeab9e2004-06-24 00:20:04 +00001240 if( !pBest ) return;
drh268380c2004-02-25 13:47:31 +00001241
danielk197788208052004-05-25 01:13:20 +00001242 if( pBest->flags ){
drh9eb516c2004-07-18 20:52:32 +00001243 int max;
1244 int cmp;
danielk1977dc1bdc42004-06-11 10:51:27 +00001245 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk19777e18c252004-05-25 11:47:24 +00001246 /* This step function is used for both the min() and max() aggregates,
1247 ** the only difference between the two being that the sense of the
1248 ** comparison is inverted. For the max() aggregate, the
1249 ** sqlite3_user_data() function returns (void *)-1. For min() it
1250 ** returns (void *)db, where db is the sqlite3* database pointer.
1251 ** Therefore the next statement sets variable 'max' to 1 for the max()
1252 ** aggregate, or 0 for min().
1253 */
drh309b3382007-03-17 17:52:42 +00001254 max = sqlite3_user_data(context)!=0;
danielk1977dc1bdc42004-06-11 10:51:27 +00001255 cmp = sqlite3MemCompare(pBest, pArg, pColl);
danielk197788208052004-05-25 01:13:20 +00001256 if( (max && cmp<0) || (!max && cmp>0) ){
drhb21c8cd2007-08-21 19:33:56 +00001257 sqlite3VdbeMemCopy(pBest, pArg);
danielk197788208052004-05-25 01:13:20 +00001258 }
drh268380c2004-02-25 13:47:31 +00001259 }else{
drhb21c8cd2007-08-21 19:33:56 +00001260 sqlite3VdbeMemCopy(pBest, pArg);
drh0bce8352002-02-28 00:41:10 +00001261 }
1262}
danielk19770ae8b832004-05-25 12:05:56 +00001263static void minMaxFinalize(sqlite3_context *context){
danielk197788208052004-05-25 01:13:20 +00001264 sqlite3_value *pRes;
drhabfcea22005-09-06 20:36:48 +00001265 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1266 if( pRes ){
drhd27135a2009-04-02 13:36:37 +00001267 if( ALWAYS(pRes->flags) ){
drhabfcea22005-09-06 20:36:48 +00001268 sqlite3_result_value(context, pRes);
1269 }
1270 sqlite3VdbeMemRelease(pRes);
drh0bce8352002-02-28 00:41:10 +00001271 }
1272}
drhdd5baa92002-02-27 19:50:59 +00001273
drhb0689692007-11-01 17:38:30 +00001274/*
1275** group_concat(EXPR, ?SEPARATOR?)
1276*/
1277static void groupConcatStep(
1278 sqlite3_context *context,
1279 int argc,
1280 sqlite3_value **argv
1281){
1282 const char *zVal;
drhade86482007-11-28 22:36:40 +00001283 StrAccum *pAccum;
drhb0689692007-11-01 17:38:30 +00001284 const char *zSep;
drh07d31172009-02-02 21:57:05 +00001285 int nVal, nSep;
1286 assert( argc==1 || argc==2 );
1287 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhade86482007-11-28 22:36:40 +00001288 pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
1289
1290 if( pAccum ){
drhbb4957f2008-03-20 14:03:29 +00001291 sqlite3 *db = sqlite3_context_db_handle(context);
drh8bfd7192009-06-19 16:44:41 +00001292 int firstTerm = pAccum->useMalloc==0;
drhade86482007-11-28 22:36:40 +00001293 pAccum->useMalloc = 1;
drhbb4957f2008-03-20 14:03:29 +00001294 pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
drh8bfd7192009-06-19 16:44:41 +00001295 if( !firstTerm ){
drh07d31172009-02-02 21:57:05 +00001296 if( argc==2 ){
1297 zSep = (char*)sqlite3_value_text(argv[1]);
1298 nSep = sqlite3_value_bytes(argv[1]);
drhb0689692007-11-01 17:38:30 +00001299 }else{
1300 zSep = ",";
drhade86482007-11-28 22:36:40 +00001301 nSep = 1;
drhb0689692007-11-01 17:38:30 +00001302 }
drhade86482007-11-28 22:36:40 +00001303 sqlite3StrAccumAppend(pAccum, zSep, nSep);
drhb0689692007-11-01 17:38:30 +00001304 }
drh07d31172009-02-02 21:57:05 +00001305 zVal = (char*)sqlite3_value_text(argv[0]);
1306 nVal = sqlite3_value_bytes(argv[0]);
1307 sqlite3StrAccumAppend(pAccum, zVal, nVal);
drhb0689692007-11-01 17:38:30 +00001308 }
1309}
1310static void groupConcatFinalize(sqlite3_context *context){
drhade86482007-11-28 22:36:40 +00001311 StrAccum *pAccum;
1312 pAccum = sqlite3_aggregate_context(context, 0);
1313 if( pAccum ){
1314 if( pAccum->tooBig ){
1315 sqlite3_result_error_toobig(context);
1316 }else if( pAccum->mallocFailed ){
1317 sqlite3_result_error_nomem(context);
1318 }else{
1319 sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1,
1320 sqlite3_free);
1321 }
drhb0689692007-11-01 17:38:30 +00001322 }
1323}
drh4e5ffc52004-08-31 00:52:37 +00001324
drhd3a149e2002-02-24 17:12:53 +00001325/*
drha2ed5602002-02-26 23:55:31 +00001326** This function registered all of the above C functions as SQL
1327** functions. This should be the only routine in this file with
1328** external linkage.
drhdc04c582002-02-24 01:55:15 +00001329*/
drh9bb575f2004-09-06 17:24:11 +00001330void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
drh1f01ec12005-02-15 21:36:18 +00001331#ifndef SQLITE_OMIT_ALTERTABLE
1332 sqlite3AlterFunctions(db);
1333#endif
danielk19771e536952007-08-16 10:09:01 +00001334 if( !db->mallocFailed ){
danielk1977832a58a2007-06-22 15:21:15 +00001335 int rc = sqlite3_overload_function(db, "MATCH", 2);
1336 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1337 if( rc==SQLITE_NOMEM ){
danielk19771e536952007-08-16 10:09:01 +00001338 db->mallocFailed = 1;
danielk1977832a58a2007-06-22 15:21:15 +00001339 }
1340 }
drh55ef4d92005-08-14 01:20:37 +00001341}
1342
1343/*
1344** Set the LIKEOPT flag on the 2-argument function with the given name.
1345*/
drh1bd10f82008-12-10 21:19:56 +00001346static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
drh55ef4d92005-08-14 01:20:37 +00001347 FuncDef *pDef;
drhea678832008-12-10 19:26:22 +00001348 pDef = sqlite3FindFunction(db, zName, sqlite3Strlen30(zName),
1349 2, SQLITE_UTF8, 0);
drhd27135a2009-04-02 13:36:37 +00001350 if( ALWAYS(pDef) ){
drhd64fe2f2005-08-28 17:00:23 +00001351 pDef->flags = flagVal;
drh55ef4d92005-08-14 01:20:37 +00001352 }
1353}
1354
1355/*
1356** Register the built-in LIKE and GLOB functions. The caseSensitive
1357** parameter determines whether or not the LIKE operator is case
1358** sensitive. GLOB is always case sensitive.
1359*/
1360void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1361 struct compareInfo *pInfo;
1362 if( caseSensitive ){
1363 pInfo = (struct compareInfo*)&likeInfoAlt;
1364 }else{
1365 pInfo = (struct compareInfo*)&likeInfoNorm;
1366 }
danielk1977717811c2009-03-27 15:26:03 +00001367 sqlite3CreateFunc(db, "like", 2, SQLITE_ANY, pInfo, likeFunc, 0, 0);
1368 sqlite3CreateFunc(db, "like", 3, SQLITE_ANY, pInfo, likeFunc, 0, 0);
1369 sqlite3CreateFunc(db, "glob", 2, SQLITE_ANY,
drh55ef4d92005-08-14 01:20:37 +00001370 (struct compareInfo*)&globInfo, likeFunc, 0,0);
drhd64fe2f2005-08-28 17:00:23 +00001371 setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
1372 setLikeOptFlag(db, "like",
1373 caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
drh55ef4d92005-08-14 01:20:37 +00001374}
1375
1376/*
1377** pExpr points to an expression which implements a function. If
1378** it is appropriate to apply the LIKE optimization to that function
1379** then set aWc[0] through aWc[2] to the wildcard characters and
1380** return TRUE. If the function is not a LIKE-style function then
1381** return FALSE.
1382*/
drhd64fe2f2005-08-28 17:00:23 +00001383int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
drh55ef4d92005-08-14 01:20:37 +00001384 FuncDef *pDef;
danielk19776ab3a2e2009-02-19 14:39:25 +00001385 if( pExpr->op!=TK_FUNCTION
1386 || !pExpr->x.pList
1387 || pExpr->x.pList->nExpr!=2
1388 ){
drh55ef4d92005-08-14 01:20:37 +00001389 return 0;
1390 }
danielk19776ab3a2e2009-02-19 14:39:25 +00001391 assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
drh33e619f2009-05-28 01:00:55 +00001392 pDef = sqlite3FindFunction(db, pExpr->u.zToken,
1393 sqlite3Strlen30(pExpr->u.zToken),
drhb7916a72009-05-27 10:31:29 +00001394 2, SQLITE_UTF8, 0);
drhd27135a2009-04-02 13:36:37 +00001395 if( NEVER(pDef==0) || (pDef->flags & SQLITE_FUNC_LIKE)==0 ){
drh55ef4d92005-08-14 01:20:37 +00001396 return 0;
1397 }
1398
1399 /* The memcpy() statement assumes that the wildcard characters are
1400 ** the first three statements in the compareInfo structure. The
1401 ** asserts() that follow verify that assumption
1402 */
1403 memcpy(aWc, pDef->pUserData, 3);
1404 assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1405 assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1406 assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
drhd64fe2f2005-08-28 17:00:23 +00001407 *pIsNocase = (pDef->flags & SQLITE_FUNC_CASE)==0;
drh55ef4d92005-08-14 01:20:37 +00001408 return 1;
drhdc04c582002-02-24 01:55:15 +00001409}
danielk19778c0a7912008-08-20 14:49:23 +00001410
drh70a8ca32008-08-21 18:49:27 +00001411/*
drh777c5382008-08-21 20:21:34 +00001412** All all of the FuncDef structures in the aBuiltinFunc[] array above
1413** to the global function hash table. This occurs at start-time (as
1414** a consequence of calling sqlite3_initialize()).
1415**
1416** After this routine runs
drh70a8ca32008-08-21 18:49:27 +00001417*/
1418void sqlite3RegisterGlobalFunctions(void){
danielk197793ce7412008-09-01 19:14:02 +00001419 /*
1420 ** The following array holds FuncDef structures for all of the functions
1421 ** defined in this file.
1422 **
1423 ** The array cannot be constant since changes are made to the
1424 ** FuncDef.pHash elements at start-time. The elements of this array
1425 ** are read-only after initialization is complete.
1426 */
1427 static SQLITE_WSD FuncDef aBuiltinFunc[] = {
1428 FUNCTION(ltrim, 1, 1, 0, trimFunc ),
1429 FUNCTION(ltrim, 2, 1, 0, trimFunc ),
1430 FUNCTION(rtrim, 1, 2, 0, trimFunc ),
1431 FUNCTION(rtrim, 2, 2, 0, trimFunc ),
1432 FUNCTION(trim, 1, 3, 0, trimFunc ),
1433 FUNCTION(trim, 2, 3, 0, trimFunc ),
1434 FUNCTION(min, -1, 0, 1, minmaxFunc ),
1435 FUNCTION(min, 0, 0, 1, 0 ),
1436 AGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize ),
1437 FUNCTION(max, -1, 1, 1, minmaxFunc ),
1438 FUNCTION(max, 0, 1, 1, 0 ),
1439 AGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize ),
1440 FUNCTION(typeof, 1, 0, 0, typeofFunc ),
1441 FUNCTION(length, 1, 0, 0, lengthFunc ),
1442 FUNCTION(substr, 2, 0, 0, substrFunc ),
1443 FUNCTION(substr, 3, 0, 0, substrFunc ),
1444 FUNCTION(abs, 1, 0, 0, absFunc ),
shanefbd60f82009-02-04 03:59:25 +00001445#ifndef SQLITE_OMIT_FLOATING_POINT
danielk197793ce7412008-09-01 19:14:02 +00001446 FUNCTION(round, 1, 0, 0, roundFunc ),
1447 FUNCTION(round, 2, 0, 0, roundFunc ),
shanefbd60f82009-02-04 03:59:25 +00001448#endif
danielk197793ce7412008-09-01 19:14:02 +00001449 FUNCTION(upper, 1, 0, 0, upperFunc ),
1450 FUNCTION(lower, 1, 0, 0, lowerFunc ),
1451 FUNCTION(coalesce, 1, 0, 0, 0 ),
danielk197793ce7412008-09-01 19:14:02 +00001452 FUNCTION(coalesce, 0, 0, 0, 0 ),
drhae6bb952009-11-11 00:24:31 +00001453/* FUNCTION(coalesce, -1, 0, 0, ifnullFunc ), */
1454 {-1,SQLITE_UTF8,SQLITE_FUNC_COALESCE,0,0,ifnullFunc,0,0,"coalesce",0},
danielk197793ce7412008-09-01 19:14:02 +00001455 FUNCTION(hex, 1, 0, 0, hexFunc ),
drhae6bb952009-11-11 00:24:31 +00001456/* FUNCTION(ifnull, 2, 0, 0, ifnullFunc ), */
1457 {2,SQLITE_UTF8,SQLITE_FUNC_COALESCE,0,0,ifnullFunc,0,0,"ifnull",0},
drh9373b012009-02-02 01:50:39 +00001458 FUNCTION(random, 0, 0, 0, randomFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001459 FUNCTION(randomblob, 1, 0, 0, randomBlob ),
1460 FUNCTION(nullif, 2, 0, 1, nullifFunc ),
1461 FUNCTION(sqlite_version, 0, 0, 0, versionFunc ),
drh47baebc2009-08-14 16:01:24 +00001462 FUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001463 FUNCTION(quote, 1, 0, 0, quoteFunc ),
1464 FUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid),
1465 FUNCTION(changes, 0, 0, 0, changes ),
1466 FUNCTION(total_changes, 0, 0, 0, total_changes ),
1467 FUNCTION(replace, 3, 0, 0, replaceFunc ),
1468 FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ),
1469 #ifdef SQLITE_SOUNDEX
1470 FUNCTION(soundex, 1, 0, 0, soundexFunc ),
1471 #endif
1472 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1473 FUNCTION(load_extension, 1, 0, 0, loadExt ),
1474 FUNCTION(load_extension, 2, 0, 0, loadExt ),
1475 #endif
1476 AGGREGATE(sum, 1, 0, 0, sumStep, sumFinalize ),
1477 AGGREGATE(total, 1, 0, 0, sumStep, totalFinalize ),
1478 AGGREGATE(avg, 1, 0, 0, sumStep, avgFinalize ),
danielk1977a5533162009-02-24 10:01:51 +00001479 /* AGGREGATE(count, 0, 0, 0, countStep, countFinalize ), */
1480 {0,SQLITE_UTF8,SQLITE_FUNC_COUNT,0,0,0,countStep,countFinalize,"count",0},
danielk197793ce7412008-09-01 19:14:02 +00001481 AGGREGATE(count, 1, 0, 0, countStep, countFinalize ),
drh07d31172009-02-02 21:57:05 +00001482 AGGREGATE(group_concat, 1, 0, 0, groupConcatStep, groupConcatFinalize),
1483 AGGREGATE(group_concat, 2, 0, 0, groupConcatStep, groupConcatFinalize),
danielk197793ce7412008-09-01 19:14:02 +00001484
1485 LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1486 #ifdef SQLITE_CASE_SENSITIVE_LIKE
1487 LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1488 LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1489 #else
1490 LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
1491 LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
1492 #endif
1493 };
1494
drh70a8ca32008-08-21 18:49:27 +00001495 int i;
danielk197793ce7412008-09-01 19:14:02 +00001496 FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
drh106cee52008-09-03 17:11:16 +00001497 FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aBuiltinFunc);
danielk197793ce7412008-09-01 19:14:02 +00001498
drh70a8ca32008-08-21 18:49:27 +00001499 for(i=0; i<ArraySize(aBuiltinFunc); i++){
danielk197793ce7412008-09-01 19:14:02 +00001500 sqlite3FuncDefInsert(pHash, &aFunc[i]);
drh70a8ca32008-08-21 18:49:27 +00001501 }
drh777c5382008-08-21 20:21:34 +00001502 sqlite3RegisterDateTimeFunctions();
drh70a8ca32008-08-21 18:49:27 +00001503}