blob: e657558ba2c5b1ec66161ff8f12edf0ed370fc5f [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/*
drh7a957892012-02-02 17:35:43 +000032** Indicate that the accumulator load should be skipped on this
33** iteration of the aggregate loop.
34*/
35static void sqlite3SkipAccumulatorLoad(sqlite3_context *context){
36 context->skipFlag = 1;
37}
38
39/*
drh0bce8352002-02-28 00:41:10 +000040** Implementation of the non-aggregate min() and max() functions
41*/
drhf9b596e2004-05-26 16:54:42 +000042static void minmaxFunc(
43 sqlite3_context *context,
44 int argc,
45 sqlite3_value **argv
46){
drh0bce8352002-02-28 00:41:10 +000047 int i;
drh268380c2004-02-25 13:47:31 +000048 int mask; /* 0 for min() or 0xffffffff for max() */
drhf9b596e2004-05-26 16:54:42 +000049 int iBest;
danielk1977dc1bdc42004-06-11 10:51:27 +000050 CollSeq *pColl;
drh0bce8352002-02-28 00:41:10 +000051
drh65595cd2009-02-02 16:32:55 +000052 assert( argc>1 );
drhc44af712004-09-02 15:53:56 +000053 mask = sqlite3_user_data(context)==0 ? 0 : -1;
danielk1977dc1bdc42004-06-11 10:51:27 +000054 pColl = sqlite3GetFuncCollSeq(context);
55 assert( pColl );
danielk1977c572ef72004-05-27 09:28:41 +000056 assert( mask==-1 || mask==0 );
drhf9b596e2004-05-26 16:54:42 +000057 iBest = 0;
drh9c054832004-05-31 18:51:57 +000058 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhf9b596e2004-05-26 16:54:42 +000059 for(i=1; i<argc; i++){
drh9c054832004-05-31 18:51:57 +000060 if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
danielk1977dc1bdc42004-06-11 10:51:27 +000061 if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
drh65595cd2009-02-02 16:32:55 +000062 testcase( mask==0 );
drhf9b596e2004-05-26 16:54:42 +000063 iBest = i;
drh0bce8352002-02-28 00:41:10 +000064 }
65 }
drhf4479502004-05-27 03:12:53 +000066 sqlite3_result_value(context, argv[iBest]);
drh0bce8352002-02-28 00:41:10 +000067}
drh0bce8352002-02-28 00:41:10 +000068
drh268380c2004-02-25 13:47:31 +000069/*
70** Return the type of the argument.
71*/
drhf9b596e2004-05-26 16:54:42 +000072static void typeofFunc(
73 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +000074 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +000075 sqlite3_value **argv
76){
danielk197735bb9d02004-05-24 12:55:54 +000077 const char *z = 0;
danielk197762c14b32008-11-19 09:05:26 +000078 UNUSED_PARAMETER(NotUsed);
danielk197735bb9d02004-05-24 12:55:54 +000079 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +000080 case SQLITE_INTEGER: z = "integer"; break;
81 case SQLITE_TEXT: z = "text"; break;
82 case SQLITE_FLOAT: z = "real"; break;
83 case SQLITE_BLOB: z = "blob"; break;
drh65595cd2009-02-02 16:32:55 +000084 default: z = "null"; break;
danielk197735bb9d02004-05-24 12:55:54 +000085 }
danielk1977d8123362004-06-12 09:25:12 +000086 sqlite3_result_text(context, z, -1, SQLITE_STATIC);
drh0bce8352002-02-28 00:41:10 +000087}
88
drh5708d2d2005-06-22 10:53:59 +000089
90/*
drh0bce8352002-02-28 00:41:10 +000091** Implementation of the length() function
92*/
drhf9b596e2004-05-26 16:54:42 +000093static void lengthFunc(
94 sqlite3_context *context,
95 int argc,
96 sqlite3_value **argv
97){
drh0bce8352002-02-28 00:41:10 +000098 int len;
99
100 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000101 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000102 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000103 case SQLITE_BLOB:
104 case SQLITE_INTEGER:
105 case SQLITE_FLOAT: {
drhf4479502004-05-27 03:12:53 +0000106 sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
drhf9b596e2004-05-26 16:54:42 +0000107 break;
108 }
drh9c054832004-05-31 18:51:57 +0000109 case SQLITE_TEXT: {
drh2646da72005-12-09 20:02:05 +0000110 const unsigned char *z = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +0000111 if( z==0 ) return;
drh4a919112007-05-15 11:55:09 +0000112 len = 0;
113 while( *z ){
114 len++;
115 SQLITE_SKIP_UTF8(z);
116 }
drhf4479502004-05-27 03:12:53 +0000117 sqlite3_result_int(context, len);
drhf9b596e2004-05-26 16:54:42 +0000118 break;
119 }
120 default: {
121 sqlite3_result_null(context);
122 break;
123 }
124 }
drh0bce8352002-02-28 00:41:10 +0000125}
126
127/*
drh2ba3ccc2009-12-08 02:06:08 +0000128** Implementation of the abs() function.
129**
130** IMP: R-23979-26855 The abs(X) function returns the absolute value of
131** the numeric argument X.
drh0bce8352002-02-28 00:41:10 +0000132*/
danielk19770ae8b832004-05-25 12:05:56 +0000133static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +0000134 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000135 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000136 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000137 case SQLITE_INTEGER: {
danielk1977f93bbbe2004-05-27 10:30:52 +0000138 i64 iVal = sqlite3_value_int64(argv[0]);
drh52fc8492006-02-23 21:43:55 +0000139 if( iVal<0 ){
drh693e6712014-01-24 22:58:00 +0000140 if( iVal==SMALLEST_INT64 ){
drheb091cd2013-11-09 19:47:15 +0000141 /* IMP: R-31676-45509 If X is the integer -9223372036854775808
142 ** then abs(X) throws an integer overflow error since there is no
drh2ba3ccc2009-12-08 02:06:08 +0000143 ** equivalent positive 64-bit two complement value. */
drh52fc8492006-02-23 21:43:55 +0000144 sqlite3_result_error(context, "integer overflow", -1);
145 return;
146 }
147 iVal = -iVal;
148 }
danielk1977f93bbbe2004-05-27 10:30:52 +0000149 sqlite3_result_int64(context, iVal);
drhf9b596e2004-05-26 16:54:42 +0000150 break;
151 }
drh9c054832004-05-31 18:51:57 +0000152 case SQLITE_NULL: {
drh2ba3ccc2009-12-08 02:06:08 +0000153 /* IMP: R-37434-19929 Abs(X) returns NULL if X is NULL. */
drhf9b596e2004-05-26 16:54:42 +0000154 sqlite3_result_null(context);
155 break;
156 }
157 default: {
drh2ba3ccc2009-12-08 02:06:08 +0000158 /* Because sqlite3_value_double() returns 0.0 if the argument is not
159 ** something that can be converted into a number, we have:
160 ** IMP: R-57326-31541 Abs(X) return 0.0 if X is a string or blob that
161 ** cannot be converted to a numeric value.
162 */
danielk1977f93bbbe2004-05-27 10:30:52 +0000163 double rVal = sqlite3_value_double(argv[0]);
drh52fc8492006-02-23 21:43:55 +0000164 if( rVal<0 ) rVal = -rVal;
danielk1977f93bbbe2004-05-27 10:30:52 +0000165 sqlite3_result_double(context, rVal);
drhf9b596e2004-05-26 16:54:42 +0000166 break;
167 }
168 }
drh0bce8352002-02-28 00:41:10 +0000169}
170
171/*
drhd55e0722012-10-25 03:07:29 +0000172** Implementation of the instr() function.
173**
174** instr(haystack,needle) finds the first occurrence of needle
175** in haystack and returns the number of previous characters plus 1,
176** or 0 if needle does not occur within haystack.
177**
178** If both haystack and needle are BLOBs, then the result is one more than
179** the number of bytes in haystack prior to the first occurrence of needle,
180** or 0 if needle never occurs in haystack.
181*/
182static void instrFunc(
183 sqlite3_context *context,
184 int argc,
185 sqlite3_value **argv
186){
187 const unsigned char *zHaystack;
188 const unsigned char *zNeedle;
189 int nHaystack;
190 int nNeedle;
191 int typeHaystack, typeNeedle;
192 int N = 1;
193 int isText;
194
drh68c804b2012-12-04 11:03:11 +0000195 UNUSED_PARAMETER(argc);
drhd55e0722012-10-25 03:07:29 +0000196 typeHaystack = sqlite3_value_type(argv[0]);
197 typeNeedle = sqlite3_value_type(argv[1]);
198 if( typeHaystack==SQLITE_NULL || typeNeedle==SQLITE_NULL ) return;
199 nHaystack = sqlite3_value_bytes(argv[0]);
200 nNeedle = sqlite3_value_bytes(argv[1]);
201 if( typeHaystack==SQLITE_BLOB && typeNeedle==SQLITE_BLOB ){
202 zHaystack = sqlite3_value_blob(argv[0]);
203 zNeedle = sqlite3_value_blob(argv[1]);
204 isText = 0;
205 }else{
206 zHaystack = sqlite3_value_text(argv[0]);
207 zNeedle = sqlite3_value_text(argv[1]);
208 isText = 1;
209 }
210 while( nNeedle<=nHaystack && memcmp(zHaystack, zNeedle, nNeedle)!=0 ){
211 N++;
212 do{
213 nHaystack--;
214 zHaystack++;
215 }while( isText && (zHaystack[0]&0xc0)==0x80 );
216 }
217 if( nNeedle>nHaystack ) N = 0;
218 sqlite3_result_int(context, N);
219}
220
221/*
drha5c14162013-12-17 15:03:06 +0000222** Implementation of the printf() function.
223*/
224static void printfFunc(
225 sqlite3_context *context,
226 int argc,
227 sqlite3_value **argv
228){
229 PrintfArguments x;
230 StrAccum str;
231 const char *zFormat;
232 int n;
233
234 if( argc>=1 && (zFormat = (const char*)sqlite3_value_text(argv[0]))!=0 ){
235 x.nArg = argc-1;
236 x.nUsed = 0;
237 x.apArg = argv+1;
238 sqlite3StrAccumInit(&str, 0, 0, SQLITE_MAX_LENGTH);
239 str.db = sqlite3_context_db_handle(context);
240 sqlite3XPrintf(&str, SQLITE_PRINTF_SQLFUNC, zFormat, &x);
241 n = str.nChar;
242 sqlite3_result_text(context, sqlite3StrAccumFinish(&str), n,
243 SQLITE_DYNAMIC);
244 }
245}
246
247/*
drhf764e6f2007-05-15 01:13:47 +0000248** Implementation of the substr() function.
249**
250** substr(x,p1,p2) returns p2 characters of x[] beginning with p1.
251** p1 is 1-indexed. So substr(x,1,1) returns the first character
252** of x. If x is text, then we actually count UTF-8 characters.
253** If x is a blob, then we count bytes.
254**
255** If p1 is negative, then we begin abs(p1) from the end of x[].
shaneh779b8f12009-11-12 05:04:50 +0000256**
drhf7b54962013-05-28 12:11:54 +0000257** If p2 is negative, return the p2 characters preceding p1.
drh0bce8352002-02-28 00:41:10 +0000258*/
drhf9b596e2004-05-26 16:54:42 +0000259static void substrFunc(
260 sqlite3_context *context,
261 int argc,
262 sqlite3_value **argv
263){
drh2646da72005-12-09 20:02:05 +0000264 const unsigned char *z;
265 const unsigned char *z2;
drh023ae032007-05-08 12:12:16 +0000266 int len;
drhf764e6f2007-05-15 01:13:47 +0000267 int p0type;
drh023ae032007-05-08 12:12:16 +0000268 i64 p1, p2;
drh65595cd2009-02-02 16:32:55 +0000269 int negP2 = 0;
drhf9b596e2004-05-26 16:54:42 +0000270
drh64f31512007-10-12 19:11:55 +0000271 assert( argc==3 || argc==2 );
drh8198d252009-02-01 19:42:37 +0000272 if( sqlite3_value_type(argv[1])==SQLITE_NULL
273 || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL)
274 ){
275 return;
276 }
drhf764e6f2007-05-15 01:13:47 +0000277 p0type = sqlite3_value_type(argv[0]);
drh4adc4cb2009-11-11 20:53:31 +0000278 p1 = sqlite3_value_int(argv[1]);
drhf764e6f2007-05-15 01:13:47 +0000279 if( p0type==SQLITE_BLOB ){
280 len = sqlite3_value_bytes(argv[0]);
281 z = sqlite3_value_blob(argv[0]);
282 if( z==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000283 assert( len==sqlite3_value_bytes(argv[0]) );
drhf764e6f2007-05-15 01:13:47 +0000284 }else{
285 z = sqlite3_value_text(argv[0]);
286 if( z==0 ) return;
drh4a919112007-05-15 11:55:09 +0000287 len = 0;
drh4adc4cb2009-11-11 20:53:31 +0000288 if( p1<0 ){
289 for(z2=z; *z2; len++){
290 SQLITE_SKIP_UTF8(z2);
291 }
drh4a919112007-05-15 11:55:09 +0000292 }
drhf764e6f2007-05-15 01:13:47 +0000293 }
drh64f31512007-10-12 19:11:55 +0000294 if( argc==3 ){
295 p2 = sqlite3_value_int(argv[2]);
drh65595cd2009-02-02 16:32:55 +0000296 if( p2<0 ){
297 p2 = -p2;
298 negP2 = 1;
299 }
drh64f31512007-10-12 19:11:55 +0000300 }else{
drhbb4957f2008-03-20 14:03:29 +0000301 p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH];
drh64f31512007-10-12 19:11:55 +0000302 }
drh0bce8352002-02-28 00:41:10 +0000303 if( p1<0 ){
drh89425d52002-02-28 03:04:48 +0000304 p1 += len;
drh653bc752002-02-28 03:31:10 +0000305 if( p1<0 ){
306 p2 += p1;
drh65595cd2009-02-02 16:32:55 +0000307 if( p2<0 ) p2 = 0;
drh653bc752002-02-28 03:31:10 +0000308 p1 = 0;
309 }
drh0bce8352002-02-28 00:41:10 +0000310 }else if( p1>0 ){
311 p1--;
drh65595cd2009-02-02 16:32:55 +0000312 }else if( p2>0 ){
313 p2--;
drh0bce8352002-02-28 00:41:10 +0000314 }
drh65595cd2009-02-02 16:32:55 +0000315 if( negP2 ){
316 p1 -= p2;
drh4e79c592009-02-01 19:23:32 +0000317 if( p1<0 ){
318 p2 += p1;
319 p1 = 0;
320 }
321 }
drh65595cd2009-02-02 16:32:55 +0000322 assert( p1>=0 && p2>=0 );
drhf764e6f2007-05-15 01:13:47 +0000323 if( p0type!=SQLITE_BLOB ){
drh4a919112007-05-15 11:55:09 +0000324 while( *z && p1 ){
325 SQLITE_SKIP_UTF8(z);
326 p1--;
drhf764e6f2007-05-15 01:13:47 +0000327 }
drh4a919112007-05-15 11:55:09 +0000328 for(z2=z; *z2 && p2; p2--){
329 SQLITE_SKIP_UTF8(z2);
drhf764e6f2007-05-15 01:13:47 +0000330 }
drh1bd10f82008-12-10 21:19:56 +0000331 sqlite3_result_text(context, (char*)z, (int)(z2-z), SQLITE_TRANSIENT);
drhf764e6f2007-05-15 01:13:47 +0000332 }else{
drh4adc4cb2009-11-11 20:53:31 +0000333 if( p1+p2>len ){
334 p2 = len-p1;
335 if( p2<0 ) p2 = 0;
336 }
drh1bd10f82008-12-10 21:19:56 +0000337 sqlite3_result_blob(context, (char*)&z[p1], (int)p2, SQLITE_TRANSIENT);
drh0bce8352002-02-28 00:41:10 +0000338 }
drh0bce8352002-02-28 00:41:10 +0000339}
340
341/*
342** Implementation of the round() function
343*/
shanefbd60f82009-02-04 03:59:25 +0000344#ifndef SQLITE_OMIT_FLOATING_POINT
danielk19770ae8b832004-05-25 12:05:56 +0000345static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197751ad0ec2004-05-24 12:39:02 +0000346 int n = 0;
drh0bce8352002-02-28 00:41:10 +0000347 double r;
drh50d654d2009-06-03 01:24:54 +0000348 char *zBuf;
drh0bce8352002-02-28 00:41:10 +0000349 assert( argc==1 || argc==2 );
danielk197751ad0ec2004-05-24 12:39:02 +0000350 if( argc==2 ){
drh9c054832004-05-31 18:51:57 +0000351 if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
danielk197751ad0ec2004-05-24 12:39:02 +0000352 n = sqlite3_value_int(argv[1]);
353 if( n>30 ) n = 30;
354 if( n<0 ) n = 0;
355 }
drhd589a922006-03-02 03:02:48 +0000356 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drh4f26d6c2004-05-26 23:25:30 +0000357 r = sqlite3_value_double(argv[0]);
shaneh147e1762010-02-17 04:19:27 +0000358 /* If Y==0 and X will fit in a 64-bit int,
359 ** handle the rounding directly,
360 ** otherwise use printf.
361 */
362 if( n==0 && r>=0 && r<LARGEST_INT64-1 ){
363 r = (double)((sqlite_int64)(r+0.5));
364 }else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){
365 r = -(double)((sqlite_int64)((-r)+0.5));
drh50d654d2009-06-03 01:24:54 +0000366 }else{
shaneh147e1762010-02-17 04:19:27 +0000367 zBuf = sqlite3_mprintf("%.*f",n,r);
368 if( zBuf==0 ){
369 sqlite3_result_error_nomem(context);
370 return;
371 }
drh9339da12010-09-30 00:50:49 +0000372 sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8);
drh50d654d2009-06-03 01:24:54 +0000373 sqlite3_free(zBuf);
drh50d654d2009-06-03 01:24:54 +0000374 }
shaneh147e1762010-02-17 04:19:27 +0000375 sqlite3_result_double(context, r);
drh0bce8352002-02-28 00:41:10 +0000376}
shanefbd60f82009-02-04 03:59:25 +0000377#endif
drhdc04c582002-02-24 01:55:15 +0000378
danielk197726783a52007-08-29 14:06:22 +0000379/*
380** Allocate nByte bytes of space using sqlite3_malloc(). If the
381** allocation fails, call sqlite3_result_error_nomem() to notify
drh27e62db2009-04-02 10:16:17 +0000382** the database handle that malloc() has failed and return NULL.
383** If nByte is larger than the maximum string or blob length, then
384** raise an SQLITE_TOOBIG exception and return NULL.
danielk197726783a52007-08-29 14:06:22 +0000385*/
drhb1a6c3c2008-03-20 16:30:17 +0000386static void *contextMalloc(sqlite3_context *context, i64 nByte){
drhbb4957f2008-03-20 14:03:29 +0000387 char *z;
drh27e62db2009-04-02 10:16:17 +0000388 sqlite3 *db = sqlite3_context_db_handle(context);
drhef31c6a2009-04-02 09:07:12 +0000389 assert( nByte>0 );
drh27e62db2009-04-02 10:16:17 +0000390 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] );
391 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
392 if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drhbb4957f2008-03-20 14:03:29 +0000393 sqlite3_result_error_toobig(context);
394 z = 0;
395 }else{
drh1bd10f82008-12-10 21:19:56 +0000396 z = sqlite3Malloc((int)nByte);
drhef31c6a2009-04-02 09:07:12 +0000397 if( !z ){
drhbb4957f2008-03-20 14:03:29 +0000398 sqlite3_result_error_nomem(context);
399 }
danielk1977a1644fd2007-08-29 12:31:25 +0000400 }
401 return z;
402}
403
drhdc04c582002-02-24 01:55:15 +0000404/*
405** Implementation of the upper() and lower() SQL functions.
406*/
danielk19770ae8b832004-05-25 12:05:56 +0000407static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh7a521cf2007-04-25 18:23:52 +0000408 char *z1;
409 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000410 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000411 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000412 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000413 n = sqlite3_value_bytes(argv[0]);
414 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
415 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000416 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000417 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000418 if( z1 ){
drhdf901d32011-10-13 18:00:11 +0000419 for(i=0; i<n; i++){
420 z1[i] = (char)sqlite3Toupper(z2[i]);
drh7a521cf2007-04-25 18:23:52 +0000421 }
drhdf901d32011-10-13 18:00:11 +0000422 sqlite3_result_text(context, z1, n, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000423 }
drhdc04c582002-02-24 01:55:15 +0000424 }
425}
danielk19770ae8b832004-05-25 12:05:56 +0000426static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdf901d32011-10-13 18:00:11 +0000427 char *z1;
drh7a521cf2007-04-25 18:23:52 +0000428 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000429 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000430 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000431 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000432 n = sqlite3_value_bytes(argv[0]);
433 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
434 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000435 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000436 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000437 if( z1 ){
drhdf901d32011-10-13 18:00:11 +0000438 for(i=0; i<n; i++){
439 z1[i] = sqlite3Tolower(z2[i]);
drh7a521cf2007-04-25 18:23:52 +0000440 }
drhdf901d32011-10-13 18:00:11 +0000441 sqlite3_result_text(context, z1, n, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000442 }
drhdc04c582002-02-24 01:55:15 +0000443 }
444}
445
drhae6bb952009-11-11 00:24:31 +0000446/*
drhcca9f3d2013-09-06 15:23:29 +0000447** Some functions like COALESCE() and IFNULL() and UNLIKELY() are implemented
448** as VDBE code so that unused argument values do not have to be computed.
449** However, we still need some kind of function implementation for this
450** routines in the function table. The noopFunc macro provides this.
451** noopFunc will never be called so it doesn't matter what the implementation
452** is. We might as well use the "version()" function as a substitute.
drhae6bb952009-11-11 00:24:31 +0000453*/
drhcca9f3d2013-09-06 15:23:29 +0000454#define noopFunc versionFunc /* Substitute function - never called */
drh3212e182002-02-28 00:46:26 +0000455
456/*
drhf9ffac92002-03-02 19:00:31 +0000457** Implementation of random(). Return a random integer.
458*/
drhf9b596e2004-05-26 16:54:42 +0000459static void randomFunc(
460 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000461 int NotUsed,
462 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000463){
drh52fc8492006-02-23 21:43:55 +0000464 sqlite_int64 r;
danielk197762c14b32008-11-19 09:05:26 +0000465 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drh2fa18682008-03-19 14:15:34 +0000466 sqlite3_randomness(sizeof(r), &r);
drh3034e3d2009-04-02 14:05:21 +0000467 if( r<0 ){
468 /* We need to prevent a random number of 0x8000000000000000
469 ** (or -9223372036854775808) since when you do abs() of that
470 ** number of you get the same value back again. To do this
471 ** in a way that is testable, mask the sign bit off of negative
472 ** values, resulting in a positive value. Then take the
473 ** 2s complement of that positive value. The end result can
474 ** therefore be no less than -9223372036854775807.
475 */
drhaf8001b2012-02-11 19:53:24 +0000476 r = -(r & LARGEST_INT64);
drh3034e3d2009-04-02 14:05:21 +0000477 }
drh52fc8492006-02-23 21:43:55 +0000478 sqlite3_result_int64(context, r);
drhf9ffac92002-03-02 19:00:31 +0000479}
480
481/*
drh137c7282007-01-29 17:58:28 +0000482** Implementation of randomblob(N). Return a random blob
483** that is N bytes long.
drh63cf66f2007-01-29 15:50:05 +0000484*/
drh137c7282007-01-29 17:58:28 +0000485static void randomBlob(
drh63cf66f2007-01-29 15:50:05 +0000486 sqlite3_context *context,
487 int argc,
488 sqlite3_value **argv
489){
drh137c7282007-01-29 17:58:28 +0000490 int n;
491 unsigned char *p;
drh63cf66f2007-01-29 15:50:05 +0000492 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000493 UNUSED_PARAMETER(argc);
drh63cf66f2007-01-29 15:50:05 +0000494 n = sqlite3_value_int(argv[0]);
drh023ae032007-05-08 12:12:16 +0000495 if( n<1 ){
496 n = 1;
497 }
danielk1977a1644fd2007-08-29 12:31:25 +0000498 p = contextMalloc(context, n);
drh02d85832007-05-07 19:31:15 +0000499 if( p ){
drh2fa18682008-03-19 14:15:34 +0000500 sqlite3_randomness(n, p);
drh17435752007-08-16 04:30:38 +0000501 sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
drh02d85832007-05-07 19:31:15 +0000502 }
drh63cf66f2007-01-29 15:50:05 +0000503}
504
505/*
drh6ed41ad2002-04-06 14:10:47 +0000506** Implementation of the last_insert_rowid() SQL function. The return
danielk197724b03fd2004-05-10 10:34:34 +0000507** value is the same as the sqlite3_last_insert_rowid() API function.
drh6ed41ad2002-04-06 14:10:47 +0000508*/
danielk197751ad0ec2004-05-24 12:39:02 +0000509static void last_insert_rowid(
danielk19770ae8b832004-05-25 12:05:56 +0000510 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000511 int NotUsed,
512 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000513){
drhfa4a4b92008-03-19 21:45:51 +0000514 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000515 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000516 /* IMP: R-51513-12026 The last_insert_rowid() SQL function is a
517 ** wrapper around the sqlite3_last_insert_rowid() C/C++ interface
518 ** function. */
drhf9b596e2004-05-26 16:54:42 +0000519 sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
drh6ed41ad2002-04-06 14:10:47 +0000520}
521
rdcf146a772004-02-25 22:51:06 +0000522/*
drhab2f1f92010-01-11 18:26:42 +0000523** Implementation of the changes() SQL function.
524**
525** IMP: R-62073-11209 The changes() SQL function is a wrapper
526** around the sqlite3_changes() C/C++ function and hence follows the same
527** rules for counting changes.
rdcf146a772004-02-25 22:51:06 +0000528*/
danielk1977b28af712004-06-21 06:50:26 +0000529static void changes(
drhf9b596e2004-05-26 16:54:42 +0000530 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000531 int NotUsed,
532 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000533){
drhfa4a4b92008-03-19 21:45:51 +0000534 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000535 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhf4479502004-05-27 03:12:53 +0000536 sqlite3_result_int(context, sqlite3_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000537}
rdcf146a772004-02-25 22:51:06 +0000538
539/*
danielk1977b28af712004-06-21 06:50:26 +0000540** Implementation of the total_changes() SQL function. The return value is
541** the same as the sqlite3_total_changes() API function.
rdcf146a772004-02-25 22:51:06 +0000542*/
danielk1977b28af712004-06-21 06:50:26 +0000543static void total_changes(
544 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000545 int NotUsed,
546 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000547){
drhfa4a4b92008-03-19 21:45:51 +0000548 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000549 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000550 /* IMP: R-52756-41993 This function is a wrapper around the
551 ** sqlite3_total_changes() C/C++ interface. */
danielk1977b28af712004-06-21 06:50:26 +0000552 sqlite3_result_int(context, sqlite3_total_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000553}
554
drh6ed41ad2002-04-06 14:10:47 +0000555/*
drh4e5ffc52004-08-31 00:52:37 +0000556** A structure defining how to do GLOB-style comparisons.
danielk1977d02eb1f2004-06-06 09:44:03 +0000557*/
drh4e5ffc52004-08-31 00:52:37 +0000558struct compareInfo {
559 u8 matchAll;
560 u8 matchOne;
561 u8 matchSet;
562 u8 noCase;
danielk1977d02eb1f2004-06-06 09:44:03 +0000563};
drh55ef4d92005-08-14 01:20:37 +0000564
drhb9175ae2007-12-07 18:39:04 +0000565/*
566** For LIKE and GLOB matching on EBCDIC machines, assume that every
567** character is exactly one byte in size. Also, all characters are
568** able to participate in upper-case-to-lower-case mappings in EBCDIC
569** whereas only characters less than 0x80 do in ASCII.
570*/
571#if defined(SQLITE_EBCDIC)
drh42610962012-09-17 18:56:32 +0000572# define sqlite3Utf8Read(A) (*((*A)++))
drh6e1b1672013-09-12 23:12:08 +0000573# define GlobUpperToLower(A) A = sqlite3UpperToLower[A]
drhb9175ae2007-12-07 18:39:04 +0000574#else
drh6e1b1672013-09-12 23:12:08 +0000575# define GlobUpperToLower(A) if( !((A)&~0x7f) ){ A = sqlite3UpperToLower[A]; }
drhb9175ae2007-12-07 18:39:04 +0000576#endif
577
drh4e5ffc52004-08-31 00:52:37 +0000578static const struct compareInfo globInfo = { '*', '?', '[', 0 };
drh55ef4d92005-08-14 01:20:37 +0000579/* The correct SQL-92 behavior is for the LIKE operator to ignore
580** case. Thus 'a' LIKE 'A' would be true. */
581static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
582/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
583** is case sensitive causing 'a' LIKE 'A' to be false */
584static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
danielk1977d02eb1f2004-06-06 09:44:03 +0000585
586/*
drh4e5ffc52004-08-31 00:52:37 +0000587** Compare two UTF-8 strings for equality where the first string can
588** potentially be a "glob" expression. Return true (1) if they
589** are the same and false (0) if they are different.
drh0ac65892002-04-20 14:24:41 +0000590**
drh4e5ffc52004-08-31 00:52:37 +0000591** Globbing rules:
drh0ac65892002-04-20 14:24:41 +0000592**
drh4e5ffc52004-08-31 00:52:37 +0000593** '*' Matches any sequence of zero or more characters.
danielk1977d02eb1f2004-06-06 09:44:03 +0000594**
drh4e5ffc52004-08-31 00:52:37 +0000595** '?' Matches exactly one character.
596**
597** [...] Matches one character from the enclosed list of
598** characters.
599**
600** [^...] Matches one character not in the enclosed list.
601**
602** With the [...] and [^...] matching, a ']' character can be included
603** in the list by making it the first character after '[' or '^'. A
604** range of characters can be specified using '-'. Example:
605** "[a-z]" matches any single lower-case letter. To match a '-', make
606** it the last character in the list.
607**
608** This routine is usually quick, but can be N**2 in the worst case.
609**
610** Hints: to match '*' or '?', put them in "[]". Like this:
611**
612** abc[*]xyz Matches "abc*xyz" only
drh0ac65892002-04-20 14:24:41 +0000613*/
danielk19777c6303c2004-11-17 16:41:29 +0000614static int patternCompare(
drh4e5ffc52004-08-31 00:52:37 +0000615 const u8 *zPattern, /* The glob pattern */
616 const u8 *zString, /* The string to compare against the glob */
danielk19777c6303c2004-11-17 16:41:29 +0000617 const struct compareInfo *pInfo, /* Information about how to do the compare */
drh0a32fa62011-06-13 12:19:21 +0000618 u32 esc /* The escape character */
danielk197751ad0ec2004-05-24 12:39:02 +0000619){
drh0a32fa62011-06-13 12:19:21 +0000620 u32 c, c2;
drh4e5ffc52004-08-31 00:52:37 +0000621 int invert;
622 int seen;
drh4e5ffc52004-08-31 00:52:37 +0000623 u8 matchOne = pInfo->matchOne;
624 u8 matchAll = pInfo->matchAll;
625 u8 matchSet = pInfo->matchSet;
626 u8 noCase = pInfo->noCase;
danielk19777c6303c2004-11-17 16:41:29 +0000627 int prevEscape = 0; /* True if the previous character was 'escape' */
danielk1977d02eb1f2004-06-06 09:44:03 +0000628
drh42610962012-09-17 18:56:32 +0000629 while( (c = sqlite3Utf8Read(&zPattern))!=0 ){
630 if( c==matchAll && !prevEscape ){
631 while( (c=sqlite3Utf8Read(&zPattern)) == matchAll
drh66150952007-07-23 19:12:41 +0000632 || c == matchOne ){
drh42610962012-09-17 18:56:32 +0000633 if( c==matchOne && sqlite3Utf8Read(&zString)==0 ){
drh66150952007-07-23 19:12:41 +0000634 return 0;
drh4e5ffc52004-08-31 00:52:37 +0000635 }
danielk1977ad7dd422004-06-06 12:41:49 +0000636 }
drh66150952007-07-23 19:12:41 +0000637 if( c==0 ){
638 return 1;
639 }else if( c==esc ){
drh42610962012-09-17 18:56:32 +0000640 c = sqlite3Utf8Read(&zPattern);
drh66150952007-07-23 19:12:41 +0000641 if( c==0 ){
642 return 0;
643 }
644 }else if( c==matchSet ){
645 assert( esc==0 ); /* This is GLOB, not LIKE */
646 assert( matchSet<0x80 ); /* '[' is a single-byte character */
647 while( *zString && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){
drh4a919112007-05-15 11:55:09 +0000648 SQLITE_SKIP_UTF8(zString);
drh4e5ffc52004-08-31 00:52:37 +0000649 }
650 return *zString!=0;
drh66150952007-07-23 19:12:41 +0000651 }
drh42610962012-09-17 18:56:32 +0000652 while( (c2 = sqlite3Utf8Read(&zString))!=0 ){
drh66150952007-07-23 19:12:41 +0000653 if( noCase ){
drh6e1b1672013-09-12 23:12:08 +0000654 GlobUpperToLower(c2);
655 GlobUpperToLower(c);
drh66150952007-07-23 19:12:41 +0000656 while( c2 != 0 && c2 != c ){
drh42610962012-09-17 18:56:32 +0000657 c2 = sqlite3Utf8Read(&zString);
drh6e1b1672013-09-12 23:12:08 +0000658 GlobUpperToLower(c2);
drh4e5ffc52004-08-31 00:52:37 +0000659 }
drh66150952007-07-23 19:12:41 +0000660 }else{
661 while( c2 != 0 && c2 != c ){
drh42610962012-09-17 18:56:32 +0000662 c2 = sqlite3Utf8Read(&zString);
drh66150952007-07-23 19:12:41 +0000663 }
drh4e5ffc52004-08-31 00:52:37 +0000664 }
drh66150952007-07-23 19:12:41 +0000665 if( c2==0 ) return 0;
666 if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
667 }
668 return 0;
drh42610962012-09-17 18:56:32 +0000669 }else if( c==matchOne && !prevEscape ){
670 if( sqlite3Utf8Read(&zString)==0 ){
drh4e5ffc52004-08-31 00:52:37 +0000671 return 0;
danielk1977d02eb1f2004-06-06 09:44:03 +0000672 }
drh4e5ffc52004-08-31 00:52:37 +0000673 }else if( c==matchSet ){
drh1aa4f3e2011-06-15 12:43:36 +0000674 u32 prior_c = 0;
danielk19777c6303c2004-11-17 16:41:29 +0000675 assert( esc==0 ); /* This only occurs for GLOB, not LIKE */
drh4e5ffc52004-08-31 00:52:37 +0000676 seen = 0;
677 invert = 0;
drh42610962012-09-17 18:56:32 +0000678 c = sqlite3Utf8Read(&zString);
drh4e5ffc52004-08-31 00:52:37 +0000679 if( c==0 ) return 0;
drh42610962012-09-17 18:56:32 +0000680 c2 = sqlite3Utf8Read(&zPattern);
drh66150952007-07-23 19:12:41 +0000681 if( c2=='^' ){
682 invert = 1;
drh42610962012-09-17 18:56:32 +0000683 c2 = sqlite3Utf8Read(&zPattern);
drh66150952007-07-23 19:12:41 +0000684 }
drh4e5ffc52004-08-31 00:52:37 +0000685 if( c2==']' ){
686 if( c==']' ) seen = 1;
drh42610962012-09-17 18:56:32 +0000687 c2 = sqlite3Utf8Read(&zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000688 }
drh66150952007-07-23 19:12:41 +0000689 while( c2 && c2!=']' ){
690 if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
drh42610962012-09-17 18:56:32 +0000691 c2 = sqlite3Utf8Read(&zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000692 if( c>=prior_c && c<=c2 ) seen = 1;
693 prior_c = 0;
drh4e5ffc52004-08-31 00:52:37 +0000694 }else{
drh66150952007-07-23 19:12:41 +0000695 if( c==c2 ){
696 seen = 1;
697 }
drh4e5ffc52004-08-31 00:52:37 +0000698 prior_c = c2;
699 }
drh42610962012-09-17 18:56:32 +0000700 c2 = sqlite3Utf8Read(&zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000701 }
drh66150952007-07-23 19:12:41 +0000702 if( c2==0 || (seen ^ invert)==0 ){
703 return 0;
704 }
705 }else if( esc==c && !prevEscape ){
danielk19777c6303c2004-11-17 16:41:29 +0000706 prevEscape = 1;
drh4e5ffc52004-08-31 00:52:37 +0000707 }else{
drh42610962012-09-17 18:56:32 +0000708 c2 = sqlite3Utf8Read(&zString);
drh4e5ffc52004-08-31 00:52:37 +0000709 if( noCase ){
drh6e1b1672013-09-12 23:12:08 +0000710 GlobUpperToLower(c);
711 GlobUpperToLower(c2);
drh4e5ffc52004-08-31 00:52:37 +0000712 }
drh66150952007-07-23 19:12:41 +0000713 if( c!=c2 ){
714 return 0;
715 }
danielk19777c6303c2004-11-17 16:41:29 +0000716 prevEscape = 0;
danielk1977d02eb1f2004-06-06 09:44:03 +0000717 }
danielk197751ad0ec2004-05-24 12:39:02 +0000718 }
drh4e5ffc52004-08-31 00:52:37 +0000719 return *zString==0;
drh0ac65892002-04-20 14:24:41 +0000720}
drh4e5ffc52004-08-31 00:52:37 +0000721
drh55ef4d92005-08-14 01:20:37 +0000722/*
drh56282a52013-04-10 16:13:38 +0000723** The sqlite3_strglob() interface.
724*/
725int sqlite3_strglob(const char *zGlobPattern, const char *zString){
726 return patternCompare((u8*)zGlobPattern, (u8*)zString, &globInfo, 0)==0;
727}
728
729/*
drh55ef4d92005-08-14 01:20:37 +0000730** Count the number of times that the LIKE operator (or GLOB which is
731** just a variation of LIKE) gets called. This is used for testing
732** only.
733*/
734#ifdef SQLITE_TEST
735int sqlite3_like_count = 0;
736#endif
737
danielk19773f6b0872004-06-17 05:36:44 +0000738
739/*
740** Implementation of the like() SQL function. This function implements
741** the build-in LIKE operator. The first argument to the function is the
742** pattern and the second argument is the string. So, the SQL statements:
743**
744** A LIKE B
745**
746** is implemented as like(B,A).
747**
drh55ef4d92005-08-14 01:20:37 +0000748** This same function (with a different compareInfo structure) computes
749** the GLOB operator.
danielk19773f6b0872004-06-17 05:36:44 +0000750*/
751static void likeFunc(
752 sqlite3_context *context,
753 int argc,
754 sqlite3_value **argv
755){
drhbeb818d2007-05-08 15:34:47 +0000756 const unsigned char *zA, *zB;
drh0a32fa62011-06-13 12:19:21 +0000757 u32 escape = 0;
drh27e62db2009-04-02 10:16:17 +0000758 int nPat;
drhbb4957f2008-03-20 14:03:29 +0000759 sqlite3 *db = sqlite3_context_db_handle(context);
drhbeb818d2007-05-08 15:34:47 +0000760
drh1f0feef2007-05-15 13:27:07 +0000761 zB = sqlite3_value_text(argv[0]);
762 zA = sqlite3_value_text(argv[1]);
763
drhbeb818d2007-05-08 15:34:47 +0000764 /* Limit the length of the LIKE or GLOB pattern to avoid problems
765 ** of deep recursion and N*N behavior in patternCompare().
766 */
drh27e62db2009-04-02 10:16:17 +0000767 nPat = sqlite3_value_bytes(argv[0]);
768 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );
769 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );
770 if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
drhbeb818d2007-05-08 15:34:47 +0000771 sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
772 return;
773 }
drh1f0feef2007-05-15 13:27:07 +0000774 assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */
drhbeb818d2007-05-08 15:34:47 +0000775
danielk19777c6303c2004-11-17 16:41:29 +0000776 if( argc==3 ){
777 /* The escape character string must consist of a single UTF-8 character.
778 ** Otherwise, return an error.
779 */
780 const unsigned char *zEsc = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +0000781 if( zEsc==0 ) return;
drhee858132007-05-08 20:37:38 +0000782 if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
danielk19777c6303c2004-11-17 16:41:29 +0000783 sqlite3_result_error(context,
784 "ESCAPE expression must be a single character", -1);
785 return;
786 }
drh42610962012-09-17 18:56:32 +0000787 escape = sqlite3Utf8Read(&zEsc);
danielk19777c6303c2004-11-17 16:41:29 +0000788 }
danielk19773f6b0872004-06-17 05:36:44 +0000789 if( zA && zB ){
drh55ef4d92005-08-14 01:20:37 +0000790 struct compareInfo *pInfo = sqlite3_user_data(context);
791#ifdef SQLITE_TEST
792 sqlite3_like_count++;
793#endif
drhbeb818d2007-05-08 15:34:47 +0000794
danielk1977b56fe1f2007-05-09 08:24:44 +0000795 sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape));
danielk197751ad0ec2004-05-24 12:39:02 +0000796 }
drh8912d102002-05-26 21:34:58 +0000797}
798
799/*
800** Implementation of the NULLIF(x,y) function. The result is the first
801** argument if the arguments are different. The result is NULL if the
802** arguments are equal to each other.
803*/
drhf9b596e2004-05-26 16:54:42 +0000804static void nullifFunc(
805 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000806 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +0000807 sqlite3_value **argv
808){
danielk1977dc1bdc42004-06-11 10:51:27 +0000809 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk197762c14b32008-11-19 09:05:26 +0000810 UNUSED_PARAMETER(NotUsed);
danielk1977dc1bdc42004-06-11 10:51:27 +0000811 if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
drhf4479502004-05-27 03:12:53 +0000812 sqlite3_result_value(context, argv[0]);
drh8912d102002-05-26 21:34:58 +0000813 }
drh0ac65892002-04-20 14:24:41 +0000814}
815
drh647cb0e2002-11-04 19:32:25 +0000816/*
drh47baebc2009-08-14 16:01:24 +0000817** Implementation of the sqlite_version() function. The result is the version
drh647cb0e2002-11-04 19:32:25 +0000818** of the SQLite library that is running.
819*/
drhf9b596e2004-05-26 16:54:42 +0000820static void versionFunc(
821 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000822 int NotUsed,
823 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000824){
danielk197762c14b32008-11-19 09:05:26 +0000825 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000826 /* IMP: R-48699-48617 This function is an SQL wrapper around the
827 ** sqlite3_libversion() C-interface. */
828 sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC);
drh647cb0e2002-11-04 19:32:25 +0000829}
830
drh47baebc2009-08-14 16:01:24 +0000831/*
832** Implementation of the sqlite_source_id() function. The result is a string
833** that identifies the particular version of the source code used to build
834** SQLite.
835*/
836static void sourceidFunc(
837 sqlite3_context *context,
838 int NotUsed,
839 sqlite3_value **NotUsed2
840){
841 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000842 /* IMP: R-24470-31136 This function is an SQL wrapper around the
843 ** sqlite3_sourceid() C interface. */
844 sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC);
drh47baebc2009-08-14 16:01:24 +0000845}
846
shanehbdea6d12010-02-23 04:19:54 +0000847/*
drh3ca84ef2011-04-25 18:03:10 +0000848** Implementation of the sqlite_log() function. This is a wrapper around
849** sqlite3_log(). The return value is NULL. The function exists purely for
850** its side-effects.
851*/
drh840561f2011-04-27 18:08:42 +0000852static void errlogFunc(
drh3ca84ef2011-04-25 18:03:10 +0000853 sqlite3_context *context,
854 int argc,
855 sqlite3_value **argv
856){
857 UNUSED_PARAMETER(argc);
858 UNUSED_PARAMETER(context);
859 sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1]));
860}
861
862/*
shanehdc97a8c2010-02-23 20:08:35 +0000863** Implementation of the sqlite_compileoption_used() function.
864** The result is an integer that identifies if the compiler option
865** was used to build SQLite.
shanehbdea6d12010-02-23 04:19:54 +0000866*/
shanehdc97a8c2010-02-23 20:08:35 +0000867#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
868static void compileoptionusedFunc(
shanehbdea6d12010-02-23 04:19:54 +0000869 sqlite3_context *context,
shanehdc97a8c2010-02-23 20:08:35 +0000870 int argc,
871 sqlite3_value **argv
shanehbdea6d12010-02-23 04:19:54 +0000872){
shanehdc97a8c2010-02-23 20:08:35 +0000873 const char *zOptName;
874 assert( argc==1 );
875 UNUSED_PARAMETER(argc);
drha3e414c2010-08-03 18:06:25 +0000876 /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL
877 ** function is a wrapper around the sqlite3_compileoption_used() C/C++
878 ** function.
879 */
drh264a2d42010-02-25 15:28:41 +0000880 if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){
shanehdc97a8c2010-02-23 20:08:35 +0000881 sqlite3_result_int(context, sqlite3_compileoption_used(zOptName));
shanehdc97a8c2010-02-23 20:08:35 +0000882 }
shanehbdea6d12010-02-23 04:19:54 +0000883}
shanehdc97a8c2010-02-23 20:08:35 +0000884#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
885
886/*
887** Implementation of the sqlite_compileoption_get() function.
888** The result is a string that identifies the compiler options
889** used to build SQLite.
890*/
891#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
892static void compileoptiongetFunc(
893 sqlite3_context *context,
894 int argc,
895 sqlite3_value **argv
896){
897 int n;
898 assert( argc==1 );
899 UNUSED_PARAMETER(argc);
drha3e414c2010-08-03 18:06:25 +0000900 /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function
901 ** is a wrapper around the sqlite3_compileoption_get() C/C++ function.
902 */
shanehdc97a8c2010-02-23 20:08:35 +0000903 n = sqlite3_value_int(argv[0]);
904 sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC);
905}
906#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
shanehbdea6d12010-02-23 04:19:54 +0000907
drh137c7282007-01-29 17:58:28 +0000908/* Array for converting from half-bytes (nybbles) into ASCII hex
909** digits. */
910static const char hexdigits[] = {
911 '0', '1', '2', '3', '4', '5', '6', '7',
912 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
913};
danielk1977d641d642004-11-18 15:44:29 +0000914
drh47394702003-08-20 01:03:33 +0000915/*
drh47394702003-08-20 01:03:33 +0000916** Implementation of the QUOTE() function. This function takes a single
917** argument. If the argument is numeric, the return value is the same as
918** the argument. If the argument is NULL, the return value is the string
919** "NULL". Otherwise, the argument is enclosed in single quotes with
920** single-quote escapes.
921*/
danielk19770ae8b832004-05-25 12:05:56 +0000922static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drha0df4cc2009-02-02 17:29:59 +0000923 assert( argc==1 );
drh1d34fde2009-02-03 15:50:33 +0000924 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000925 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000926 case SQLITE_FLOAT: {
drh72b3fbc2012-06-19 03:11:25 +0000927 double r1, r2;
drh72b3fbc2012-06-19 03:11:25 +0000928 char zBuf[50];
mistachkin2b434a72012-06-19 04:36:48 +0000929 r1 = sqlite3_value_double(argv[0]);
drh72b3fbc2012-06-19 03:11:25 +0000930 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.15g", r1);
931 sqlite3AtoF(zBuf, &r2, 20, SQLITE_UTF8);
932 if( r1!=r2 ){
933 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.20e", r1);
934 }
935 sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
936 break;
937 }
938 case SQLITE_INTEGER: {
drhf4479502004-05-27 03:12:53 +0000939 sqlite3_result_value(context, argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000940 break;
941 }
danielk19773f41e972004-06-08 00:39:01 +0000942 case SQLITE_BLOB: {
danielk19773f41e972004-06-08 00:39:01 +0000943 char *zText = 0;
danielk19773f41e972004-06-08 00:39:01 +0000944 char const *zBlob = sqlite3_value_blob(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000945 int nBlob = sqlite3_value_bytes(argv[0]);
946 assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +0000947 zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4);
danielk1977a1644fd2007-08-29 12:31:25 +0000948 if( zText ){
danielk19773f41e972004-06-08 00:39:01 +0000949 int i;
950 for(i=0; i<nBlob; i++){
951 zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
952 zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
953 }
954 zText[(nBlob*2)+2] = '\'';
955 zText[(nBlob*2)+3] = '\0';
956 zText[0] = 'X';
957 zText[1] = '\'';
danielk1977d8123362004-06-12 09:25:12 +0000958 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
drh17435752007-08-16 04:30:38 +0000959 sqlite3_free(zText);
danielk19773f41e972004-06-08 00:39:01 +0000960 }
961 break;
962 }
drh9c054832004-05-31 18:51:57 +0000963 case SQLITE_TEXT: {
drh023ae032007-05-08 12:12:16 +0000964 int i,j;
965 u64 n;
drh2646da72005-12-09 20:02:05 +0000966 const unsigned char *zArg = sqlite3_value_text(argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000967 char *z;
968
drh7a521cf2007-04-25 18:23:52 +0000969 if( zArg==0 ) return;
drh023ae032007-05-08 12:12:16 +0000970 for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
drhb1a6c3c2008-03-20 16:30:17 +0000971 z = contextMalloc(context, ((i64)i)+((i64)n)+3);
danielk1977a1644fd2007-08-29 12:31:25 +0000972 if( z ){
973 z[0] = '\'';
974 for(i=0, j=1; zArg[i]; i++){
975 z[j++] = zArg[i];
976 if( zArg[i]=='\'' ){
977 z[j++] = '\'';
978 }
drhf9b596e2004-05-26 16:54:42 +0000979 }
danielk1977a1644fd2007-08-29 12:31:25 +0000980 z[j++] = '\'';
981 z[j] = 0;
982 sqlite3_result_text(context, z, j, sqlite3_free);
drhf9b596e2004-05-26 16:54:42 +0000983 }
drha0df4cc2009-02-02 17:29:59 +0000984 break;
985 }
986 default: {
987 assert( sqlite3_value_type(argv[0])==SQLITE_NULL );
988 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
989 break;
drhf9b596e2004-05-26 16:54:42 +0000990 }
drh47394702003-08-20 01:03:33 +0000991 }
992}
993
drh137c7282007-01-29 17:58:28 +0000994/*
drhd495d8c2013-02-22 19:34:25 +0000995** The unicode() function. Return the integer unicode code-point value
996** for the first character of the input string.
997*/
998static void unicodeFunc(
999 sqlite3_context *context,
1000 int argc,
1001 sqlite3_value **argv
1002){
1003 const unsigned char *z = sqlite3_value_text(argv[0]);
drh1d59d032013-03-01 23:40:26 +00001004 (void)argc;
drhd495d8c2013-02-22 19:34:25 +00001005 if( z && z[0] ) sqlite3_result_int(context, sqlite3Utf8Read(&z));
1006}
1007
1008/*
1009** The char() function takes zero or more arguments, each of which is
1010** an integer. It constructs a string where each character of the string
1011** is the unicode character for the corresponding integer argument.
1012*/
1013static void charFunc(
1014 sqlite3_context *context,
1015 int argc,
1016 sqlite3_value **argv
1017){
1018 unsigned char *z, *zOut;
1019 int i;
1020 zOut = z = sqlite3_malloc( argc*4 );
1021 if( z==0 ){
1022 sqlite3_result_error_nomem(context);
1023 return;
1024 }
1025 for(i=0; i<argc; i++){
mistachkinc9545442013-02-26 05:42:30 +00001026 sqlite3_int64 x;
drhd495d8c2013-02-22 19:34:25 +00001027 unsigned c;
1028 x = sqlite3_value_int64(argv[i]);
1029 if( x<0 || x>0x10ffff ) x = 0xfffd;
1030 c = (unsigned)(x & 0x1fffff);
drhfe7a5d12013-03-07 14:00:04 +00001031 if( c<0x00080 ){
1032 *zOut++ = (u8)(c&0xFF);
1033 }else if( c<0x00800 ){
1034 *zOut++ = 0xC0 + (u8)((c>>6)&0x1F);
1035 *zOut++ = 0x80 + (u8)(c & 0x3F);
1036 }else if( c<0x10000 ){
1037 *zOut++ = 0xE0 + (u8)((c>>12)&0x0F);
1038 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1039 *zOut++ = 0x80 + (u8)(c & 0x3F);
drhd495d8c2013-02-22 19:34:25 +00001040 }else{
drhfe7a5d12013-03-07 14:00:04 +00001041 *zOut++ = 0xF0 + (u8)((c>>18) & 0x07);
1042 *zOut++ = 0x80 + (u8)((c>>12) & 0x3F);
1043 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1044 *zOut++ = 0x80 + (u8)(c & 0x3F);
1045 } \
drhd495d8c2013-02-22 19:34:25 +00001046 }
drhfe7a5d12013-03-07 14:00:04 +00001047 sqlite3_result_text(context, (char*)z, (int)(zOut-z), sqlite3_free);
drhd495d8c2013-02-22 19:34:25 +00001048}
1049
1050/*
drh137c7282007-01-29 17:58:28 +00001051** The hex() function. Interpret the argument as a blob. Return
1052** a hexadecimal rendering as text.
1053*/
1054static void hexFunc(
1055 sqlite3_context *context,
1056 int argc,
1057 sqlite3_value **argv
1058){
1059 int i, n;
1060 const unsigned char *pBlob;
1061 char *zHex, *z;
1062 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001063 UNUSED_PARAMETER(argc);
drh1f0feef2007-05-15 13:27:07 +00001064 pBlob = sqlite3_value_blob(argv[0]);
drh137c7282007-01-29 17:58:28 +00001065 n = sqlite3_value_bytes(argv[0]);
drh1f0feef2007-05-15 13:27:07 +00001066 assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +00001067 z = zHex = contextMalloc(context, ((i64)n)*2 + 1);
danielk1977a1644fd2007-08-29 12:31:25 +00001068 if( zHex ){
1069 for(i=0; i<n; i++, pBlob++){
1070 unsigned char c = *pBlob;
1071 *(z++) = hexdigits[(c>>4)&0xf];
1072 *(z++) = hexdigits[c&0xf];
1073 }
1074 *z = 0;
1075 sqlite3_result_text(context, zHex, n*2, sqlite3_free);
drh137c7282007-01-29 17:58:28 +00001076 }
drh137c7282007-01-29 17:58:28 +00001077}
1078
drh26b6d902007-03-17 13:27:54 +00001079/*
drh8cff3822007-05-02 02:08:28 +00001080** The zeroblob(N) function returns a zero-filled blob of size N bytes.
1081*/
1082static void zeroblobFunc(
1083 sqlite3_context *context,
1084 int argc,
1085 sqlite3_value **argv
1086){
drh98640a32007-06-07 19:08:32 +00001087 i64 n;
drh27e62db2009-04-02 10:16:17 +00001088 sqlite3 *db = sqlite3_context_db_handle(context);
drh8cff3822007-05-02 02:08:28 +00001089 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001090 UNUSED_PARAMETER(argc);
drh98640a32007-06-07 19:08:32 +00001091 n = sqlite3_value_int64(argv[0]);
drh27e62db2009-04-02 10:16:17 +00001092 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH] );
1093 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
1094 if( n>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drh98640a32007-06-07 19:08:32 +00001095 sqlite3_result_error_toobig(context);
1096 }else{
drhab2f1f92010-01-11 18:26:42 +00001097 sqlite3_result_zeroblob(context, (int)n); /* IMP: R-00293-64994 */
drh98640a32007-06-07 19:08:32 +00001098 }
drh8cff3822007-05-02 02:08:28 +00001099}
1100
1101/*
drh26b6d902007-03-17 13:27:54 +00001102** The replace() function. Three arguments are all strings: call
1103** them A, B, and C. The result is also a string which is derived
drhf7b54962013-05-28 12:11:54 +00001104** from A by replacing every occurrence of B with C. The match
drh26b6d902007-03-17 13:27:54 +00001105** must be exact. Collating sequences are not used.
1106*/
1107static void replaceFunc(
1108 sqlite3_context *context,
1109 int argc,
1110 sqlite3_value **argv
1111){
1112 const unsigned char *zStr; /* The input string A */
1113 const unsigned char *zPattern; /* The pattern string B */
1114 const unsigned char *zRep; /* The replacement string C */
1115 unsigned char *zOut; /* The output */
1116 int nStr; /* Size of zStr */
1117 int nPattern; /* Size of zPattern */
1118 int nRep; /* Size of zRep */
drh2e6400b2007-05-08 15:46:18 +00001119 i64 nOut; /* Maximum size of zOut */
drh26b6d902007-03-17 13:27:54 +00001120 int loopLimit; /* Last zStr[] that might match zPattern[] */
1121 int i, j; /* Loop counters */
1122
1123 assert( argc==3 );
danielk1977f3d3c272008-11-19 16:52:44 +00001124 UNUSED_PARAMETER(argc);
drh26b6d902007-03-17 13:27:54 +00001125 zStr = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001126 if( zStr==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001127 nStr = sqlite3_value_bytes(argv[0]);
1128 assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001129 zPattern = sqlite3_value_text(argv[1]);
drha605fe82009-02-01 18:08:40 +00001130 if( zPattern==0 ){
drh23336062009-02-03 13:19:12 +00001131 assert( sqlite3_value_type(argv[1])==SQLITE_NULL
1132 || sqlite3_context_db_handle(context)->mallocFailed );
drha605fe82009-02-01 18:08:40 +00001133 return;
1134 }
1135 if( zPattern[0]==0 ){
1136 assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
1137 sqlite3_result_value(context, argv[0]);
1138 return;
1139 }
drh1f0feef2007-05-15 13:27:07 +00001140 nPattern = sqlite3_value_bytes(argv[1]);
1141 assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001142 zRep = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +00001143 if( zRep==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001144 nRep = sqlite3_value_bytes(argv[2]);
1145 assert( zRep==sqlite3_value_text(argv[2]) );
drh2e6400b2007-05-08 15:46:18 +00001146 nOut = nStr + 1;
1147 assert( nOut<SQLITE_MAX_LENGTH );
drhb1a6c3c2008-03-20 16:30:17 +00001148 zOut = contextMalloc(context, (i64)nOut);
drh2e6400b2007-05-08 15:46:18 +00001149 if( zOut==0 ){
1150 return;
drh26b6d902007-03-17 13:27:54 +00001151 }
drh26b6d902007-03-17 13:27:54 +00001152 loopLimit = nStr - nPattern;
1153 for(i=j=0; i<=loopLimit; i++){
1154 if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
1155 zOut[j++] = zStr[i];
1156 }else{
drh4a50aac2007-08-23 02:47:53 +00001157 u8 *zOld;
drhbb4957f2008-03-20 14:03:29 +00001158 sqlite3 *db = sqlite3_context_db_handle(context);
drh2e6400b2007-05-08 15:46:18 +00001159 nOut += nRep - nPattern;
drh27e62db2009-04-02 10:16:17 +00001160 testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
1161 testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
1162 if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drha0206bc2007-05-08 15:15:02 +00001163 sqlite3_result_error_toobig(context);
drhb9755982010-07-24 16:34:37 +00001164 sqlite3_free(zOut);
danielk197717374e82007-05-08 14:39:04 +00001165 return;
1166 }
drh4a50aac2007-08-23 02:47:53 +00001167 zOld = zOut;
drh2e6400b2007-05-08 15:46:18 +00001168 zOut = sqlite3_realloc(zOut, (int)nOut);
1169 if( zOut==0 ){
danielk1977a1644fd2007-08-29 12:31:25 +00001170 sqlite3_result_error_nomem(context);
drhb9755982010-07-24 16:34:37 +00001171 sqlite3_free(zOld);
drh2e6400b2007-05-08 15:46:18 +00001172 return;
1173 }
drh26b6d902007-03-17 13:27:54 +00001174 memcpy(&zOut[j], zRep, nRep);
1175 j += nRep;
1176 i += nPattern-1;
1177 }
1178 }
drh2e6400b2007-05-08 15:46:18 +00001179 assert( j+nStr-i+1==nOut );
drh26b6d902007-03-17 13:27:54 +00001180 memcpy(&zOut[j], &zStr[i], nStr-i);
1181 j += nStr - i;
1182 assert( j<=nOut );
1183 zOut[j] = 0;
1184 sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
1185}
1186
drh309b3382007-03-17 17:52:42 +00001187/*
1188** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
1189** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
1190*/
1191static void trimFunc(
1192 sqlite3_context *context,
1193 int argc,
1194 sqlite3_value **argv
1195){
1196 const unsigned char *zIn; /* Input string */
1197 const unsigned char *zCharSet; /* Set of characters to trim */
1198 int nIn; /* Number of bytes in input */
drh7209c692008-04-27 18:40:11 +00001199 int flags; /* 1: trimleft 2: trimright 3: trim */
drhd1e3a612007-04-27 21:59:52 +00001200 int i; /* Loop counter */
drh1bd10f82008-12-10 21:19:56 +00001201 unsigned char *aLen = 0; /* Length of each character in zCharSet */
1202 unsigned char **azChar = 0; /* Individual characters in zCharSet */
drhd1e3a612007-04-27 21:59:52 +00001203 int nChar; /* Number of characters in zCharSet */
1204
drh309b3382007-03-17 17:52:42 +00001205 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1206 return;
1207 }
1208 zIn = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001209 if( zIn==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001210 nIn = sqlite3_value_bytes(argv[0]);
1211 assert( zIn==sqlite3_value_text(argv[0]) );
drh309b3382007-03-17 17:52:42 +00001212 if( argc==1 ){
drhd1e3a612007-04-27 21:59:52 +00001213 static const unsigned char lenOne[] = { 1 };
danielk1977a4de4532008-09-02 15:44:08 +00001214 static unsigned char * const azOne[] = { (u8*)" " };
drhd1e3a612007-04-27 21:59:52 +00001215 nChar = 1;
drh8cff3822007-05-02 02:08:28 +00001216 aLen = (u8*)lenOne;
danielk1977bc67da42007-12-11 04:23:19 +00001217 azChar = (unsigned char **)azOne;
drhd1e3a612007-04-27 21:59:52 +00001218 zCharSet = 0;
drh7a521cf2007-04-25 18:23:52 +00001219 }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
drh309b3382007-03-17 17:52:42 +00001220 return;
drhd1e3a612007-04-27 21:59:52 +00001221 }else{
1222 const unsigned char *z;
1223 for(z=zCharSet, nChar=0; *z; nChar++){
drh4a919112007-05-15 11:55:09 +00001224 SQLITE_SKIP_UTF8(z);
drhd1e3a612007-04-27 21:59:52 +00001225 }
1226 if( nChar>0 ){
drhb1a6c3c2008-03-20 16:30:17 +00001227 azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));
drhd1e3a612007-04-27 21:59:52 +00001228 if( azChar==0 ){
1229 return;
1230 }
1231 aLen = (unsigned char*)&azChar[nChar];
1232 for(z=zCharSet, nChar=0; *z; nChar++){
danielk1977bc67da42007-12-11 04:23:19 +00001233 azChar[nChar] = (unsigned char *)z;
drh4a919112007-05-15 11:55:09 +00001234 SQLITE_SKIP_UTF8(z);
drh3abbd392008-12-10 23:04:13 +00001235 aLen[nChar] = (u8)(z - azChar[nChar]);
drhd1e3a612007-04-27 21:59:52 +00001236 }
1237 }
drh309b3382007-03-17 17:52:42 +00001238 }
drhd1e3a612007-04-27 21:59:52 +00001239 if( nChar>0 ){
shane1fc41292008-07-08 22:28:48 +00001240 flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
drh309b3382007-03-17 17:52:42 +00001241 if( flags & 1 ){
drhd1e3a612007-04-27 21:59:52 +00001242 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001243 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001244 for(i=0; i<nChar; i++){
1245 len = aLen[i];
drh27e62db2009-04-02 10:16:17 +00001246 if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
drhd1e3a612007-04-27 21:59:52 +00001247 }
1248 if( i>=nChar ) break;
1249 zIn += len;
1250 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001251 }
1252 }
1253 if( flags & 2 ){
drhd1e3a612007-04-27 21:59:52 +00001254 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001255 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001256 for(i=0; i<nChar; i++){
1257 len = aLen[i];
1258 if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
1259 }
1260 if( i>=nChar ) break;
1261 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001262 }
1263 }
drhd1e3a612007-04-27 21:59:52 +00001264 if( zCharSet ){
1265 sqlite3_free(azChar);
1266 }
drh309b3382007-03-17 17:52:42 +00001267 }
1268 sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
1269}
drh26b6d902007-03-17 13:27:54 +00001270
danielk1977a4de4532008-09-02 15:44:08 +00001271
drh2ba3ccc2009-12-08 02:06:08 +00001272/* IMP: R-25361-16150 This function is omitted from SQLite by default. It
1273** is only available if the SQLITE_SOUNDEX compile-time option is used
1274** when SQLite is built.
1275*/
drhd24cc422003-03-27 12:51:24 +00001276#ifdef SQLITE_SOUNDEX
1277/*
1278** Compute the soundex encoding of a word.
drh2ba3ccc2009-12-08 02:06:08 +00001279**
1280** IMP: R-59782-00072 The soundex(X) function returns a string that is the
1281** soundex encoding of the string X.
drhd24cc422003-03-27 12:51:24 +00001282*/
drh137c7282007-01-29 17:58:28 +00001283static void soundexFunc(
1284 sqlite3_context *context,
1285 int argc,
1286 sqlite3_value **argv
1287){
drhd24cc422003-03-27 12:51:24 +00001288 char zResult[8];
drh4c755c02004-08-08 20:22:17 +00001289 const u8 *zIn;
drhd24cc422003-03-27 12:51:24 +00001290 int i, j;
1291 static const unsigned char iCode[] = {
1292 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1293 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1294 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1295 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1296 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1297 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1298 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1299 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1300 };
1301 assert( argc==1 );
drh4c755c02004-08-08 20:22:17 +00001302 zIn = (u8*)sqlite3_value_text(argv[0]);
drhbdf67e02006-08-19 11:34:01 +00001303 if( zIn==0 ) zIn = (u8*)"";
drhdc86e2b2009-01-24 11:30:42 +00001304 for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
drhd24cc422003-03-27 12:51:24 +00001305 if( zIn[i] ){
drhbdf67e02006-08-19 11:34:01 +00001306 u8 prevcode = iCode[zIn[i]&0x7f];
danielk197778ca0e72009-01-20 16:53:39 +00001307 zResult[0] = sqlite3Toupper(zIn[i]);
drhd24cc422003-03-27 12:51:24 +00001308 for(j=1; j<4 && zIn[i]; i++){
1309 int code = iCode[zIn[i]&0x7f];
1310 if( code>0 ){
drhbdf67e02006-08-19 11:34:01 +00001311 if( code!=prevcode ){
1312 prevcode = code;
1313 zResult[j++] = code + '0';
1314 }
1315 }else{
1316 prevcode = 0;
drhd24cc422003-03-27 12:51:24 +00001317 }
1318 }
1319 while( j<4 ){
1320 zResult[j++] = '0';
1321 }
1322 zResult[j] = 0;
danielk1977d8123362004-06-12 09:25:12 +00001323 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
drhd24cc422003-03-27 12:51:24 +00001324 }else{
drh2ba3ccc2009-12-08 02:06:08 +00001325 /* IMP: R-64894-50321 The string "?000" is returned if the argument
1326 ** is NULL or contains no ASCII alphabetic characters. */
danielk1977d8123362004-06-12 09:25:12 +00001327 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
drhd24cc422003-03-27 12:51:24 +00001328 }
1329}
drh2ba3ccc2009-12-08 02:06:08 +00001330#endif /* SQLITE_SOUNDEX */
drhd24cc422003-03-27 12:51:24 +00001331
drhfdb83b22006-06-17 14:12:47 +00001332#ifndef SQLITE_OMIT_LOAD_EXTENSION
1333/*
1334** A function that loads a shared-library extension then returns NULL.
1335*/
1336static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197765fd59f2006-06-24 11:51:33 +00001337 const char *zFile = (const char *)sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001338 const char *zProc;
drhfa4a4b92008-03-19 21:45:51 +00001339 sqlite3 *db = sqlite3_context_db_handle(context);
drhfdb83b22006-06-17 14:12:47 +00001340 char *zErrMsg = 0;
1341
1342 if( argc==2 ){
danielk197765fd59f2006-06-24 11:51:33 +00001343 zProc = (const char *)sqlite3_value_text(argv[1]);
drh7a521cf2007-04-25 18:23:52 +00001344 }else{
1345 zProc = 0;
drhfdb83b22006-06-17 14:12:47 +00001346 }
drh7a521cf2007-04-25 18:23:52 +00001347 if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
drhfdb83b22006-06-17 14:12:47 +00001348 sqlite3_result_error(context, zErrMsg, -1);
1349 sqlite3_free(zErrMsg);
1350 }
1351}
1352#endif
1353
danielk197701427a62005-01-11 13:02:33 +00001354
drh0ac65892002-04-20 14:24:41 +00001355/*
drhd3a149e2002-02-24 17:12:53 +00001356** An instance of the following structure holds the context of a
drhdd5baa92002-02-27 19:50:59 +00001357** sum() or avg() aggregate computation.
1358*/
1359typedef struct SumCtx SumCtx;
1360struct SumCtx {
drh8c08e862006-02-11 17:34:00 +00001361 double rSum; /* Floating point sum */
1362 i64 iSum; /* Integer sum */
1363 i64 cnt; /* Number of elements summed */
1364 u8 overflow; /* True if integer overflow seen */
1365 u8 approx; /* True if non-integer value was input to the sum */
drhdd5baa92002-02-27 19:50:59 +00001366};
1367
1368/*
drha97fdd32006-01-12 22:17:50 +00001369** Routines used to compute the sum, average, and total.
1370**
1371** The SUM() function follows the (broken) SQL standard which means
1372** that it returns NULL if it sums over no inputs. TOTAL returns
1373** 0.0 in that case. In addition, TOTAL always returns a float where
1374** SUM might return an integer if it never encounters a floating point
drhc806d852006-05-11 13:25:39 +00001375** value. TOTAL never fails, but SUM might through an exception if
1376** it overflows an integer.
drhdd5baa92002-02-27 19:50:59 +00001377*/
danielk19770ae8b832004-05-25 12:05:56 +00001378static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdd5baa92002-02-27 19:50:59 +00001379 SumCtx *p;
drh3d1d95e2005-09-08 10:37:01 +00001380 int type;
drh3f219f42005-09-08 19:45:57 +00001381 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001382 UNUSED_PARAMETER(argc);
drh4f26d6c2004-05-26 23:25:30 +00001383 p = sqlite3_aggregate_context(context, sizeof(*p));
drh29d72102006-02-09 22:13:41 +00001384 type = sqlite3_value_numeric_type(argv[0]);
drh3d1d95e2005-09-08 10:37:01 +00001385 if( p && type!=SQLITE_NULL ){
drh739105c2002-05-29 23:22:23 +00001386 p->cnt++;
drh29d72102006-02-09 22:13:41 +00001387 if( type==SQLITE_INTEGER ){
drh8c08e862006-02-11 17:34:00 +00001388 i64 v = sqlite3_value_int64(argv[0]);
1389 p->rSum += v;
drh158b9cb2011-03-05 20:59:46 +00001390 if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){
1391 p->overflow = 1;
drh29d72102006-02-09 22:13:41 +00001392 }
1393 }else{
drh8c08e862006-02-11 17:34:00 +00001394 p->rSum += sqlite3_value_double(argv[0]);
drh29d72102006-02-09 22:13:41 +00001395 p->approx = 1;
drh3f219f42005-09-08 19:45:57 +00001396 }
drh739105c2002-05-29 23:22:23 +00001397 }
drhdd5baa92002-02-27 19:50:59 +00001398}
danielk19770ae8b832004-05-25 12:05:56 +00001399static void sumFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001400 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001401 p = sqlite3_aggregate_context(context, 0);
drhc2bd9132005-09-08 20:37:43 +00001402 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001403 if( p->overflow ){
1404 sqlite3_result_error(context,"integer overflow",-1);
1405 }else if( p->approx ){
1406 sqlite3_result_double(context, p->rSum);
drhc2bd9132005-09-08 20:37:43 +00001407 }else{
drh8c08e862006-02-11 17:34:00 +00001408 sqlite3_result_int64(context, p->iSum);
drhc2bd9132005-09-08 20:37:43 +00001409 }
drh3d1d95e2005-09-08 10:37:01 +00001410 }
drhdd5baa92002-02-27 19:50:59 +00001411}
danielk19770ae8b832004-05-25 12:05:56 +00001412static void avgFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001413 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001414 p = sqlite3_aggregate_context(context, 0);
drh739105c2002-05-29 23:22:23 +00001415 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001416 sqlite3_result_double(context, p->rSum/(double)p->cnt);
drhdd5baa92002-02-27 19:50:59 +00001417 }
1418}
drha97fdd32006-01-12 22:17:50 +00001419static void totalFinalize(sqlite3_context *context){
1420 SumCtx *p;
1421 p = sqlite3_aggregate_context(context, 0);
shanefbd60f82009-02-04 03:59:25 +00001422 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
1423 sqlite3_result_double(context, p ? p->rSum : (double)0);
drha97fdd32006-01-12 22:17:50 +00001424}
drhdd5baa92002-02-27 19:50:59 +00001425
1426/*
drh0bce8352002-02-28 00:41:10 +00001427** The following structure keeps track of state information for the
1428** count() aggregate function.
1429*/
1430typedef struct CountCtx CountCtx;
1431struct CountCtx {
drhfc6ad392006-02-09 13:38:19 +00001432 i64 n;
drh0bce8352002-02-28 00:41:10 +00001433};
drhdd5baa92002-02-27 19:50:59 +00001434
drh0bce8352002-02-28 00:41:10 +00001435/*
1436** Routines to implement the count() aggregate function.
1437*/
danielk19770ae8b832004-05-25 12:05:56 +00001438static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +00001439 CountCtx *p;
drh4f26d6c2004-05-26 23:25:30 +00001440 p = sqlite3_aggregate_context(context, sizeof(*p));
drh9c054832004-05-31 18:51:57 +00001441 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
drh0bce8352002-02-28 00:41:10 +00001442 p->n++;
1443 }
drh2e79c3d2009-04-08 23:04:14 +00001444
drhd3264c72009-04-15 13:39:47 +00001445#ifndef SQLITE_OMIT_DEPRECATED
drh2e79c3d2009-04-08 23:04:14 +00001446 /* The sqlite3_aggregate_count() function is deprecated. But just to make
1447 ** sure it still operates correctly, verify that its count agrees with our
1448 ** internal count when using count(*) and when the total count can be
1449 ** expressed as a 32-bit integer. */
1450 assert( argc==1 || p==0 || p->n>0x7fffffff
1451 || p->n==sqlite3_aggregate_count(context) );
drhd3264c72009-04-15 13:39:47 +00001452#endif
drh0bce8352002-02-28 00:41:10 +00001453}
danielk19770ae8b832004-05-25 12:05:56 +00001454static void countFinalize(sqlite3_context *context){
drh0bce8352002-02-28 00:41:10 +00001455 CountCtx *p;
drhabfcea22005-09-06 20:36:48 +00001456 p = sqlite3_aggregate_context(context, 0);
drhfc6ad392006-02-09 13:38:19 +00001457 sqlite3_result_int64(context, p ? p->n : 0);
drh0bce8352002-02-28 00:41:10 +00001458}
1459
1460/*
drh0bce8352002-02-28 00:41:10 +00001461** Routines to implement min() and max() aggregate functions.
1462*/
danielk197762c14b32008-11-19 09:05:26 +00001463static void minmaxStep(
1464 sqlite3_context *context,
1465 int NotUsed,
1466 sqlite3_value **argv
1467){
danielk197788208052004-05-25 01:13:20 +00001468 Mem *pArg = (Mem *)argv[0];
drh9eb516c2004-07-18 20:52:32 +00001469 Mem *pBest;
danielk197762c14b32008-11-19 09:05:26 +00001470 UNUSED_PARAMETER(NotUsed);
drh9eb516c2004-07-18 20:52:32 +00001471
drh9eb516c2004-07-18 20:52:32 +00001472 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
danielk19773aeab9e2004-06-24 00:20:04 +00001473 if( !pBest ) return;
drh268380c2004-02-25 13:47:31 +00001474
drh94a6d992012-02-02 18:42:09 +00001475 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1476 if( pBest->flags ) sqlite3SkipAccumulatorLoad(context);
1477 }else if( pBest->flags ){
drh9eb516c2004-07-18 20:52:32 +00001478 int max;
1479 int cmp;
danielk1977dc1bdc42004-06-11 10:51:27 +00001480 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk19777e18c252004-05-25 11:47:24 +00001481 /* This step function is used for both the min() and max() aggregates,
1482 ** the only difference between the two being that the sense of the
1483 ** comparison is inverted. For the max() aggregate, the
1484 ** sqlite3_user_data() function returns (void *)-1. For min() it
1485 ** returns (void *)db, where db is the sqlite3* database pointer.
1486 ** Therefore the next statement sets variable 'max' to 1 for the max()
1487 ** aggregate, or 0 for min().
1488 */
drh309b3382007-03-17 17:52:42 +00001489 max = sqlite3_user_data(context)!=0;
danielk1977dc1bdc42004-06-11 10:51:27 +00001490 cmp = sqlite3MemCompare(pBest, pArg, pColl);
danielk197788208052004-05-25 01:13:20 +00001491 if( (max && cmp<0) || (!max && cmp>0) ){
drhb21c8cd2007-08-21 19:33:56 +00001492 sqlite3VdbeMemCopy(pBest, pArg);
drh7a957892012-02-02 17:35:43 +00001493 }else{
1494 sqlite3SkipAccumulatorLoad(context);
danielk197788208052004-05-25 01:13:20 +00001495 }
drh268380c2004-02-25 13:47:31 +00001496 }else{
drhb21c8cd2007-08-21 19:33:56 +00001497 sqlite3VdbeMemCopy(pBest, pArg);
drh0bce8352002-02-28 00:41:10 +00001498 }
1499}
danielk19770ae8b832004-05-25 12:05:56 +00001500static void minMaxFinalize(sqlite3_context *context){
danielk197788208052004-05-25 01:13:20 +00001501 sqlite3_value *pRes;
drhabfcea22005-09-06 20:36:48 +00001502 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1503 if( pRes ){
drh94a6d992012-02-02 18:42:09 +00001504 if( pRes->flags ){
drhabfcea22005-09-06 20:36:48 +00001505 sqlite3_result_value(context, pRes);
1506 }
1507 sqlite3VdbeMemRelease(pRes);
drh0bce8352002-02-28 00:41:10 +00001508 }
1509}
drhdd5baa92002-02-27 19:50:59 +00001510
drhb0689692007-11-01 17:38:30 +00001511/*
1512** group_concat(EXPR, ?SEPARATOR?)
1513*/
1514static void groupConcatStep(
1515 sqlite3_context *context,
1516 int argc,
1517 sqlite3_value **argv
1518){
1519 const char *zVal;
drhade86482007-11-28 22:36:40 +00001520 StrAccum *pAccum;
drhb0689692007-11-01 17:38:30 +00001521 const char *zSep;
drh07d31172009-02-02 21:57:05 +00001522 int nVal, nSep;
1523 assert( argc==1 || argc==2 );
1524 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhade86482007-11-28 22:36:40 +00001525 pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
1526
1527 if( pAccum ){
drhbb4957f2008-03-20 14:03:29 +00001528 sqlite3 *db = sqlite3_context_db_handle(context);
drh8bfd7192009-06-19 16:44:41 +00001529 int firstTerm = pAccum->useMalloc==0;
drhb9755982010-07-24 16:34:37 +00001530 pAccum->useMalloc = 2;
drhbb4957f2008-03-20 14:03:29 +00001531 pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
drh8bfd7192009-06-19 16:44:41 +00001532 if( !firstTerm ){
drh07d31172009-02-02 21:57:05 +00001533 if( argc==2 ){
1534 zSep = (char*)sqlite3_value_text(argv[1]);
1535 nSep = sqlite3_value_bytes(argv[1]);
drhb0689692007-11-01 17:38:30 +00001536 }else{
1537 zSep = ",";
drhade86482007-11-28 22:36:40 +00001538 nSep = 1;
drhb0689692007-11-01 17:38:30 +00001539 }
drha9ab4812013-12-11 11:00:44 +00001540 if( nSep ) sqlite3StrAccumAppend(pAccum, zSep, nSep);
drhb0689692007-11-01 17:38:30 +00001541 }
drh07d31172009-02-02 21:57:05 +00001542 zVal = (char*)sqlite3_value_text(argv[0]);
1543 nVal = sqlite3_value_bytes(argv[0]);
drha9ab4812013-12-11 11:00:44 +00001544 if( nVal ) sqlite3StrAccumAppend(pAccum, zVal, nVal);
drhb0689692007-11-01 17:38:30 +00001545 }
1546}
1547static void groupConcatFinalize(sqlite3_context *context){
drhade86482007-11-28 22:36:40 +00001548 StrAccum *pAccum;
1549 pAccum = sqlite3_aggregate_context(context, 0);
1550 if( pAccum ){
drhb49bc862013-08-21 21:12:10 +00001551 if( pAccum->accError==STRACCUM_TOOBIG ){
drhade86482007-11-28 22:36:40 +00001552 sqlite3_result_error_toobig(context);
drhb49bc862013-08-21 21:12:10 +00001553 }else if( pAccum->accError==STRACCUM_NOMEM ){
drhade86482007-11-28 22:36:40 +00001554 sqlite3_result_error_nomem(context);
1555 }else{
1556 sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1,
1557 sqlite3_free);
1558 }
drhb0689692007-11-01 17:38:30 +00001559 }
1560}
drh4e5ffc52004-08-31 00:52:37 +00001561
drhd3a149e2002-02-24 17:12:53 +00001562/*
drha4741842010-04-25 20:58:37 +00001563** This routine does per-connection function registration. Most
1564** of the built-in functions above are part of the global function set.
1565** This routine only deals with those that are not global.
drhdc04c582002-02-24 01:55:15 +00001566*/
drh9bb575f2004-09-06 17:24:11 +00001567void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
drha4741842010-04-25 20:58:37 +00001568 int rc = sqlite3_overload_function(db, "MATCH", 2);
1569 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1570 if( rc==SQLITE_NOMEM ){
1571 db->mallocFailed = 1;
danielk1977832a58a2007-06-22 15:21:15 +00001572 }
drh55ef4d92005-08-14 01:20:37 +00001573}
1574
1575/*
1576** Set the LIKEOPT flag on the 2-argument function with the given name.
1577*/
drh1bd10f82008-12-10 21:19:56 +00001578static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
drh55ef4d92005-08-14 01:20:37 +00001579 FuncDef *pDef;
drhea678832008-12-10 19:26:22 +00001580 pDef = sqlite3FindFunction(db, zName, sqlite3Strlen30(zName),
1581 2, SQLITE_UTF8, 0);
drhd27135a2009-04-02 13:36:37 +00001582 if( ALWAYS(pDef) ){
drhd36e1042013-09-06 13:10:12 +00001583 pDef->funcFlags |= flagVal;
drh55ef4d92005-08-14 01:20:37 +00001584 }
1585}
1586
1587/*
1588** Register the built-in LIKE and GLOB functions. The caseSensitive
1589** parameter determines whether or not the LIKE operator is case
1590** sensitive. GLOB is always case sensitive.
1591*/
1592void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1593 struct compareInfo *pInfo;
1594 if( caseSensitive ){
1595 pInfo = (struct compareInfo*)&likeInfoAlt;
1596 }else{
1597 pInfo = (struct compareInfo*)&likeInfoNorm;
1598 }
drh901e9942010-12-15 18:54:37 +00001599 sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
1600 sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
1601 sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8,
dand2199f02010-08-27 17:48:52 +00001602 (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0);
drhd64fe2f2005-08-28 17:00:23 +00001603 setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
1604 setLikeOptFlag(db, "like",
1605 caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
drh55ef4d92005-08-14 01:20:37 +00001606}
1607
1608/*
1609** pExpr points to an expression which implements a function. If
1610** it is appropriate to apply the LIKE optimization to that function
1611** then set aWc[0] through aWc[2] to the wildcard characters and
1612** return TRUE. If the function is not a LIKE-style function then
1613** return FALSE.
1614*/
drhd64fe2f2005-08-28 17:00:23 +00001615int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
drh55ef4d92005-08-14 01:20:37 +00001616 FuncDef *pDef;
danielk19776ab3a2e2009-02-19 14:39:25 +00001617 if( pExpr->op!=TK_FUNCTION
1618 || !pExpr->x.pList
1619 || pExpr->x.pList->nExpr!=2
1620 ){
drh55ef4d92005-08-14 01:20:37 +00001621 return 0;
1622 }
danielk19776ab3a2e2009-02-19 14:39:25 +00001623 assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
drh33e619f2009-05-28 01:00:55 +00001624 pDef = sqlite3FindFunction(db, pExpr->u.zToken,
1625 sqlite3Strlen30(pExpr->u.zToken),
drhb7916a72009-05-27 10:31:29 +00001626 2, SQLITE_UTF8, 0);
drhd36e1042013-09-06 13:10:12 +00001627 if( NEVER(pDef==0) || (pDef->funcFlags & SQLITE_FUNC_LIKE)==0 ){
drh55ef4d92005-08-14 01:20:37 +00001628 return 0;
1629 }
1630
1631 /* The memcpy() statement assumes that the wildcard characters are
1632 ** the first three statements in the compareInfo structure. The
1633 ** asserts() that follow verify that assumption
1634 */
1635 memcpy(aWc, pDef->pUserData, 3);
1636 assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1637 assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1638 assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
drhd36e1042013-09-06 13:10:12 +00001639 *pIsNocase = (pDef->funcFlags & SQLITE_FUNC_CASE)==0;
drh55ef4d92005-08-14 01:20:37 +00001640 return 1;
drhdc04c582002-02-24 01:55:15 +00001641}
danielk19778c0a7912008-08-20 14:49:23 +00001642
drh70a8ca32008-08-21 18:49:27 +00001643/*
drh777c5382008-08-21 20:21:34 +00001644** All all of the FuncDef structures in the aBuiltinFunc[] array above
1645** to the global function hash table. This occurs at start-time (as
1646** a consequence of calling sqlite3_initialize()).
1647**
1648** After this routine runs
drh70a8ca32008-08-21 18:49:27 +00001649*/
1650void sqlite3RegisterGlobalFunctions(void){
danielk197793ce7412008-09-01 19:14:02 +00001651 /*
1652 ** The following array holds FuncDef structures for all of the functions
1653 ** defined in this file.
1654 **
1655 ** The array cannot be constant since changes are made to the
1656 ** FuncDef.pHash elements at start-time. The elements of this array
1657 ** are read-only after initialization is complete.
1658 */
1659 static SQLITE_WSD FuncDef aBuiltinFunc[] = {
1660 FUNCTION(ltrim, 1, 1, 0, trimFunc ),
1661 FUNCTION(ltrim, 2, 1, 0, trimFunc ),
1662 FUNCTION(rtrim, 1, 2, 0, trimFunc ),
1663 FUNCTION(rtrim, 2, 2, 0, trimFunc ),
1664 FUNCTION(trim, 1, 3, 0, trimFunc ),
1665 FUNCTION(trim, 2, 3, 0, trimFunc ),
1666 FUNCTION(min, -1, 0, 1, minmaxFunc ),
1667 FUNCTION(min, 0, 0, 1, 0 ),
1668 AGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize ),
1669 FUNCTION(max, -1, 1, 1, minmaxFunc ),
1670 FUNCTION(max, 0, 1, 1, 0 ),
1671 AGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize ),
drha748fdc2012-03-28 01:34:47 +00001672 FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF),
1673 FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH),
drhd55e0722012-10-25 03:07:29 +00001674 FUNCTION(instr, 2, 0, 0, instrFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001675 FUNCTION(substr, 2, 0, 0, substrFunc ),
1676 FUNCTION(substr, 3, 0, 0, substrFunc ),
drha5c14162013-12-17 15:03:06 +00001677 FUNCTION(printf, -1, 0, 0, printfFunc ),
drhd495d8c2013-02-22 19:34:25 +00001678 FUNCTION(unicode, 1, 0, 0, unicodeFunc ),
1679 FUNCTION(char, -1, 0, 0, charFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001680 FUNCTION(abs, 1, 0, 0, absFunc ),
shanefbd60f82009-02-04 03:59:25 +00001681#ifndef SQLITE_OMIT_FLOATING_POINT
danielk197793ce7412008-09-01 19:14:02 +00001682 FUNCTION(round, 1, 0, 0, roundFunc ),
1683 FUNCTION(round, 2, 0, 0, roundFunc ),
shanefbd60f82009-02-04 03:59:25 +00001684#endif
danielk197793ce7412008-09-01 19:14:02 +00001685 FUNCTION(upper, 1, 0, 0, upperFunc ),
1686 FUNCTION(lower, 1, 0, 0, lowerFunc ),
1687 FUNCTION(coalesce, 1, 0, 0, 0 ),
danielk197793ce7412008-09-01 19:14:02 +00001688 FUNCTION(coalesce, 0, 0, 0, 0 ),
drhcca9f3d2013-09-06 15:23:29 +00001689 FUNCTION2(coalesce, -1, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),
danielk197793ce7412008-09-01 19:14:02 +00001690 FUNCTION(hex, 1, 0, 0, hexFunc ),
drhcca9f3d2013-09-06 15:23:29 +00001691 FUNCTION2(ifnull, 2, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),
1692 FUNCTION2(unlikely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
drhaae0f9e2013-09-11 11:38:58 +00001693 FUNCTION2(likelihood, 2, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
drhb1fba282013-11-21 14:33:48 +00001694 VFUNCTION(random, 0, 0, 0, randomFunc ),
1695 VFUNCTION(randomblob, 1, 0, 0, randomBlob ),
danielk197793ce7412008-09-01 19:14:02 +00001696 FUNCTION(nullif, 2, 0, 1, nullifFunc ),
1697 FUNCTION(sqlite_version, 0, 0, 0, versionFunc ),
drh47baebc2009-08-14 16:01:24 +00001698 FUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ),
drh840561f2011-04-27 18:08:42 +00001699 FUNCTION(sqlite_log, 2, 0, 0, errlogFunc ),
shanehdc97a8c2010-02-23 20:08:35 +00001700#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
drh8bb76d32010-02-26 16:37:47 +00001701 FUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc ),
1702 FUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc ),
shanehdc97a8c2010-02-23 20:08:35 +00001703#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
danielk197793ce7412008-09-01 19:14:02 +00001704 FUNCTION(quote, 1, 0, 0, quoteFunc ),
drhb1fba282013-11-21 14:33:48 +00001705 VFUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid),
1706 VFUNCTION(changes, 0, 0, 0, changes ),
1707 VFUNCTION(total_changes, 0, 0, 0, total_changes ),
danielk197793ce7412008-09-01 19:14:02 +00001708 FUNCTION(replace, 3, 0, 0, replaceFunc ),
1709 FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ),
1710 #ifdef SQLITE_SOUNDEX
1711 FUNCTION(soundex, 1, 0, 0, soundexFunc ),
1712 #endif
1713 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1714 FUNCTION(load_extension, 1, 0, 0, loadExt ),
1715 FUNCTION(load_extension, 2, 0, 0, loadExt ),
1716 #endif
1717 AGGREGATE(sum, 1, 0, 0, sumStep, sumFinalize ),
1718 AGGREGATE(total, 1, 0, 0, sumStep, totalFinalize ),
1719 AGGREGATE(avg, 1, 0, 0, sumStep, avgFinalize ),
danielk1977a5533162009-02-24 10:01:51 +00001720 /* AGGREGATE(count, 0, 0, 0, countStep, countFinalize ), */
drhd36e1042013-09-06 13:10:12 +00001721 {0,SQLITE_UTF8|SQLITE_FUNC_COUNT,0,0,0,countStep,countFinalize,"count",0,0},
danielk197793ce7412008-09-01 19:14:02 +00001722 AGGREGATE(count, 1, 0, 0, countStep, countFinalize ),
drh07d31172009-02-02 21:57:05 +00001723 AGGREGATE(group_concat, 1, 0, 0, groupConcatStep, groupConcatFinalize),
1724 AGGREGATE(group_concat, 2, 0, 0, groupConcatStep, groupConcatFinalize),
danielk197793ce7412008-09-01 19:14:02 +00001725
1726 LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1727 #ifdef SQLITE_CASE_SENSITIVE_LIKE
1728 LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1729 LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1730 #else
1731 LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
1732 LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
1733 #endif
1734 };
1735
drh70a8ca32008-08-21 18:49:27 +00001736 int i;
danielk197793ce7412008-09-01 19:14:02 +00001737 FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
drh106cee52008-09-03 17:11:16 +00001738 FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aBuiltinFunc);
danielk197793ce7412008-09-01 19:14:02 +00001739
drh70a8ca32008-08-21 18:49:27 +00001740 for(i=0; i<ArraySize(aBuiltinFunc); i++){
danielk197793ce7412008-09-01 19:14:02 +00001741 sqlite3FuncDefInsert(pHash, &aFunc[i]);
drh70a8ca32008-08-21 18:49:27 +00001742 }
drh777c5382008-08-21 20:21:34 +00001743 sqlite3RegisterDateTimeFunctions();
drh545f5872010-04-24 14:02:59 +00001744#ifndef SQLITE_OMIT_ALTERTABLE
1745 sqlite3AlterFunctions();
1746#endif
dan0106e372013-08-12 16:34:32 +00001747#if defined(SQLITE_ENABLE_STAT3) || defined(SQLITE_ENABLE_STAT4)
1748 sqlite3AnalyzeFunctions();
1749#endif
drh70a8ca32008-08-21 18:49:27 +00001750}