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