xref: /sqlite-3.40.0/src/func.c (revision 46af59e9)
1 /*
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.
18 */
19 #include "sqliteInt.h"
20 #include <stdlib.h>
21 #include <assert.h>
22 #include "vdbeInt.h"
23 
24 /*
25 ** Return the collating function associated with a function.
26 */
27 static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
28   return context->pColl;
29 }
30 
31 /*
32 ** Indicate that the accumulator load should be skipped on this
33 ** iteration of the aggregate loop.
34 */
35 static void sqlite3SkipAccumulatorLoad(sqlite3_context *context){
36   context->skipFlag = 1;
37 }
38 
39 /*
40 ** Implementation of the non-aggregate min() and max() functions
41 */
42 static void minmaxFunc(
43   sqlite3_context *context,
44   int argc,
45   sqlite3_value **argv
46 ){
47   int i;
48   int mask;    /* 0 for min() or 0xffffffff for max() */
49   int iBest;
50   CollSeq *pColl;
51 
52   assert( argc>1 );
53   mask = sqlite3_user_data(context)==0 ? 0 : -1;
54   pColl = sqlite3GetFuncCollSeq(context);
55   assert( pColl );
56   assert( mask==-1 || mask==0 );
57   iBest = 0;
58   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
59   for(i=1; i<argc; i++){
60     if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
61     if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
62       testcase( mask==0 );
63       iBest = i;
64     }
65   }
66   sqlite3_result_value(context, argv[iBest]);
67 }
68 
69 /*
70 ** Return the type of the argument.
71 */
72 static void typeofFunc(
73   sqlite3_context *context,
74   int NotUsed,
75   sqlite3_value **argv
76 ){
77   const char *z = 0;
78   UNUSED_PARAMETER(NotUsed);
79   switch( sqlite3_value_type(argv[0]) ){
80     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;
84     default:             z = "null";    break;
85   }
86   sqlite3_result_text(context, z, -1, SQLITE_STATIC);
87 }
88 
89 
90 /*
91 ** Implementation of the length() function
92 */
93 static void lengthFunc(
94   sqlite3_context *context,
95   int argc,
96   sqlite3_value **argv
97 ){
98   int len;
99 
100   assert( argc==1 );
101   UNUSED_PARAMETER(argc);
102   switch( sqlite3_value_type(argv[0]) ){
103     case SQLITE_BLOB:
104     case SQLITE_INTEGER:
105     case SQLITE_FLOAT: {
106       sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
107       break;
108     }
109     case SQLITE_TEXT: {
110       const unsigned char *z = sqlite3_value_text(argv[0]);
111       if( z==0 ) return;
112       len = 0;
113       while( *z ){
114         len++;
115         SQLITE_SKIP_UTF8(z);
116       }
117       sqlite3_result_int(context, len);
118       break;
119     }
120     default: {
121       sqlite3_result_null(context);
122       break;
123     }
124   }
125 }
126 
127 /*
128 ** 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.
132 */
133 static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
134   assert( argc==1 );
135   UNUSED_PARAMETER(argc);
136   switch( sqlite3_value_type(argv[0]) ){
137     case SQLITE_INTEGER: {
138       i64 iVal = sqlite3_value_int64(argv[0]);
139       if( iVal<0 ){
140         if( (iVal<<1)==0 ){
141           /* IMP: R-35460-15084 If X is the integer -9223372036854775807 then
142           ** abs(X) throws an integer overflow error since there is no
143           ** equivalent positive 64-bit two complement value. */
144           sqlite3_result_error(context, "integer overflow", -1);
145           return;
146         }
147         iVal = -iVal;
148       }
149       sqlite3_result_int64(context, iVal);
150       break;
151     }
152     case SQLITE_NULL: {
153       /* IMP: R-37434-19929 Abs(X) returns NULL if X is NULL. */
154       sqlite3_result_null(context);
155       break;
156     }
157     default: {
158       /* 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       */
163       double rVal = sqlite3_value_double(argv[0]);
164       if( rVal<0 ) rVal = -rVal;
165       sqlite3_result_double(context, rVal);
166       break;
167     }
168   }
169 }
170 
171 /*
172 ** 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 */
182 static 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 
195   UNUSED_PARAMETER(argc);
196   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 /*
222 ** Implementation of the substr() function.
223 **
224 ** substr(x,p1,p2)  returns p2 characters of x[] beginning with p1.
225 ** p1 is 1-indexed.  So substr(x,1,1) returns the first character
226 ** of x.  If x is text, then we actually count UTF-8 characters.
227 ** If x is a blob, then we count bytes.
228 **
229 ** If p1 is negative, then we begin abs(p1) from the end of x[].
230 **
231 ** If p2 is negative, return the p2 characters preceeding p1.
232 */
233 static void substrFunc(
234   sqlite3_context *context,
235   int argc,
236   sqlite3_value **argv
237 ){
238   const unsigned char *z;
239   const unsigned char *z2;
240   int len;
241   int p0type;
242   i64 p1, p2;
243   int negP2 = 0;
244 
245   assert( argc==3 || argc==2 );
246   if( sqlite3_value_type(argv[1])==SQLITE_NULL
247    || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL)
248   ){
249     return;
250   }
251   p0type = sqlite3_value_type(argv[0]);
252   p1 = sqlite3_value_int(argv[1]);
253   if( p0type==SQLITE_BLOB ){
254     len = sqlite3_value_bytes(argv[0]);
255     z = sqlite3_value_blob(argv[0]);
256     if( z==0 ) return;
257     assert( len==sqlite3_value_bytes(argv[0]) );
258   }else{
259     z = sqlite3_value_text(argv[0]);
260     if( z==0 ) return;
261     len = 0;
262     if( p1<0 ){
263       for(z2=z; *z2; len++){
264         SQLITE_SKIP_UTF8(z2);
265       }
266     }
267   }
268   if( argc==3 ){
269     p2 = sqlite3_value_int(argv[2]);
270     if( p2<0 ){
271       p2 = -p2;
272       negP2 = 1;
273     }
274   }else{
275     p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH];
276   }
277   if( p1<0 ){
278     p1 += len;
279     if( p1<0 ){
280       p2 += p1;
281       if( p2<0 ) p2 = 0;
282       p1 = 0;
283     }
284   }else if( p1>0 ){
285     p1--;
286   }else if( p2>0 ){
287     p2--;
288   }
289   if( negP2 ){
290     p1 -= p2;
291     if( p1<0 ){
292       p2 += p1;
293       p1 = 0;
294     }
295   }
296   assert( p1>=0 && p2>=0 );
297   if( p0type!=SQLITE_BLOB ){
298     while( *z && p1 ){
299       SQLITE_SKIP_UTF8(z);
300       p1--;
301     }
302     for(z2=z; *z2 && p2; p2--){
303       SQLITE_SKIP_UTF8(z2);
304     }
305     sqlite3_result_text(context, (char*)z, (int)(z2-z), SQLITE_TRANSIENT);
306   }else{
307     if( p1+p2>len ){
308       p2 = len-p1;
309       if( p2<0 ) p2 = 0;
310     }
311     sqlite3_result_blob(context, (char*)&z[p1], (int)p2, SQLITE_TRANSIENT);
312   }
313 }
314 
315 /*
316 ** Implementation of the round() function
317 */
318 #ifndef SQLITE_OMIT_FLOATING_POINT
319 static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
320   int n = 0;
321   double r;
322   char *zBuf;
323   assert( argc==1 || argc==2 );
324   if( argc==2 ){
325     if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
326     n = sqlite3_value_int(argv[1]);
327     if( n>30 ) n = 30;
328     if( n<0 ) n = 0;
329   }
330   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
331   r = sqlite3_value_double(argv[0]);
332   /* If Y==0 and X will fit in a 64-bit int,
333   ** handle the rounding directly,
334   ** otherwise use printf.
335   */
336   if( n==0 && r>=0 && r<LARGEST_INT64-1 ){
337     r = (double)((sqlite_int64)(r+0.5));
338   }else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){
339     r = -(double)((sqlite_int64)((-r)+0.5));
340   }else{
341     zBuf = sqlite3_mprintf("%.*f",n,r);
342     if( zBuf==0 ){
343       sqlite3_result_error_nomem(context);
344       return;
345     }
346     sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8);
347     sqlite3_free(zBuf);
348   }
349   sqlite3_result_double(context, r);
350 }
351 #endif
352 
353 /*
354 ** Allocate nByte bytes of space using sqlite3_malloc(). If the
355 ** allocation fails, call sqlite3_result_error_nomem() to notify
356 ** the database handle that malloc() has failed and return NULL.
357 ** If nByte is larger than the maximum string or blob length, then
358 ** raise an SQLITE_TOOBIG exception and return NULL.
359 */
360 static void *contextMalloc(sqlite3_context *context, i64 nByte){
361   char *z;
362   sqlite3 *db = sqlite3_context_db_handle(context);
363   assert( nByte>0 );
364   testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] );
365   testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
366   if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
367     sqlite3_result_error_toobig(context);
368     z = 0;
369   }else{
370     z = sqlite3Malloc((int)nByte);
371     if( !z ){
372       sqlite3_result_error_nomem(context);
373     }
374   }
375   return z;
376 }
377 
378 /*
379 ** Implementation of the upper() and lower() SQL functions.
380 */
381 static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
382   char *z1;
383   const char *z2;
384   int i, n;
385   UNUSED_PARAMETER(argc);
386   z2 = (char*)sqlite3_value_text(argv[0]);
387   n = sqlite3_value_bytes(argv[0]);
388   /* Verify that the call to _bytes() does not invalidate the _text() pointer */
389   assert( z2==(char*)sqlite3_value_text(argv[0]) );
390   if( z2 ){
391     z1 = contextMalloc(context, ((i64)n)+1);
392     if( z1 ){
393       for(i=0; i<n; i++){
394         z1[i] = (char)sqlite3Toupper(z2[i]);
395       }
396       sqlite3_result_text(context, z1, n, sqlite3_free);
397     }
398   }
399 }
400 static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
401   char *z1;
402   const char *z2;
403   int i, n;
404   UNUSED_PARAMETER(argc);
405   z2 = (char*)sqlite3_value_text(argv[0]);
406   n = sqlite3_value_bytes(argv[0]);
407   /* Verify that the call to _bytes() does not invalidate the _text() pointer */
408   assert( z2==(char*)sqlite3_value_text(argv[0]) );
409   if( z2 ){
410     z1 = contextMalloc(context, ((i64)n)+1);
411     if( z1 ){
412       for(i=0; i<n; i++){
413         z1[i] = sqlite3Tolower(z2[i]);
414       }
415       sqlite3_result_text(context, z1, n, sqlite3_free);
416     }
417   }
418 }
419 
420 /*
421 ** The COALESCE() and IFNULL() functions are implemented as VDBE code so
422 ** that unused argument values do not have to be computed.  However, we
423 ** still need some kind of function implementation for this routines in
424 ** the function table.  That function implementation will never be called
425 ** so it doesn't matter what the implementation is.  We might as well use
426 ** the "version()" function as a substitute.
427 */
428 #define ifnullFunc versionFunc   /* Substitute function - never called */
429 
430 /*
431 ** Implementation of random().  Return a random integer.
432 */
433 static void randomFunc(
434   sqlite3_context *context,
435   int NotUsed,
436   sqlite3_value **NotUsed2
437 ){
438   sqlite_int64 r;
439   UNUSED_PARAMETER2(NotUsed, NotUsed2);
440   sqlite3_randomness(sizeof(r), &r);
441   if( r<0 ){
442     /* We need to prevent a random number of 0x8000000000000000
443     ** (or -9223372036854775808) since when you do abs() of that
444     ** number of you get the same value back again.  To do this
445     ** in a way that is testable, mask the sign bit off of negative
446     ** values, resulting in a positive value.  Then take the
447     ** 2s complement of that positive value.  The end result can
448     ** therefore be no less than -9223372036854775807.
449     */
450     r = -(r & LARGEST_INT64);
451   }
452   sqlite3_result_int64(context, r);
453 }
454 
455 /*
456 ** Implementation of randomblob(N).  Return a random blob
457 ** that is N bytes long.
458 */
459 static void randomBlob(
460   sqlite3_context *context,
461   int argc,
462   sqlite3_value **argv
463 ){
464   int n;
465   unsigned char *p;
466   assert( argc==1 );
467   UNUSED_PARAMETER(argc);
468   n = sqlite3_value_int(argv[0]);
469   if( n<1 ){
470     n = 1;
471   }
472   p = contextMalloc(context, n);
473   if( p ){
474     sqlite3_randomness(n, p);
475     sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
476   }
477 }
478 
479 /*
480 ** Implementation of the last_insert_rowid() SQL function.  The return
481 ** value is the same as the sqlite3_last_insert_rowid() API function.
482 */
483 static void last_insert_rowid(
484   sqlite3_context *context,
485   int NotUsed,
486   sqlite3_value **NotUsed2
487 ){
488   sqlite3 *db = sqlite3_context_db_handle(context);
489   UNUSED_PARAMETER2(NotUsed, NotUsed2);
490   /* IMP: R-51513-12026 The last_insert_rowid() SQL function is a
491   ** wrapper around the sqlite3_last_insert_rowid() C/C++ interface
492   ** function. */
493   sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
494 }
495 
496 /*
497 ** Implementation of the changes() SQL function.
498 **
499 ** IMP: R-62073-11209 The changes() SQL function is a wrapper
500 ** around the sqlite3_changes() C/C++ function and hence follows the same
501 ** rules for counting changes.
502 */
503 static void changes(
504   sqlite3_context *context,
505   int NotUsed,
506   sqlite3_value **NotUsed2
507 ){
508   sqlite3 *db = sqlite3_context_db_handle(context);
509   UNUSED_PARAMETER2(NotUsed, NotUsed2);
510   sqlite3_result_int(context, sqlite3_changes(db));
511 }
512 
513 /*
514 ** Implementation of the total_changes() SQL function.  The return value is
515 ** the same as the sqlite3_total_changes() API function.
516 */
517 static void total_changes(
518   sqlite3_context *context,
519   int NotUsed,
520   sqlite3_value **NotUsed2
521 ){
522   sqlite3 *db = sqlite3_context_db_handle(context);
523   UNUSED_PARAMETER2(NotUsed, NotUsed2);
524   /* IMP: R-52756-41993 This function is a wrapper around the
525   ** sqlite3_total_changes() C/C++ interface. */
526   sqlite3_result_int(context, sqlite3_total_changes(db));
527 }
528 
529 /*
530 ** A structure defining how to do GLOB-style comparisons.
531 */
532 struct compareInfo {
533   u8 matchAll;
534   u8 matchOne;
535   u8 matchSet;
536   u8 noCase;
537 };
538 
539 /*
540 ** For LIKE and GLOB matching on EBCDIC machines, assume that every
541 ** character is exactly one byte in size.  Also, all characters are
542 ** able to participate in upper-case-to-lower-case mappings in EBCDIC
543 ** whereas only characters less than 0x80 do in ASCII.
544 */
545 #if defined(SQLITE_EBCDIC)
546 # define sqlite3Utf8Read(A)    (*((*A)++))
547 # define GlogUpperToLower(A)   A = sqlite3UpperToLower[A]
548 #else
549 # define GlogUpperToLower(A)   if( !((A)&~0x7f) ){ A = sqlite3UpperToLower[A]; }
550 #endif
551 
552 static const struct compareInfo globInfo = { '*', '?', '[', 0 };
553 /* The correct SQL-92 behavior is for the LIKE operator to ignore
554 ** case.  Thus  'a' LIKE 'A' would be true. */
555 static const struct compareInfo likeInfoNorm = { '%', '_',   0, 1 };
556 /* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
557 ** is case sensitive causing 'a' LIKE 'A' to be false */
558 static const struct compareInfo likeInfoAlt = { '%', '_',   0, 0 };
559 
560 /*
561 ** Compare two UTF-8 strings for equality where the first string can
562 ** potentially be a "glob" expression.  Return true (1) if they
563 ** are the same and false (0) if they are different.
564 **
565 ** Globbing rules:
566 **
567 **      '*'       Matches any sequence of zero or more characters.
568 **
569 **      '?'       Matches exactly one character.
570 **
571 **     [...]      Matches one character from the enclosed list of
572 **                characters.
573 **
574 **     [^...]     Matches one character not in the enclosed list.
575 **
576 ** With the [...] and [^...] matching, a ']' character can be included
577 ** in the list by making it the first character after '[' or '^'.  A
578 ** range of characters can be specified using '-'.  Example:
579 ** "[a-z]" matches any single lower-case letter.  To match a '-', make
580 ** it the last character in the list.
581 **
582 ** This routine is usually quick, but can be N**2 in the worst case.
583 **
584 ** Hints: to match '*' or '?', put them in "[]".  Like this:
585 **
586 **         abc[*]xyz        Matches "abc*xyz" only
587 */
588 static int patternCompare(
589   const u8 *zPattern,              /* The glob pattern */
590   const u8 *zString,               /* The string to compare against the glob */
591   const struct compareInfo *pInfo, /* Information about how to do the compare */
592   u32 esc                          /* The escape character */
593 ){
594   u32 c, c2;
595   int invert;
596   int seen;
597   u8 matchOne = pInfo->matchOne;
598   u8 matchAll = pInfo->matchAll;
599   u8 matchSet = pInfo->matchSet;
600   u8 noCase = pInfo->noCase;
601   int prevEscape = 0;     /* True if the previous character was 'escape' */
602 
603   while( (c = sqlite3Utf8Read(&zPattern))!=0 ){
604     if( c==matchAll && !prevEscape ){
605       while( (c=sqlite3Utf8Read(&zPattern)) == matchAll
606                || c == matchOne ){
607         if( c==matchOne && sqlite3Utf8Read(&zString)==0 ){
608           return 0;
609         }
610       }
611       if( c==0 ){
612         return 1;
613       }else if( c==esc ){
614         c = sqlite3Utf8Read(&zPattern);
615         if( c==0 ){
616           return 0;
617         }
618       }else if( c==matchSet ){
619         assert( esc==0 );         /* This is GLOB, not LIKE */
620         assert( matchSet<0x80 );  /* '[' is a single-byte character */
621         while( *zString && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){
622           SQLITE_SKIP_UTF8(zString);
623         }
624         return *zString!=0;
625       }
626       while( (c2 = sqlite3Utf8Read(&zString))!=0 ){
627         if( noCase ){
628           GlogUpperToLower(c2);
629           GlogUpperToLower(c);
630           while( c2 != 0 && c2 != c ){
631             c2 = sqlite3Utf8Read(&zString);
632             GlogUpperToLower(c2);
633           }
634         }else{
635           while( c2 != 0 && c2 != c ){
636             c2 = sqlite3Utf8Read(&zString);
637           }
638         }
639         if( c2==0 ) return 0;
640         if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
641       }
642       return 0;
643     }else if( c==matchOne && !prevEscape ){
644       if( sqlite3Utf8Read(&zString)==0 ){
645         return 0;
646       }
647     }else if( c==matchSet ){
648       u32 prior_c = 0;
649       assert( esc==0 );    /* This only occurs for GLOB, not LIKE */
650       seen = 0;
651       invert = 0;
652       c = sqlite3Utf8Read(&zString);
653       if( c==0 ) return 0;
654       c2 = sqlite3Utf8Read(&zPattern);
655       if( c2=='^' ){
656         invert = 1;
657         c2 = sqlite3Utf8Read(&zPattern);
658       }
659       if( c2==']' ){
660         if( c==']' ) seen = 1;
661         c2 = sqlite3Utf8Read(&zPattern);
662       }
663       while( c2 && c2!=']' ){
664         if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
665           c2 = sqlite3Utf8Read(&zPattern);
666           if( c>=prior_c && c<=c2 ) seen = 1;
667           prior_c = 0;
668         }else{
669           if( c==c2 ){
670             seen = 1;
671           }
672           prior_c = c2;
673         }
674         c2 = sqlite3Utf8Read(&zPattern);
675       }
676       if( c2==0 || (seen ^ invert)==0 ){
677         return 0;
678       }
679     }else if( esc==c && !prevEscape ){
680       prevEscape = 1;
681     }else{
682       c2 = sqlite3Utf8Read(&zString);
683       if( noCase ){
684         GlogUpperToLower(c);
685         GlogUpperToLower(c2);
686       }
687       if( c!=c2 ){
688         return 0;
689       }
690       prevEscape = 0;
691     }
692   }
693   return *zString==0;
694 }
695 
696 /*
697 ** Count the number of times that the LIKE operator (or GLOB which is
698 ** just a variation of LIKE) gets called.  This is used for testing
699 ** only.
700 */
701 #ifdef SQLITE_TEST
702 int sqlite3_like_count = 0;
703 #endif
704 
705 
706 /*
707 ** Implementation of the like() SQL function.  This function implements
708 ** the build-in LIKE operator.  The first argument to the function is the
709 ** pattern and the second argument is the string.  So, the SQL statements:
710 **
711 **       A LIKE B
712 **
713 ** is implemented as like(B,A).
714 **
715 ** This same function (with a different compareInfo structure) computes
716 ** the GLOB operator.
717 */
718 static void likeFunc(
719   sqlite3_context *context,
720   int argc,
721   sqlite3_value **argv
722 ){
723   const unsigned char *zA, *zB;
724   u32 escape = 0;
725   int nPat;
726   sqlite3 *db = sqlite3_context_db_handle(context);
727 
728   zB = sqlite3_value_text(argv[0]);
729   zA = sqlite3_value_text(argv[1]);
730 
731   /* Limit the length of the LIKE or GLOB pattern to avoid problems
732   ** of deep recursion and N*N behavior in patternCompare().
733   */
734   nPat = sqlite3_value_bytes(argv[0]);
735   testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );
736   testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );
737   if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
738     sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
739     return;
740   }
741   assert( zB==sqlite3_value_text(argv[0]) );  /* Encoding did not change */
742 
743   if( argc==3 ){
744     /* The escape character string must consist of a single UTF-8 character.
745     ** Otherwise, return an error.
746     */
747     const unsigned char *zEsc = sqlite3_value_text(argv[2]);
748     if( zEsc==0 ) return;
749     if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
750       sqlite3_result_error(context,
751           "ESCAPE expression must be a single character", -1);
752       return;
753     }
754     escape = sqlite3Utf8Read(&zEsc);
755   }
756   if( zA && zB ){
757     struct compareInfo *pInfo = sqlite3_user_data(context);
758 #ifdef SQLITE_TEST
759     sqlite3_like_count++;
760 #endif
761 
762     sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape));
763   }
764 }
765 
766 /*
767 ** Implementation of the NULLIF(x,y) function.  The result is the first
768 ** argument if the arguments are different.  The result is NULL if the
769 ** arguments are equal to each other.
770 */
771 static void nullifFunc(
772   sqlite3_context *context,
773   int NotUsed,
774   sqlite3_value **argv
775 ){
776   CollSeq *pColl = sqlite3GetFuncCollSeq(context);
777   UNUSED_PARAMETER(NotUsed);
778   if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
779     sqlite3_result_value(context, argv[0]);
780   }
781 }
782 
783 /*
784 ** Implementation of the sqlite_version() function.  The result is the version
785 ** of the SQLite library that is running.
786 */
787 static void versionFunc(
788   sqlite3_context *context,
789   int NotUsed,
790   sqlite3_value **NotUsed2
791 ){
792   UNUSED_PARAMETER2(NotUsed, NotUsed2);
793   /* IMP: R-48699-48617 This function is an SQL wrapper around the
794   ** sqlite3_libversion() C-interface. */
795   sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC);
796 }
797 
798 /*
799 ** Implementation of the sqlite_source_id() function. The result is a string
800 ** that identifies the particular version of the source code used to build
801 ** SQLite.
802 */
803 static void sourceidFunc(
804   sqlite3_context *context,
805   int NotUsed,
806   sqlite3_value **NotUsed2
807 ){
808   UNUSED_PARAMETER2(NotUsed, NotUsed2);
809   /* IMP: R-24470-31136 This function is an SQL wrapper around the
810   ** sqlite3_sourceid() C interface. */
811   sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC);
812 }
813 
814 /*
815 ** Implementation of the sqlite_log() function.  This is a wrapper around
816 ** sqlite3_log().  The return value is NULL.  The function exists purely for
817 ** its side-effects.
818 */
819 static void errlogFunc(
820   sqlite3_context *context,
821   int argc,
822   sqlite3_value **argv
823 ){
824   UNUSED_PARAMETER(argc);
825   UNUSED_PARAMETER(context);
826   sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1]));
827 }
828 
829 /*
830 ** Implementation of the sqlite_compileoption_used() function.
831 ** The result is an integer that identifies if the compiler option
832 ** was used to build SQLite.
833 */
834 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
835 static void compileoptionusedFunc(
836   sqlite3_context *context,
837   int argc,
838   sqlite3_value **argv
839 ){
840   const char *zOptName;
841   assert( argc==1 );
842   UNUSED_PARAMETER(argc);
843   /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL
844   ** function is a wrapper around the sqlite3_compileoption_used() C/C++
845   ** function.
846   */
847   if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){
848     sqlite3_result_int(context, sqlite3_compileoption_used(zOptName));
849   }
850 }
851 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
852 
853 /*
854 ** Implementation of the sqlite_compileoption_get() function.
855 ** The result is a string that identifies the compiler options
856 ** used to build SQLite.
857 */
858 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
859 static void compileoptiongetFunc(
860   sqlite3_context *context,
861   int argc,
862   sqlite3_value **argv
863 ){
864   int n;
865   assert( argc==1 );
866   UNUSED_PARAMETER(argc);
867   /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function
868   ** is a wrapper around the sqlite3_compileoption_get() C/C++ function.
869   */
870   n = sqlite3_value_int(argv[0]);
871   sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC);
872 }
873 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
874 
875 /* Array for converting from half-bytes (nybbles) into ASCII hex
876 ** digits. */
877 static const char hexdigits[] = {
878   '0', '1', '2', '3', '4', '5', '6', '7',
879   '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
880 };
881 
882 /*
883 ** EXPERIMENTAL - This is not an official function.  The interface may
884 ** change.  This function may disappear.  Do not write code that depends
885 ** on this function.
886 **
887 ** Implementation of the QUOTE() function.  This function takes a single
888 ** argument.  If the argument is numeric, the return value is the same as
889 ** the argument.  If the argument is NULL, the return value is the string
890 ** "NULL".  Otherwise, the argument is enclosed in single quotes with
891 ** single-quote escapes.
892 */
893 static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
894   assert( argc==1 );
895   UNUSED_PARAMETER(argc);
896   switch( sqlite3_value_type(argv[0]) ){
897     case SQLITE_FLOAT: {
898       double r1, r2;
899       char zBuf[50];
900       r1 = sqlite3_value_double(argv[0]);
901       sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.15g", r1);
902       sqlite3AtoF(zBuf, &r2, 20, SQLITE_UTF8);
903       if( r1!=r2 ){
904         sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.20e", r1);
905       }
906       sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
907       break;
908     }
909     case SQLITE_INTEGER: {
910       sqlite3_result_value(context, argv[0]);
911       break;
912     }
913     case SQLITE_BLOB: {
914       char *zText = 0;
915       char const *zBlob = sqlite3_value_blob(argv[0]);
916       int nBlob = sqlite3_value_bytes(argv[0]);
917       assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
918       zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4);
919       if( zText ){
920         int i;
921         for(i=0; i<nBlob; i++){
922           zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
923           zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
924         }
925         zText[(nBlob*2)+2] = '\'';
926         zText[(nBlob*2)+3] = '\0';
927         zText[0] = 'X';
928         zText[1] = '\'';
929         sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
930         sqlite3_free(zText);
931       }
932       break;
933     }
934     case SQLITE_TEXT: {
935       int i,j;
936       u64 n;
937       const unsigned char *zArg = sqlite3_value_text(argv[0]);
938       char *z;
939 
940       if( zArg==0 ) return;
941       for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
942       z = contextMalloc(context, ((i64)i)+((i64)n)+3);
943       if( z ){
944         z[0] = '\'';
945         for(i=0, j=1; zArg[i]; i++){
946           z[j++] = zArg[i];
947           if( zArg[i]=='\'' ){
948             z[j++] = '\'';
949           }
950         }
951         z[j++] = '\'';
952         z[j] = 0;
953         sqlite3_result_text(context, z, j, sqlite3_free);
954       }
955       break;
956     }
957     default: {
958       assert( sqlite3_value_type(argv[0])==SQLITE_NULL );
959       sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
960       break;
961     }
962   }
963 }
964 
965 /*
966 ** The hex() function.  Interpret the argument as a blob.  Return
967 ** a hexadecimal rendering as text.
968 */
969 static void hexFunc(
970   sqlite3_context *context,
971   int argc,
972   sqlite3_value **argv
973 ){
974   int i, n;
975   const unsigned char *pBlob;
976   char *zHex, *z;
977   assert( argc==1 );
978   UNUSED_PARAMETER(argc);
979   pBlob = sqlite3_value_blob(argv[0]);
980   n = sqlite3_value_bytes(argv[0]);
981   assert( pBlob==sqlite3_value_blob(argv[0]) );  /* No encoding change */
982   z = zHex = contextMalloc(context, ((i64)n)*2 + 1);
983   if( zHex ){
984     for(i=0; i<n; i++, pBlob++){
985       unsigned char c = *pBlob;
986       *(z++) = hexdigits[(c>>4)&0xf];
987       *(z++) = hexdigits[c&0xf];
988     }
989     *z = 0;
990     sqlite3_result_text(context, zHex, n*2, sqlite3_free);
991   }
992 }
993 
994 /*
995 ** The zeroblob(N) function returns a zero-filled blob of size N bytes.
996 */
997 static void zeroblobFunc(
998   sqlite3_context *context,
999   int argc,
1000   sqlite3_value **argv
1001 ){
1002   i64 n;
1003   sqlite3 *db = sqlite3_context_db_handle(context);
1004   assert( argc==1 );
1005   UNUSED_PARAMETER(argc);
1006   n = sqlite3_value_int64(argv[0]);
1007   testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH] );
1008   testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
1009   if( n>db->aLimit[SQLITE_LIMIT_LENGTH] ){
1010     sqlite3_result_error_toobig(context);
1011   }else{
1012     sqlite3_result_zeroblob(context, (int)n); /* IMP: R-00293-64994 */
1013   }
1014 }
1015 
1016 /*
1017 ** The replace() function.  Three arguments are all strings: call
1018 ** them A, B, and C. The result is also a string which is derived
1019 ** from A by replacing every occurance of B with C.  The match
1020 ** must be exact.  Collating sequences are not used.
1021 */
1022 static void replaceFunc(
1023   sqlite3_context *context,
1024   int argc,
1025   sqlite3_value **argv
1026 ){
1027   const unsigned char *zStr;        /* The input string A */
1028   const unsigned char *zPattern;    /* The pattern string B */
1029   const unsigned char *zRep;        /* The replacement string C */
1030   unsigned char *zOut;              /* The output */
1031   int nStr;                /* Size of zStr */
1032   int nPattern;            /* Size of zPattern */
1033   int nRep;                /* Size of zRep */
1034   i64 nOut;                /* Maximum size of zOut */
1035   int loopLimit;           /* Last zStr[] that might match zPattern[] */
1036   int i, j;                /* Loop counters */
1037 
1038   assert( argc==3 );
1039   UNUSED_PARAMETER(argc);
1040   zStr = sqlite3_value_text(argv[0]);
1041   if( zStr==0 ) return;
1042   nStr = sqlite3_value_bytes(argv[0]);
1043   assert( zStr==sqlite3_value_text(argv[0]) );  /* No encoding change */
1044   zPattern = sqlite3_value_text(argv[1]);
1045   if( zPattern==0 ){
1046     assert( sqlite3_value_type(argv[1])==SQLITE_NULL
1047             || sqlite3_context_db_handle(context)->mallocFailed );
1048     return;
1049   }
1050   if( zPattern[0]==0 ){
1051     assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
1052     sqlite3_result_value(context, argv[0]);
1053     return;
1054   }
1055   nPattern = sqlite3_value_bytes(argv[1]);
1056   assert( zPattern==sqlite3_value_text(argv[1]) );  /* No encoding change */
1057   zRep = sqlite3_value_text(argv[2]);
1058   if( zRep==0 ) return;
1059   nRep = sqlite3_value_bytes(argv[2]);
1060   assert( zRep==sqlite3_value_text(argv[2]) );
1061   nOut = nStr + 1;
1062   assert( nOut<SQLITE_MAX_LENGTH );
1063   zOut = contextMalloc(context, (i64)nOut);
1064   if( zOut==0 ){
1065     return;
1066   }
1067   loopLimit = nStr - nPattern;
1068   for(i=j=0; i<=loopLimit; i++){
1069     if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
1070       zOut[j++] = zStr[i];
1071     }else{
1072       u8 *zOld;
1073       sqlite3 *db = sqlite3_context_db_handle(context);
1074       nOut += nRep - nPattern;
1075       testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
1076       testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
1077       if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
1078         sqlite3_result_error_toobig(context);
1079         sqlite3_free(zOut);
1080         return;
1081       }
1082       zOld = zOut;
1083       zOut = sqlite3_realloc(zOut, (int)nOut);
1084       if( zOut==0 ){
1085         sqlite3_result_error_nomem(context);
1086         sqlite3_free(zOld);
1087         return;
1088       }
1089       memcpy(&zOut[j], zRep, nRep);
1090       j += nRep;
1091       i += nPattern-1;
1092     }
1093   }
1094   assert( j+nStr-i+1==nOut );
1095   memcpy(&zOut[j], &zStr[i], nStr-i);
1096   j += nStr - i;
1097   assert( j<=nOut );
1098   zOut[j] = 0;
1099   sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
1100 }
1101 
1102 /*
1103 ** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
1104 ** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
1105 */
1106 static void trimFunc(
1107   sqlite3_context *context,
1108   int argc,
1109   sqlite3_value **argv
1110 ){
1111   const unsigned char *zIn;         /* Input string */
1112   const unsigned char *zCharSet;    /* Set of characters to trim */
1113   int nIn;                          /* Number of bytes in input */
1114   int flags;                        /* 1: trimleft  2: trimright  3: trim */
1115   int i;                            /* Loop counter */
1116   unsigned char *aLen = 0;          /* Length of each character in zCharSet */
1117   unsigned char **azChar = 0;       /* Individual characters in zCharSet */
1118   int nChar;                        /* Number of characters in zCharSet */
1119 
1120   if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1121     return;
1122   }
1123   zIn = sqlite3_value_text(argv[0]);
1124   if( zIn==0 ) return;
1125   nIn = sqlite3_value_bytes(argv[0]);
1126   assert( zIn==sqlite3_value_text(argv[0]) );
1127   if( argc==1 ){
1128     static const unsigned char lenOne[] = { 1 };
1129     static unsigned char * const azOne[] = { (u8*)" " };
1130     nChar = 1;
1131     aLen = (u8*)lenOne;
1132     azChar = (unsigned char **)azOne;
1133     zCharSet = 0;
1134   }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
1135     return;
1136   }else{
1137     const unsigned char *z;
1138     for(z=zCharSet, nChar=0; *z; nChar++){
1139       SQLITE_SKIP_UTF8(z);
1140     }
1141     if( nChar>0 ){
1142       azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));
1143       if( azChar==0 ){
1144         return;
1145       }
1146       aLen = (unsigned char*)&azChar[nChar];
1147       for(z=zCharSet, nChar=0; *z; nChar++){
1148         azChar[nChar] = (unsigned char *)z;
1149         SQLITE_SKIP_UTF8(z);
1150         aLen[nChar] = (u8)(z - azChar[nChar]);
1151       }
1152     }
1153   }
1154   if( nChar>0 ){
1155     flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
1156     if( flags & 1 ){
1157       while( nIn>0 ){
1158         int len = 0;
1159         for(i=0; i<nChar; i++){
1160           len = aLen[i];
1161           if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
1162         }
1163         if( i>=nChar ) break;
1164         zIn += len;
1165         nIn -= len;
1166       }
1167     }
1168     if( flags & 2 ){
1169       while( nIn>0 ){
1170         int len = 0;
1171         for(i=0; i<nChar; i++){
1172           len = aLen[i];
1173           if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
1174         }
1175         if( i>=nChar ) break;
1176         nIn -= len;
1177       }
1178     }
1179     if( zCharSet ){
1180       sqlite3_free(azChar);
1181     }
1182   }
1183   sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
1184 }
1185 
1186 
1187 /* IMP: R-25361-16150 This function is omitted from SQLite by default. It
1188 ** is only available if the SQLITE_SOUNDEX compile-time option is used
1189 ** when SQLite is built.
1190 */
1191 #ifdef SQLITE_SOUNDEX
1192 /*
1193 ** Compute the soundex encoding of a word.
1194 **
1195 ** IMP: R-59782-00072 The soundex(X) function returns a string that is the
1196 ** soundex encoding of the string X.
1197 */
1198 static void soundexFunc(
1199   sqlite3_context *context,
1200   int argc,
1201   sqlite3_value **argv
1202 ){
1203   char zResult[8];
1204   const u8 *zIn;
1205   int i, j;
1206   static const unsigned char iCode[] = {
1207     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1208     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1209     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1210     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1211     0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1212     1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1213     0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1214     1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1215   };
1216   assert( argc==1 );
1217   zIn = (u8*)sqlite3_value_text(argv[0]);
1218   if( zIn==0 ) zIn = (u8*)"";
1219   for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
1220   if( zIn[i] ){
1221     u8 prevcode = iCode[zIn[i]&0x7f];
1222     zResult[0] = sqlite3Toupper(zIn[i]);
1223     for(j=1; j<4 && zIn[i]; i++){
1224       int code = iCode[zIn[i]&0x7f];
1225       if( code>0 ){
1226         if( code!=prevcode ){
1227           prevcode = code;
1228           zResult[j++] = code + '0';
1229         }
1230       }else{
1231         prevcode = 0;
1232       }
1233     }
1234     while( j<4 ){
1235       zResult[j++] = '0';
1236     }
1237     zResult[j] = 0;
1238     sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
1239   }else{
1240     /* IMP: R-64894-50321 The string "?000" is returned if the argument
1241     ** is NULL or contains no ASCII alphabetic characters. */
1242     sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
1243   }
1244 }
1245 #endif /* SQLITE_SOUNDEX */
1246 
1247 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1248 /*
1249 ** A function that loads a shared-library extension then returns NULL.
1250 */
1251 static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
1252   const char *zFile = (const char *)sqlite3_value_text(argv[0]);
1253   const char *zProc;
1254   sqlite3 *db = sqlite3_context_db_handle(context);
1255   char *zErrMsg = 0;
1256 
1257   if( argc==2 ){
1258     zProc = (const char *)sqlite3_value_text(argv[1]);
1259   }else{
1260     zProc = 0;
1261   }
1262   if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
1263     sqlite3_result_error(context, zErrMsg, -1);
1264     sqlite3_free(zErrMsg);
1265   }
1266 }
1267 #endif
1268 
1269 
1270 /*
1271 ** An instance of the following structure holds the context of a
1272 ** sum() or avg() aggregate computation.
1273 */
1274 typedef struct SumCtx SumCtx;
1275 struct SumCtx {
1276   double rSum;      /* Floating point sum */
1277   i64 iSum;         /* Integer sum */
1278   i64 cnt;          /* Number of elements summed */
1279   u8 overflow;      /* True if integer overflow seen */
1280   u8 approx;        /* True if non-integer value was input to the sum */
1281 };
1282 
1283 /*
1284 ** Routines used to compute the sum, average, and total.
1285 **
1286 ** The SUM() function follows the (broken) SQL standard which means
1287 ** that it returns NULL if it sums over no inputs.  TOTAL returns
1288 ** 0.0 in that case.  In addition, TOTAL always returns a float where
1289 ** SUM might return an integer if it never encounters a floating point
1290 ** value.  TOTAL never fails, but SUM might through an exception if
1291 ** it overflows an integer.
1292 */
1293 static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
1294   SumCtx *p;
1295   int type;
1296   assert( argc==1 );
1297   UNUSED_PARAMETER(argc);
1298   p = sqlite3_aggregate_context(context, sizeof(*p));
1299   type = sqlite3_value_numeric_type(argv[0]);
1300   if( p && type!=SQLITE_NULL ){
1301     p->cnt++;
1302     if( type==SQLITE_INTEGER ){
1303       i64 v = sqlite3_value_int64(argv[0]);
1304       p->rSum += v;
1305       if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){
1306         p->overflow = 1;
1307       }
1308     }else{
1309       p->rSum += sqlite3_value_double(argv[0]);
1310       p->approx = 1;
1311     }
1312   }
1313 }
1314 static void sumFinalize(sqlite3_context *context){
1315   SumCtx *p;
1316   p = sqlite3_aggregate_context(context, 0);
1317   if( p && p->cnt>0 ){
1318     if( p->overflow ){
1319       sqlite3_result_error(context,"integer overflow",-1);
1320     }else if( p->approx ){
1321       sqlite3_result_double(context, p->rSum);
1322     }else{
1323       sqlite3_result_int64(context, p->iSum);
1324     }
1325   }
1326 }
1327 static void avgFinalize(sqlite3_context *context){
1328   SumCtx *p;
1329   p = sqlite3_aggregate_context(context, 0);
1330   if( p && p->cnt>0 ){
1331     sqlite3_result_double(context, p->rSum/(double)p->cnt);
1332   }
1333 }
1334 static void totalFinalize(sqlite3_context *context){
1335   SumCtx *p;
1336   p = sqlite3_aggregate_context(context, 0);
1337   /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
1338   sqlite3_result_double(context, p ? p->rSum : (double)0);
1339 }
1340 
1341 /*
1342 ** The following structure keeps track of state information for the
1343 ** count() aggregate function.
1344 */
1345 typedef struct CountCtx CountCtx;
1346 struct CountCtx {
1347   i64 n;
1348 };
1349 
1350 /*
1351 ** Routines to implement the count() aggregate function.
1352 */
1353 static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
1354   CountCtx *p;
1355   p = sqlite3_aggregate_context(context, sizeof(*p));
1356   if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
1357     p->n++;
1358   }
1359 
1360 #ifndef SQLITE_OMIT_DEPRECATED
1361   /* The sqlite3_aggregate_count() function is deprecated.  But just to make
1362   ** sure it still operates correctly, verify that its count agrees with our
1363   ** internal count when using count(*) and when the total count can be
1364   ** expressed as a 32-bit integer. */
1365   assert( argc==1 || p==0 || p->n>0x7fffffff
1366           || p->n==sqlite3_aggregate_count(context) );
1367 #endif
1368 }
1369 static void countFinalize(sqlite3_context *context){
1370   CountCtx *p;
1371   p = sqlite3_aggregate_context(context, 0);
1372   sqlite3_result_int64(context, p ? p->n : 0);
1373 }
1374 
1375 /*
1376 ** Routines to implement min() and max() aggregate functions.
1377 */
1378 static void minmaxStep(
1379   sqlite3_context *context,
1380   int NotUsed,
1381   sqlite3_value **argv
1382 ){
1383   Mem *pArg  = (Mem *)argv[0];
1384   Mem *pBest;
1385   UNUSED_PARAMETER(NotUsed);
1386 
1387   pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
1388   if( !pBest ) return;
1389 
1390   if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1391     if( pBest->flags ) sqlite3SkipAccumulatorLoad(context);
1392   }else if( pBest->flags ){
1393     int max;
1394     int cmp;
1395     CollSeq *pColl = sqlite3GetFuncCollSeq(context);
1396     /* This step function is used for both the min() and max() aggregates,
1397     ** the only difference between the two being that the sense of the
1398     ** comparison is inverted. For the max() aggregate, the
1399     ** sqlite3_user_data() function returns (void *)-1. For min() it
1400     ** returns (void *)db, where db is the sqlite3* database pointer.
1401     ** Therefore the next statement sets variable 'max' to 1 for the max()
1402     ** aggregate, or 0 for min().
1403     */
1404     max = sqlite3_user_data(context)!=0;
1405     cmp = sqlite3MemCompare(pBest, pArg, pColl);
1406     if( (max && cmp<0) || (!max && cmp>0) ){
1407       sqlite3VdbeMemCopy(pBest, pArg);
1408     }else{
1409       sqlite3SkipAccumulatorLoad(context);
1410     }
1411   }else{
1412     sqlite3VdbeMemCopy(pBest, pArg);
1413   }
1414 }
1415 static void minMaxFinalize(sqlite3_context *context){
1416   sqlite3_value *pRes;
1417   pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1418   if( pRes ){
1419     if( pRes->flags ){
1420       sqlite3_result_value(context, pRes);
1421     }
1422     sqlite3VdbeMemRelease(pRes);
1423   }
1424 }
1425 
1426 /*
1427 ** group_concat(EXPR, ?SEPARATOR?)
1428 */
1429 static void groupConcatStep(
1430   sqlite3_context *context,
1431   int argc,
1432   sqlite3_value **argv
1433 ){
1434   const char *zVal;
1435   StrAccum *pAccum;
1436   const char *zSep;
1437   int nVal, nSep;
1438   assert( argc==1 || argc==2 );
1439   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
1440   pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
1441 
1442   if( pAccum ){
1443     sqlite3 *db = sqlite3_context_db_handle(context);
1444     int firstTerm = pAccum->useMalloc==0;
1445     pAccum->useMalloc = 2;
1446     pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
1447     if( !firstTerm ){
1448       if( argc==2 ){
1449         zSep = (char*)sqlite3_value_text(argv[1]);
1450         nSep = sqlite3_value_bytes(argv[1]);
1451       }else{
1452         zSep = ",";
1453         nSep = 1;
1454       }
1455       sqlite3StrAccumAppend(pAccum, zSep, nSep);
1456     }
1457     zVal = (char*)sqlite3_value_text(argv[0]);
1458     nVal = sqlite3_value_bytes(argv[0]);
1459     sqlite3StrAccumAppend(pAccum, zVal, nVal);
1460   }
1461 }
1462 static void groupConcatFinalize(sqlite3_context *context){
1463   StrAccum *pAccum;
1464   pAccum = sqlite3_aggregate_context(context, 0);
1465   if( pAccum ){
1466     if( pAccum->tooBig ){
1467       sqlite3_result_error_toobig(context);
1468     }else if( pAccum->mallocFailed ){
1469       sqlite3_result_error_nomem(context);
1470     }else{
1471       sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1,
1472                           sqlite3_free);
1473     }
1474   }
1475 }
1476 
1477 /*
1478 ** This routine does per-connection function registration.  Most
1479 ** of the built-in functions above are part of the global function set.
1480 ** This routine only deals with those that are not global.
1481 */
1482 void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
1483   int rc = sqlite3_overload_function(db, "MATCH", 2);
1484   assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1485   if( rc==SQLITE_NOMEM ){
1486     db->mallocFailed = 1;
1487   }
1488 }
1489 
1490 /*
1491 ** Set the LIKEOPT flag on the 2-argument function with the given name.
1492 */
1493 static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
1494   FuncDef *pDef;
1495   pDef = sqlite3FindFunction(db, zName, sqlite3Strlen30(zName),
1496                              2, SQLITE_UTF8, 0);
1497   if( ALWAYS(pDef) ){
1498     pDef->flags = flagVal;
1499   }
1500 }
1501 
1502 /*
1503 ** Register the built-in LIKE and GLOB functions.  The caseSensitive
1504 ** parameter determines whether or not the LIKE operator is case
1505 ** sensitive.  GLOB is always case sensitive.
1506 */
1507 void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1508   struct compareInfo *pInfo;
1509   if( caseSensitive ){
1510     pInfo = (struct compareInfo*)&likeInfoAlt;
1511   }else{
1512     pInfo = (struct compareInfo*)&likeInfoNorm;
1513   }
1514   sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
1515   sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
1516   sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8,
1517       (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0);
1518   setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
1519   setLikeOptFlag(db, "like",
1520       caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
1521 }
1522 
1523 /*
1524 ** pExpr points to an expression which implements a function.  If
1525 ** it is appropriate to apply the LIKE optimization to that function
1526 ** then set aWc[0] through aWc[2] to the wildcard characters and
1527 ** return TRUE.  If the function is not a LIKE-style function then
1528 ** return FALSE.
1529 */
1530 int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
1531   FuncDef *pDef;
1532   if( pExpr->op!=TK_FUNCTION
1533    || !pExpr->x.pList
1534    || pExpr->x.pList->nExpr!=2
1535   ){
1536     return 0;
1537   }
1538   assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
1539   pDef = sqlite3FindFunction(db, pExpr->u.zToken,
1540                              sqlite3Strlen30(pExpr->u.zToken),
1541                              2, SQLITE_UTF8, 0);
1542   if( NEVER(pDef==0) || (pDef->flags & SQLITE_FUNC_LIKE)==0 ){
1543     return 0;
1544   }
1545 
1546   /* The memcpy() statement assumes that the wildcard characters are
1547   ** the first three statements in the compareInfo structure.  The
1548   ** asserts() that follow verify that assumption
1549   */
1550   memcpy(aWc, pDef->pUserData, 3);
1551   assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1552   assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1553   assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
1554   *pIsNocase = (pDef->flags & SQLITE_FUNC_CASE)==0;
1555   return 1;
1556 }
1557 
1558 /*
1559 ** All all of the FuncDef structures in the aBuiltinFunc[] array above
1560 ** to the global function hash table.  This occurs at start-time (as
1561 ** a consequence of calling sqlite3_initialize()).
1562 **
1563 ** After this routine runs
1564 */
1565 void sqlite3RegisterGlobalFunctions(void){
1566   /*
1567   ** The following array holds FuncDef structures for all of the functions
1568   ** defined in this file.
1569   **
1570   ** The array cannot be constant since changes are made to the
1571   ** FuncDef.pHash elements at start-time.  The elements of this array
1572   ** are read-only after initialization is complete.
1573   */
1574   static SQLITE_WSD FuncDef aBuiltinFunc[] = {
1575     FUNCTION(ltrim,              1, 1, 0, trimFunc         ),
1576     FUNCTION(ltrim,              2, 1, 0, trimFunc         ),
1577     FUNCTION(rtrim,              1, 2, 0, trimFunc         ),
1578     FUNCTION(rtrim,              2, 2, 0, trimFunc         ),
1579     FUNCTION(trim,               1, 3, 0, trimFunc         ),
1580     FUNCTION(trim,               2, 3, 0, trimFunc         ),
1581     FUNCTION(min,               -1, 0, 1, minmaxFunc       ),
1582     FUNCTION(min,                0, 0, 1, 0                ),
1583     AGGREGATE(min,               1, 0, 1, minmaxStep,      minMaxFinalize ),
1584     FUNCTION(max,               -1, 1, 1, minmaxFunc       ),
1585     FUNCTION(max,                0, 1, 1, 0                ),
1586     AGGREGATE(max,               1, 1, 1, minmaxStep,      minMaxFinalize ),
1587     FUNCTION2(typeof,            1, 0, 0, typeofFunc,  SQLITE_FUNC_TYPEOF),
1588     FUNCTION2(length,            1, 0, 0, lengthFunc,  SQLITE_FUNC_LENGTH),
1589     FUNCTION(instr,              2, 0, 0, instrFunc        ),
1590     FUNCTION(substr,             2, 0, 0, substrFunc       ),
1591     FUNCTION(substr,             3, 0, 0, substrFunc       ),
1592     FUNCTION(abs,                1, 0, 0, absFunc          ),
1593 #ifndef SQLITE_OMIT_FLOATING_POINT
1594     FUNCTION(round,              1, 0, 0, roundFunc        ),
1595     FUNCTION(round,              2, 0, 0, roundFunc        ),
1596 #endif
1597     FUNCTION(upper,              1, 0, 0, upperFunc        ),
1598     FUNCTION(lower,              1, 0, 0, lowerFunc        ),
1599     FUNCTION(coalesce,           1, 0, 0, 0                ),
1600     FUNCTION(coalesce,           0, 0, 0, 0                ),
1601     FUNCTION2(coalesce,         -1, 0, 0, ifnullFunc,  SQLITE_FUNC_COALESCE),
1602     FUNCTION(hex,                1, 0, 0, hexFunc          ),
1603     FUNCTION2(ifnull,            2, 0, 0, ifnullFunc,  SQLITE_FUNC_COALESCE),
1604     FUNCTION(random,             0, 0, 0, randomFunc       ),
1605     FUNCTION(randomblob,         1, 0, 0, randomBlob       ),
1606     FUNCTION(nullif,             2, 0, 1, nullifFunc       ),
1607     FUNCTION(sqlite_version,     0, 0, 0, versionFunc      ),
1608     FUNCTION(sqlite_source_id,   0, 0, 0, sourceidFunc     ),
1609     FUNCTION(sqlite_log,         2, 0, 0, errlogFunc       ),
1610 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
1611     FUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc  ),
1612     FUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc  ),
1613 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
1614     FUNCTION(quote,              1, 0, 0, quoteFunc        ),
1615     FUNCTION(last_insert_rowid,  0, 0, 0, last_insert_rowid),
1616     FUNCTION(changes,            0, 0, 0, changes          ),
1617     FUNCTION(total_changes,      0, 0, 0, total_changes    ),
1618     FUNCTION(replace,            3, 0, 0, replaceFunc      ),
1619     FUNCTION(zeroblob,           1, 0, 0, zeroblobFunc     ),
1620   #ifdef SQLITE_SOUNDEX
1621     FUNCTION(soundex,            1, 0, 0, soundexFunc      ),
1622   #endif
1623   #ifndef SQLITE_OMIT_LOAD_EXTENSION
1624     FUNCTION(load_extension,     1, 0, 0, loadExt          ),
1625     FUNCTION(load_extension,     2, 0, 0, loadExt          ),
1626   #endif
1627     AGGREGATE(sum,               1, 0, 0, sumStep,         sumFinalize    ),
1628     AGGREGATE(total,             1, 0, 0, sumStep,         totalFinalize    ),
1629     AGGREGATE(avg,               1, 0, 0, sumStep,         avgFinalize    ),
1630  /* AGGREGATE(count,             0, 0, 0, countStep,       countFinalize  ), */
1631     {0,SQLITE_UTF8,SQLITE_FUNC_COUNT,0,0,0,countStep,countFinalize,"count",0,0},
1632     AGGREGATE(count,             1, 0, 0, countStep,       countFinalize  ),
1633     AGGREGATE(group_concat,      1, 0, 0, groupConcatStep, groupConcatFinalize),
1634     AGGREGATE(group_concat,      2, 0, 0, groupConcatStep, groupConcatFinalize),
1635 
1636     LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1637   #ifdef SQLITE_CASE_SENSITIVE_LIKE
1638     LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1639     LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1640   #else
1641     LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
1642     LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
1643   #endif
1644   };
1645 
1646   int i;
1647   FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
1648   FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aBuiltinFunc);
1649 
1650   for(i=0; i<ArraySize(aBuiltinFunc); i++){
1651     sqlite3FuncDefInsert(pHash, &aFunc[i]);
1652   }
1653   sqlite3RegisterDateTimeFunctions();
1654 #ifndef SQLITE_OMIT_ALTERTABLE
1655   sqlite3AlterFunctions();
1656 #endif
1657 }
1658