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