xref: /sqlite-3.40.0/src/func.c (revision 7ac2ee0a)
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-language implementations for many of the SQL
13 ** functions of SQLite.  (Some function, and in particular the date and
14 ** time functions, are implemented separately.)
15 */
16 #include "sqliteInt.h"
17 #include <stdlib.h>
18 #include <assert.h>
19 #include "vdbeInt.h"
20 
21 /*
22 ** Return the collating function associated with a function.
23 */
24 static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
25   VdbeOp *pOp;
26   assert( context->pVdbe!=0 );
27   pOp = &context->pVdbe->aOp[context->iOp-1];
28   assert( pOp->opcode==OP_CollSeq );
29   assert( pOp->p4type==P4_COLLSEQ );
30   return pOp->p4.pColl;
31 }
32 
33 /*
34 ** Indicate that the accumulator load should be skipped on this
35 ** iteration of the aggregate loop.
36 */
37 static void sqlite3SkipAccumulatorLoad(sqlite3_context *context){
38   assert( context->isError<=0 );
39   context->isError = -1;
40   context->skipFlag = 1;
41 }
42 
43 /*
44 ** Implementation of the non-aggregate min() and max() functions
45 */
46 static void minmaxFunc(
47   sqlite3_context *context,
48   int argc,
49   sqlite3_value **argv
50 ){
51   int i;
52   int mask;    /* 0 for min() or 0xffffffff for max() */
53   int iBest;
54   CollSeq *pColl;
55 
56   assert( argc>1 );
57   mask = sqlite3_user_data(context)==0 ? 0 : -1;
58   pColl = sqlite3GetFuncCollSeq(context);
59   assert( pColl );
60   assert( mask==-1 || mask==0 );
61   iBest = 0;
62   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
63   for(i=1; i<argc; i++){
64     if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
65     if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
66       testcase( mask==0 );
67       iBest = i;
68     }
69   }
70   sqlite3_result_value(context, argv[iBest]);
71 }
72 
73 /*
74 ** Return the type of the argument.
75 */
76 static void typeofFunc(
77   sqlite3_context *context,
78   int NotUsed,
79   sqlite3_value **argv
80 ){
81   static const char *azType[] = { "integer", "real", "text", "blob", "null" };
82   int i = sqlite3_value_type(argv[0]) - 1;
83   UNUSED_PARAMETER(NotUsed);
84   assert( i>=0 && i<ArraySize(azType) );
85   assert( SQLITE_INTEGER==1 );
86   assert( SQLITE_FLOAT==2 );
87   assert( SQLITE_TEXT==3 );
88   assert( SQLITE_BLOB==4 );
89   assert( SQLITE_NULL==5 );
90   /* EVIDENCE-OF: R-01470-60482 The sqlite3_value_type(V) interface returns
91   ** the datatype code for the initial datatype of the sqlite3_value object
92   ** V. The returned value is one of SQLITE_INTEGER, SQLITE_FLOAT,
93   ** SQLITE_TEXT, SQLITE_BLOB, or SQLITE_NULL. */
94   sqlite3_result_text(context, azType[i], -1, SQLITE_STATIC);
95 }
96 
97 
98 /*
99 ** Implementation of the length() function
100 */
101 static void lengthFunc(
102   sqlite3_context *context,
103   int argc,
104   sqlite3_value **argv
105 ){
106   assert( argc==1 );
107   UNUSED_PARAMETER(argc);
108   switch( sqlite3_value_type(argv[0]) ){
109     case SQLITE_BLOB:
110     case SQLITE_INTEGER:
111     case SQLITE_FLOAT: {
112       sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
113       break;
114     }
115     case SQLITE_TEXT: {
116       const unsigned char *z = sqlite3_value_text(argv[0]);
117       const unsigned char *z0;
118       unsigned char c;
119       if( z==0 ) return;
120       z0 = z;
121       while( (c = *z)!=0 ){
122         z++;
123         if( c>=0xc0 ){
124           while( (*z & 0xc0)==0x80 ){ z++; z0++; }
125         }
126       }
127       sqlite3_result_int(context, (int)(z-z0));
128       break;
129     }
130     default: {
131       sqlite3_result_null(context);
132       break;
133     }
134   }
135 }
136 
137 /*
138 ** Implementation of the abs() function.
139 **
140 ** IMP: R-23979-26855 The abs(X) function returns the absolute value of
141 ** the numeric argument X.
142 */
143 static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
144   assert( argc==1 );
145   UNUSED_PARAMETER(argc);
146   switch( sqlite3_value_type(argv[0]) ){
147     case SQLITE_INTEGER: {
148       i64 iVal = sqlite3_value_int64(argv[0]);
149       if( iVal<0 ){
150         if( iVal==SMALLEST_INT64 ){
151           /* IMP: R-31676-45509 If X is the integer -9223372036854775808
152           ** then abs(X) throws an integer overflow error since there is no
153           ** equivalent positive 64-bit two complement value. */
154           sqlite3_result_error(context, "integer overflow", -1);
155           return;
156         }
157         iVal = -iVal;
158       }
159       sqlite3_result_int64(context, iVal);
160       break;
161     }
162     case SQLITE_NULL: {
163       /* IMP: R-37434-19929 Abs(X) returns NULL if X is NULL. */
164       sqlite3_result_null(context);
165       break;
166     }
167     default: {
168       /* Because sqlite3_value_double() returns 0.0 if the argument is not
169       ** something that can be converted into a number, we have:
170       ** IMP: R-01992-00519 Abs(X) returns 0.0 if X is a string or blob
171       ** that cannot be converted to a numeric value.
172       */
173       double rVal = sqlite3_value_double(argv[0]);
174       if( rVal<0 ) rVal = -rVal;
175       sqlite3_result_double(context, rVal);
176       break;
177     }
178   }
179 }
180 
181 /*
182 ** Implementation of the instr() function.
183 **
184 ** instr(haystack,needle) finds the first occurrence of needle
185 ** in haystack and returns the number of previous characters plus 1,
186 ** or 0 if needle does not occur within haystack.
187 **
188 ** If both haystack and needle are BLOBs, then the result is one more than
189 ** the number of bytes in haystack prior to the first occurrence of needle,
190 ** or 0 if needle never occurs in haystack.
191 */
192 static void instrFunc(
193   sqlite3_context *context,
194   int argc,
195   sqlite3_value **argv
196 ){
197   const unsigned char *zHaystack;
198   const unsigned char *zNeedle;
199   int nHaystack;
200   int nNeedle;
201   int typeHaystack, typeNeedle;
202   int N = 1;
203   int isText;
204   unsigned char firstChar;
205 
206   UNUSED_PARAMETER(argc);
207   typeHaystack = sqlite3_value_type(argv[0]);
208   typeNeedle = sqlite3_value_type(argv[1]);
209   if( typeHaystack==SQLITE_NULL || typeNeedle==SQLITE_NULL ) return;
210   nHaystack = sqlite3_value_bytes(argv[0]);
211   nNeedle = sqlite3_value_bytes(argv[1]);
212   if( nNeedle>0 ){
213     if( typeHaystack==SQLITE_BLOB && typeNeedle==SQLITE_BLOB ){
214       zHaystack = sqlite3_value_blob(argv[0]);
215       zNeedle = sqlite3_value_blob(argv[1]);
216       isText = 0;
217     }else{
218       zHaystack = sqlite3_value_text(argv[0]);
219       zNeedle = sqlite3_value_text(argv[1]);
220       isText = 1;
221     }
222     if( zNeedle==0 || (nHaystack && zHaystack==0) ) return;
223     firstChar = zNeedle[0];
224     while( nNeedle<=nHaystack
225        && (zHaystack[0]!=firstChar || memcmp(zHaystack, zNeedle, nNeedle)!=0)
226     ){
227       N++;
228       do{
229         nHaystack--;
230         zHaystack++;
231       }while( isText && (zHaystack[0]&0xc0)==0x80 );
232     }
233     if( nNeedle>nHaystack ) N = 0;
234   }
235   sqlite3_result_int(context, N);
236 }
237 
238 /*
239 ** Implementation of the printf() function.
240 */
241 static void printfFunc(
242   sqlite3_context *context,
243   int argc,
244   sqlite3_value **argv
245 ){
246   PrintfArguments x;
247   StrAccum str;
248   const char *zFormat;
249   int n;
250   sqlite3 *db = sqlite3_context_db_handle(context);
251 
252   if( argc>=1 && (zFormat = (const char*)sqlite3_value_text(argv[0]))!=0 ){
253     x.nArg = argc-1;
254     x.nUsed = 0;
255     x.apArg = argv+1;
256     sqlite3StrAccumInit(&str, db, 0, 0, db->aLimit[SQLITE_LIMIT_LENGTH]);
257     str.printfFlags = SQLITE_PRINTF_SQLFUNC;
258     sqlite3_str_appendf(&str, zFormat, &x);
259     n = str.nChar;
260     sqlite3_result_text(context, sqlite3StrAccumFinish(&str), n,
261                         SQLITE_DYNAMIC);
262   }
263 }
264 
265 /*
266 ** Implementation of the substr() function.
267 **
268 ** substr(x,p1,p2)  returns p2 characters of x[] beginning with p1.
269 ** p1 is 1-indexed.  So substr(x,1,1) returns the first character
270 ** of x.  If x is text, then we actually count UTF-8 characters.
271 ** If x is a blob, then we count bytes.
272 **
273 ** If p1 is negative, then we begin abs(p1) from the end of x[].
274 **
275 ** If p2 is negative, return the p2 characters preceding p1.
276 */
277 static void substrFunc(
278   sqlite3_context *context,
279   int argc,
280   sqlite3_value **argv
281 ){
282   const unsigned char *z;
283   const unsigned char *z2;
284   int len;
285   int p0type;
286   i64 p1, p2;
287   int negP2 = 0;
288 
289   assert( argc==3 || argc==2 );
290   if( sqlite3_value_type(argv[1])==SQLITE_NULL
291    || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL)
292   ){
293     return;
294   }
295   p0type = sqlite3_value_type(argv[0]);
296   p1 = sqlite3_value_int(argv[1]);
297   if( p0type==SQLITE_BLOB ){
298     len = sqlite3_value_bytes(argv[0]);
299     z = sqlite3_value_blob(argv[0]);
300     if( z==0 ) return;
301     assert( len==sqlite3_value_bytes(argv[0]) );
302   }else{
303     z = sqlite3_value_text(argv[0]);
304     if( z==0 ) return;
305     len = 0;
306     if( p1<0 ){
307       for(z2=z; *z2; len++){
308         SQLITE_SKIP_UTF8(z2);
309       }
310     }
311   }
312 #ifdef SQLITE_SUBSTR_COMPATIBILITY
313   /* If SUBSTR_COMPATIBILITY is defined then substr(X,0,N) work the same as
314   ** as substr(X,1,N) - it returns the first N characters of X.  This
315   ** is essentially a back-out of the bug-fix in check-in [5fc125d362df4b8]
316   ** from 2009-02-02 for compatibility of applications that exploited the
317   ** old buggy behavior. */
318   if( p1==0 ) p1 = 1; /* <rdar://problem/6778339> */
319 #endif
320   if( argc==3 ){
321     p2 = sqlite3_value_int(argv[2]);
322     if( p2<0 ){
323       p2 = -p2;
324       negP2 = 1;
325     }
326   }else{
327     p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH];
328   }
329   if( p1<0 ){
330     p1 += len;
331     if( p1<0 ){
332       p2 += p1;
333       if( p2<0 ) p2 = 0;
334       p1 = 0;
335     }
336   }else if( p1>0 ){
337     p1--;
338   }else if( p2>0 ){
339     p2--;
340   }
341   if( negP2 ){
342     p1 -= p2;
343     if( p1<0 ){
344       p2 += p1;
345       p1 = 0;
346     }
347   }
348   assert( p1>=0 && p2>=0 );
349   if( p0type!=SQLITE_BLOB ){
350     while( *z && p1 ){
351       SQLITE_SKIP_UTF8(z);
352       p1--;
353     }
354     for(z2=z; *z2 && p2; p2--){
355       SQLITE_SKIP_UTF8(z2);
356     }
357     sqlite3_result_text64(context, (char*)z, z2-z, SQLITE_TRANSIENT,
358                           SQLITE_UTF8);
359   }else{
360     if( p1+p2>len ){
361       p2 = len-p1;
362       if( p2<0 ) p2 = 0;
363     }
364     sqlite3_result_blob64(context, (char*)&z[p1], (u64)p2, SQLITE_TRANSIENT);
365   }
366 }
367 
368 /*
369 ** Implementation of the round() function
370 */
371 #ifndef SQLITE_OMIT_FLOATING_POINT
372 static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
373   int n = 0;
374   double r;
375   char *zBuf;
376   assert( argc==1 || argc==2 );
377   if( argc==2 ){
378     if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
379     n = sqlite3_value_int(argv[1]);
380     if( n>30 ) n = 30;
381     if( n<0 ) n = 0;
382   }
383   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
384   r = sqlite3_value_double(argv[0]);
385   /* If Y==0 and X will fit in a 64-bit int,
386   ** handle the rounding directly,
387   ** otherwise use printf.
388   */
389   if( n==0 && r>=0 && r<LARGEST_INT64-1 ){
390     r = (double)((sqlite_int64)(r+0.5));
391   }else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){
392     r = -(double)((sqlite_int64)((-r)+0.5));
393   }else{
394     zBuf = sqlite3_mprintf("%.*f",n,r);
395     if( zBuf==0 ){
396       sqlite3_result_error_nomem(context);
397       return;
398     }
399     sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8);
400     sqlite3_free(zBuf);
401   }
402   sqlite3_result_double(context, r);
403 }
404 #endif
405 
406 /*
407 ** Allocate nByte bytes of space using sqlite3Malloc(). If the
408 ** allocation fails, call sqlite3_result_error_nomem() to notify
409 ** the database handle that malloc() has failed and return NULL.
410 ** If nByte is larger than the maximum string or blob length, then
411 ** raise an SQLITE_TOOBIG exception and return NULL.
412 */
413 static void *contextMalloc(sqlite3_context *context, i64 nByte){
414   char *z;
415   sqlite3 *db = sqlite3_context_db_handle(context);
416   assert( nByte>0 );
417   testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] );
418   testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
419   if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
420     sqlite3_result_error_toobig(context);
421     z = 0;
422   }else{
423     z = sqlite3Malloc(nByte);
424     if( !z ){
425       sqlite3_result_error_nomem(context);
426     }
427   }
428   return z;
429 }
430 
431 /*
432 ** Implementation of the upper() and lower() SQL functions.
433 */
434 static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
435   char *z1;
436   const char *z2;
437   int i, n;
438   UNUSED_PARAMETER(argc);
439   z2 = (char*)sqlite3_value_text(argv[0]);
440   n = sqlite3_value_bytes(argv[0]);
441   /* Verify that the call to _bytes() does not invalidate the _text() pointer */
442   assert( z2==(char*)sqlite3_value_text(argv[0]) );
443   if( z2 ){
444     z1 = contextMalloc(context, ((i64)n)+1);
445     if( z1 ){
446       for(i=0; i<n; i++){
447         z1[i] = (char)sqlite3Toupper(z2[i]);
448       }
449       sqlite3_result_text(context, z1, n, sqlite3_free);
450     }
451   }
452 }
453 static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
454   char *z1;
455   const char *z2;
456   int i, n;
457   UNUSED_PARAMETER(argc);
458   z2 = (char*)sqlite3_value_text(argv[0]);
459   n = sqlite3_value_bytes(argv[0]);
460   /* Verify that the call to _bytes() does not invalidate the _text() pointer */
461   assert( z2==(char*)sqlite3_value_text(argv[0]) );
462   if( z2 ){
463     z1 = contextMalloc(context, ((i64)n)+1);
464     if( z1 ){
465       for(i=0; i<n; i++){
466         z1[i] = sqlite3Tolower(z2[i]);
467       }
468       sqlite3_result_text(context, z1, n, sqlite3_free);
469     }
470   }
471 }
472 
473 /*
474 ** Some functions like COALESCE() and IFNULL() and UNLIKELY() are implemented
475 ** as VDBE code so that unused argument values do not have to be computed.
476 ** However, we still need some kind of function implementation for this
477 ** routines in the function table.  The noopFunc macro provides this.
478 ** noopFunc will never be called so it doesn't matter what the implementation
479 ** is.  We might as well use the "version()" function as a substitute.
480 */
481 #define noopFunc versionFunc   /* Substitute function - never called */
482 
483 /*
484 ** Implementation of random().  Return a random integer.
485 */
486 static void randomFunc(
487   sqlite3_context *context,
488   int NotUsed,
489   sqlite3_value **NotUsed2
490 ){
491   sqlite_int64 r;
492   UNUSED_PARAMETER2(NotUsed, NotUsed2);
493   sqlite3_randomness(sizeof(r), &r);
494   if( r<0 ){
495     /* We need to prevent a random number of 0x8000000000000000
496     ** (or -9223372036854775808) since when you do abs() of that
497     ** number of you get the same value back again.  To do this
498     ** in a way that is testable, mask the sign bit off of negative
499     ** values, resulting in a positive value.  Then take the
500     ** 2s complement of that positive value.  The end result can
501     ** therefore be no less than -9223372036854775807.
502     */
503     r = -(r & LARGEST_INT64);
504   }
505   sqlite3_result_int64(context, r);
506 }
507 
508 /*
509 ** Implementation of randomblob(N).  Return a random blob
510 ** that is N bytes long.
511 */
512 static void randomBlob(
513   sqlite3_context *context,
514   int argc,
515   sqlite3_value **argv
516 ){
517   sqlite3_int64 n;
518   unsigned char *p;
519   assert( argc==1 );
520   UNUSED_PARAMETER(argc);
521   n = sqlite3_value_int64(argv[0]);
522   if( n<1 ){
523     n = 1;
524   }
525   p = contextMalloc(context, n);
526   if( p ){
527     sqlite3_randomness(n, p);
528     sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
529   }
530 }
531 
532 /*
533 ** Implementation of the last_insert_rowid() SQL function.  The return
534 ** value is the same as the sqlite3_last_insert_rowid() API function.
535 */
536 static void last_insert_rowid(
537   sqlite3_context *context,
538   int NotUsed,
539   sqlite3_value **NotUsed2
540 ){
541   sqlite3 *db = sqlite3_context_db_handle(context);
542   UNUSED_PARAMETER2(NotUsed, NotUsed2);
543   /* IMP: R-51513-12026 The last_insert_rowid() SQL function is a
544   ** wrapper around the sqlite3_last_insert_rowid() C/C++ interface
545   ** function. */
546   sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
547 }
548 
549 /*
550 ** Implementation of the changes() SQL function.
551 **
552 ** IMP: R-62073-11209 The changes() SQL function is a wrapper
553 ** around the sqlite3_changes() C/C++ function and hence follows the same
554 ** rules for counting changes.
555 */
556 static void changes(
557   sqlite3_context *context,
558   int NotUsed,
559   sqlite3_value **NotUsed2
560 ){
561   sqlite3 *db = sqlite3_context_db_handle(context);
562   UNUSED_PARAMETER2(NotUsed, NotUsed2);
563   sqlite3_result_int(context, sqlite3_changes(db));
564 }
565 
566 /*
567 ** Implementation of the total_changes() SQL function.  The return value is
568 ** the same as the sqlite3_total_changes() API function.
569 */
570 static void total_changes(
571   sqlite3_context *context,
572   int NotUsed,
573   sqlite3_value **NotUsed2
574 ){
575   sqlite3 *db = sqlite3_context_db_handle(context);
576   UNUSED_PARAMETER2(NotUsed, NotUsed2);
577   /* IMP: R-52756-41993 This function is a wrapper around the
578   ** sqlite3_total_changes() C/C++ interface. */
579   sqlite3_result_int(context, sqlite3_total_changes(db));
580 }
581 
582 /*
583 ** A structure defining how to do GLOB-style comparisons.
584 */
585 struct compareInfo {
586   u8 matchAll;          /* "*" or "%" */
587   u8 matchOne;          /* "?" or "_" */
588   u8 matchSet;          /* "[" or 0 */
589   u8 noCase;            /* true to ignore case differences */
590 };
591 
592 /*
593 ** For LIKE and GLOB matching on EBCDIC machines, assume that every
594 ** character is exactly one byte in size.  Also, provde the Utf8Read()
595 ** macro for fast reading of the next character in the common case where
596 ** the next character is ASCII.
597 */
598 #if defined(SQLITE_EBCDIC)
599 # define sqlite3Utf8Read(A)        (*((*A)++))
600 # define Utf8Read(A)               (*(A++))
601 #else
602 # define Utf8Read(A)               (A[0]<0x80?*(A++):sqlite3Utf8Read(&A))
603 #endif
604 
605 static const struct compareInfo globInfo = { '*', '?', '[', 0 };
606 /* The correct SQL-92 behavior is for the LIKE operator to ignore
607 ** case.  Thus  'a' LIKE 'A' would be true. */
608 static const struct compareInfo likeInfoNorm = { '%', '_',   0, 1 };
609 /* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
610 ** is case sensitive causing 'a' LIKE 'A' to be false */
611 static const struct compareInfo likeInfoAlt = { '%', '_',   0, 0 };
612 
613 /*
614 ** Possible error returns from patternMatch()
615 */
616 #define SQLITE_MATCH             0
617 #define SQLITE_NOMATCH           1
618 #define SQLITE_NOWILDCARDMATCH   2
619 
620 /*
621 ** Compare two UTF-8 strings for equality where the first string is
622 ** a GLOB or LIKE expression.  Return values:
623 **
624 **    SQLITE_MATCH:            Match
625 **    SQLITE_NOMATCH:          No match
626 **    SQLITE_NOWILDCARDMATCH:  No match in spite of having * or % wildcards.
627 **
628 ** Globbing rules:
629 **
630 **      '*'       Matches any sequence of zero or more characters.
631 **
632 **      '?'       Matches exactly one character.
633 **
634 **     [...]      Matches one character from the enclosed list of
635 **                characters.
636 **
637 **     [^...]     Matches one character not in the enclosed list.
638 **
639 ** With the [...] and [^...] matching, a ']' character can be included
640 ** in the list by making it the first character after '[' or '^'.  A
641 ** range of characters can be specified using '-'.  Example:
642 ** "[a-z]" matches any single lower-case letter.  To match a '-', make
643 ** it the last character in the list.
644 **
645 ** Like matching rules:
646 **
647 **      '%'       Matches any sequence of zero or more characters
648 **
649 ***     '_'       Matches any one character
650 **
651 **      Ec        Where E is the "esc" character and c is any other
652 **                character, including '%', '_', and esc, match exactly c.
653 **
654 ** The comments within this routine usually assume glob matching.
655 **
656 ** This routine is usually quick, but can be N**2 in the worst case.
657 */
658 static int patternCompare(
659   const u8 *zPattern,              /* The glob pattern */
660   const u8 *zString,               /* The string to compare against the glob */
661   const struct compareInfo *pInfo, /* Information about how to do the compare */
662   u32 matchOther                   /* The escape char (LIKE) or '[' (GLOB) */
663 ){
664   u32 c, c2;                       /* Next pattern and input string chars */
665   u32 matchOne = pInfo->matchOne;  /* "?" or "_" */
666   u32 matchAll = pInfo->matchAll;  /* "*" or "%" */
667   u8 noCase = pInfo->noCase;       /* True if uppercase==lowercase */
668   const u8 *zEscaped = 0;          /* One past the last escaped input char */
669 
670   while( (c = Utf8Read(zPattern))!=0 ){
671     if( c==matchAll ){  /* Match "*" */
672       /* Skip over multiple "*" characters in the pattern.  If there
673       ** are also "?" characters, skip those as well, but consume a
674       ** single character of the input string for each "?" skipped */
675       while( (c=Utf8Read(zPattern)) == matchAll || c == matchOne ){
676         if( c==matchOne && sqlite3Utf8Read(&zString)==0 ){
677           return SQLITE_NOWILDCARDMATCH;
678         }
679       }
680       if( c==0 ){
681         return SQLITE_MATCH;   /* "*" at the end of the pattern matches */
682       }else if( c==matchOther ){
683         if( pInfo->matchSet==0 ){
684           c = sqlite3Utf8Read(&zPattern);
685           if( c==0 ) return SQLITE_NOWILDCARDMATCH;
686         }else{
687           /* "[...]" immediately follows the "*".  We have to do a slow
688           ** recursive search in this case, but it is an unusual case. */
689           assert( matchOther<0x80 );  /* '[' is a single-byte character */
690           while( *zString ){
691             int bMatch = patternCompare(&zPattern[-1],zString,pInfo,matchOther);
692             if( bMatch!=SQLITE_NOMATCH ) return bMatch;
693             SQLITE_SKIP_UTF8(zString);
694           }
695           return SQLITE_NOWILDCARDMATCH;
696         }
697       }
698 
699       /* At this point variable c contains the first character of the
700       ** pattern string past the "*".  Search in the input string for the
701       ** first matching character and recursively continue the match from
702       ** that point.
703       **
704       ** For a case-insensitive search, set variable cx to be the same as
705       ** c but in the other case and search the input string for either
706       ** c or cx.
707       */
708       if( c<=0x80 ){
709         char zStop[3];
710         int bMatch;
711         if( noCase ){
712           zStop[0] = sqlite3Toupper(c);
713           zStop[1] = sqlite3Tolower(c);
714           zStop[2] = 0;
715         }else{
716           zStop[0] = c;
717           zStop[1] = 0;
718         }
719         while(1){
720           zString += strcspn((const char*)zString, zStop);
721           if( zString[0]==0 ) break;
722           zString++;
723           bMatch = patternCompare(zPattern,zString,pInfo,matchOther);
724           if( bMatch!=SQLITE_NOMATCH ) return bMatch;
725         }
726       }else{
727         int bMatch;
728         while( (c2 = Utf8Read(zString))!=0 ){
729           if( c2!=c ) continue;
730           bMatch = patternCompare(zPattern,zString,pInfo,matchOther);
731           if( bMatch!=SQLITE_NOMATCH ) return bMatch;
732         }
733       }
734       return SQLITE_NOWILDCARDMATCH;
735     }
736     if( c==matchOther ){
737       if( pInfo->matchSet==0 ){
738         c = sqlite3Utf8Read(&zPattern);
739         if( c==0 ) return SQLITE_NOMATCH;
740         zEscaped = zPattern;
741       }else{
742         u32 prior_c = 0;
743         int seen = 0;
744         int invert = 0;
745         c = sqlite3Utf8Read(&zString);
746         if( c==0 ) return SQLITE_NOMATCH;
747         c2 = sqlite3Utf8Read(&zPattern);
748         if( c2=='^' ){
749           invert = 1;
750           c2 = sqlite3Utf8Read(&zPattern);
751         }
752         if( c2==']' ){
753           if( c==']' ) seen = 1;
754           c2 = sqlite3Utf8Read(&zPattern);
755         }
756         while( c2 && c2!=']' ){
757           if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
758             c2 = sqlite3Utf8Read(&zPattern);
759             if( c>=prior_c && c<=c2 ) seen = 1;
760             prior_c = 0;
761           }else{
762             if( c==c2 ){
763               seen = 1;
764             }
765             prior_c = c2;
766           }
767           c2 = sqlite3Utf8Read(&zPattern);
768         }
769         if( c2==0 || (seen ^ invert)==0 ){
770           return SQLITE_NOMATCH;
771         }
772         continue;
773       }
774     }
775     c2 = Utf8Read(zString);
776     if( c==c2 ) continue;
777     if( noCase  && sqlite3Tolower(c)==sqlite3Tolower(c2) && c<0x80 && c2<0x80 ){
778       continue;
779     }
780     if( c==matchOne && zPattern!=zEscaped && c2!=0 ) continue;
781     return SQLITE_NOMATCH;
782   }
783   return *zString==0 ? SQLITE_MATCH : SQLITE_NOMATCH;
784 }
785 
786 /*
787 ** The sqlite3_strglob() interface.  Return 0 on a match (like strcmp()) and
788 ** non-zero if there is no match.
789 */
790 int sqlite3_strglob(const char *zGlobPattern, const char *zString){
791   return patternCompare((u8*)zGlobPattern, (u8*)zString, &globInfo, '[');
792 }
793 
794 /*
795 ** The sqlite3_strlike() interface.  Return 0 on a match and non-zero for
796 ** a miss - like strcmp().
797 */
798 int sqlite3_strlike(const char *zPattern, const char *zStr, unsigned int esc){
799   return patternCompare((u8*)zPattern, (u8*)zStr, &likeInfoNorm, esc);
800 }
801 
802 /*
803 ** Count the number of times that the LIKE operator (or GLOB which is
804 ** just a variation of LIKE) gets called.  This is used for testing
805 ** only.
806 */
807 #ifdef SQLITE_TEST
808 int sqlite3_like_count = 0;
809 #endif
810 
811 
812 /*
813 ** Implementation of the like() SQL function.  This function implements
814 ** the build-in LIKE operator.  The first argument to the function is the
815 ** pattern and the second argument is the string.  So, the SQL statements:
816 **
817 **       A LIKE B
818 **
819 ** is implemented as like(B,A).
820 **
821 ** This same function (with a different compareInfo structure) computes
822 ** the GLOB operator.
823 */
824 static void likeFunc(
825   sqlite3_context *context,
826   int argc,
827   sqlite3_value **argv
828 ){
829   const unsigned char *zA, *zB;
830   u32 escape;
831   int nPat;
832   sqlite3 *db = sqlite3_context_db_handle(context);
833   struct compareInfo *pInfo = sqlite3_user_data(context);
834 
835 #ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS
836   if( sqlite3_value_type(argv[0])==SQLITE_BLOB
837    || sqlite3_value_type(argv[1])==SQLITE_BLOB
838   ){
839 #ifdef SQLITE_TEST
840     sqlite3_like_count++;
841 #endif
842     sqlite3_result_int(context, 0);
843     return;
844   }
845 #endif
846   zB = sqlite3_value_text(argv[0]);
847   zA = sqlite3_value_text(argv[1]);
848 
849   /* Limit the length of the LIKE or GLOB pattern to avoid problems
850   ** of deep recursion and N*N behavior in patternCompare().
851   */
852   nPat = sqlite3_value_bytes(argv[0]);
853   testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );
854   testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );
855   if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
856     sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
857     return;
858   }
859   assert( zB==sqlite3_value_text(argv[0]) );  /* Encoding did not change */
860 
861   if( argc==3 ){
862     /* The escape character string must consist of a single UTF-8 character.
863     ** Otherwise, return an error.
864     */
865     const unsigned char *zEsc = sqlite3_value_text(argv[2]);
866     if( zEsc==0 ) return;
867     if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
868       sqlite3_result_error(context,
869           "ESCAPE expression must be a single character", -1);
870       return;
871     }
872     escape = sqlite3Utf8Read(&zEsc);
873   }else{
874     escape = pInfo->matchSet;
875   }
876   if( zA && zB ){
877 #ifdef SQLITE_TEST
878     sqlite3_like_count++;
879 #endif
880     sqlite3_result_int(context,
881                       patternCompare(zB, zA, pInfo, escape)==SQLITE_MATCH);
882   }
883 }
884 
885 /*
886 ** Implementation of the NULLIF(x,y) function.  The result is the first
887 ** argument if the arguments are different.  The result is NULL if the
888 ** arguments are equal to each other.
889 */
890 static void nullifFunc(
891   sqlite3_context *context,
892   int NotUsed,
893   sqlite3_value **argv
894 ){
895   CollSeq *pColl = sqlite3GetFuncCollSeq(context);
896   UNUSED_PARAMETER(NotUsed);
897   if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
898     sqlite3_result_value(context, argv[0]);
899   }
900 }
901 
902 /*
903 ** Implementation of the sqlite_version() function.  The result is the version
904 ** of the SQLite library that is running.
905 */
906 static void versionFunc(
907   sqlite3_context *context,
908   int NotUsed,
909   sqlite3_value **NotUsed2
910 ){
911   UNUSED_PARAMETER2(NotUsed, NotUsed2);
912   /* IMP: R-48699-48617 This function is an SQL wrapper around the
913   ** sqlite3_libversion() C-interface. */
914   sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC);
915 }
916 
917 /*
918 ** Implementation of the sqlite_source_id() function. The result is a string
919 ** that identifies the particular version of the source code used to build
920 ** SQLite.
921 */
922 static void sourceidFunc(
923   sqlite3_context *context,
924   int NotUsed,
925   sqlite3_value **NotUsed2
926 ){
927   UNUSED_PARAMETER2(NotUsed, NotUsed2);
928   /* IMP: R-24470-31136 This function is an SQL wrapper around the
929   ** sqlite3_sourceid() C interface. */
930   sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC);
931 }
932 
933 /*
934 ** Implementation of the sqlite_log() function.  This is a wrapper around
935 ** sqlite3_log().  The return value is NULL.  The function exists purely for
936 ** its side-effects.
937 */
938 static void errlogFunc(
939   sqlite3_context *context,
940   int argc,
941   sqlite3_value **argv
942 ){
943   UNUSED_PARAMETER(argc);
944   UNUSED_PARAMETER(context);
945   sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1]));
946 }
947 
948 /*
949 ** Implementation of the sqlite_compileoption_used() function.
950 ** The result is an integer that identifies if the compiler option
951 ** was used to build SQLite.
952 */
953 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
954 static void compileoptionusedFunc(
955   sqlite3_context *context,
956   int argc,
957   sqlite3_value **argv
958 ){
959   const char *zOptName;
960   assert( argc==1 );
961   UNUSED_PARAMETER(argc);
962   /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL
963   ** function is a wrapper around the sqlite3_compileoption_used() C/C++
964   ** function.
965   */
966   if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){
967     sqlite3_result_int(context, sqlite3_compileoption_used(zOptName));
968   }
969 }
970 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
971 
972 /*
973 ** Implementation of the sqlite_compileoption_get() function.
974 ** The result is a string that identifies the compiler options
975 ** used to build SQLite.
976 */
977 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
978 static void compileoptiongetFunc(
979   sqlite3_context *context,
980   int argc,
981   sqlite3_value **argv
982 ){
983   int n;
984   assert( argc==1 );
985   UNUSED_PARAMETER(argc);
986   /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function
987   ** is a wrapper around the sqlite3_compileoption_get() C/C++ function.
988   */
989   n = sqlite3_value_int(argv[0]);
990   sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC);
991 }
992 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
993 
994 /* Array for converting from half-bytes (nybbles) into ASCII hex
995 ** digits. */
996 static const char hexdigits[] = {
997   '0', '1', '2', '3', '4', '5', '6', '7',
998   '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
999 };
1000 
1001 /*
1002 ** Implementation of the QUOTE() function.  This function takes a single
1003 ** argument.  If the argument is numeric, the return value is the same as
1004 ** the argument.  If the argument is NULL, the return value is the string
1005 ** "NULL".  Otherwise, the argument is enclosed in single quotes with
1006 ** single-quote escapes.
1007 */
1008 static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
1009   assert( argc==1 );
1010   UNUSED_PARAMETER(argc);
1011   switch( sqlite3_value_type(argv[0]) ){
1012     case SQLITE_FLOAT: {
1013       double r1, r2;
1014       char zBuf[50];
1015       r1 = sqlite3_value_double(argv[0]);
1016       sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.15g", r1);
1017       sqlite3AtoF(zBuf, &r2, 20, SQLITE_UTF8);
1018       if( r1!=r2 ){
1019         sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.20e", r1);
1020       }
1021       sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
1022       break;
1023     }
1024     case SQLITE_INTEGER: {
1025       sqlite3_result_value(context, argv[0]);
1026       break;
1027     }
1028     case SQLITE_BLOB: {
1029       char *zText = 0;
1030       char const *zBlob = sqlite3_value_blob(argv[0]);
1031       int nBlob = sqlite3_value_bytes(argv[0]);
1032       assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
1033       zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4);
1034       if( zText ){
1035         int i;
1036         for(i=0; i<nBlob; i++){
1037           zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
1038           zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
1039         }
1040         zText[(nBlob*2)+2] = '\'';
1041         zText[(nBlob*2)+3] = '\0';
1042         zText[0] = 'X';
1043         zText[1] = '\'';
1044         sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
1045         sqlite3_free(zText);
1046       }
1047       break;
1048     }
1049     case SQLITE_TEXT: {
1050       int i,j;
1051       u64 n;
1052       const unsigned char *zArg = sqlite3_value_text(argv[0]);
1053       char *z;
1054 
1055       if( zArg==0 ) return;
1056       for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
1057       z = contextMalloc(context, ((i64)i)+((i64)n)+3);
1058       if( z ){
1059         z[0] = '\'';
1060         for(i=0, j=1; zArg[i]; i++){
1061           z[j++] = zArg[i];
1062           if( zArg[i]=='\'' ){
1063             z[j++] = '\'';
1064           }
1065         }
1066         z[j++] = '\'';
1067         z[j] = 0;
1068         sqlite3_result_text(context, z, j, sqlite3_free);
1069       }
1070       break;
1071     }
1072     default: {
1073       assert( sqlite3_value_type(argv[0])==SQLITE_NULL );
1074       sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
1075       break;
1076     }
1077   }
1078 }
1079 
1080 /*
1081 ** The unicode() function.  Return the integer unicode code-point value
1082 ** for the first character of the input string.
1083 */
1084 static void unicodeFunc(
1085   sqlite3_context *context,
1086   int argc,
1087   sqlite3_value **argv
1088 ){
1089   const unsigned char *z = sqlite3_value_text(argv[0]);
1090   (void)argc;
1091   if( z && z[0] ) sqlite3_result_int(context, sqlite3Utf8Read(&z));
1092 }
1093 
1094 /*
1095 ** The char() function takes zero or more arguments, each of which is
1096 ** an integer.  It constructs a string where each character of the string
1097 ** is the unicode character for the corresponding integer argument.
1098 */
1099 static void charFunc(
1100   sqlite3_context *context,
1101   int argc,
1102   sqlite3_value **argv
1103 ){
1104   unsigned char *z, *zOut;
1105   int i;
1106   zOut = z = sqlite3_malloc64( argc*4+1 );
1107   if( z==0 ){
1108     sqlite3_result_error_nomem(context);
1109     return;
1110   }
1111   for(i=0; i<argc; i++){
1112     sqlite3_int64 x;
1113     unsigned c;
1114     x = sqlite3_value_int64(argv[i]);
1115     if( x<0 || x>0x10ffff ) x = 0xfffd;
1116     c = (unsigned)(x & 0x1fffff);
1117     if( c<0x00080 ){
1118       *zOut++ = (u8)(c&0xFF);
1119     }else if( c<0x00800 ){
1120       *zOut++ = 0xC0 + (u8)((c>>6)&0x1F);
1121       *zOut++ = 0x80 + (u8)(c & 0x3F);
1122     }else if( c<0x10000 ){
1123       *zOut++ = 0xE0 + (u8)((c>>12)&0x0F);
1124       *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1125       *zOut++ = 0x80 + (u8)(c & 0x3F);
1126     }else{
1127       *zOut++ = 0xF0 + (u8)((c>>18) & 0x07);
1128       *zOut++ = 0x80 + (u8)((c>>12) & 0x3F);
1129       *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1130       *zOut++ = 0x80 + (u8)(c & 0x3F);
1131     }                                                    \
1132   }
1133   sqlite3_result_text64(context, (char*)z, zOut-z, sqlite3_free, SQLITE_UTF8);
1134 }
1135 
1136 /*
1137 ** The hex() function.  Interpret the argument as a blob.  Return
1138 ** a hexadecimal rendering as text.
1139 */
1140 static void hexFunc(
1141   sqlite3_context *context,
1142   int argc,
1143   sqlite3_value **argv
1144 ){
1145   int i, n;
1146   const unsigned char *pBlob;
1147   char *zHex, *z;
1148   assert( argc==1 );
1149   UNUSED_PARAMETER(argc);
1150   pBlob = sqlite3_value_blob(argv[0]);
1151   n = sqlite3_value_bytes(argv[0]);
1152   assert( pBlob==sqlite3_value_blob(argv[0]) );  /* No encoding change */
1153   z = zHex = contextMalloc(context, ((i64)n)*2 + 1);
1154   if( zHex ){
1155     for(i=0; i<n; i++, pBlob++){
1156       unsigned char c = *pBlob;
1157       *(z++) = hexdigits[(c>>4)&0xf];
1158       *(z++) = hexdigits[c&0xf];
1159     }
1160     *z = 0;
1161     sqlite3_result_text(context, zHex, n*2, sqlite3_free);
1162   }
1163 }
1164 
1165 /*
1166 ** The zeroblob(N) function returns a zero-filled blob of size N bytes.
1167 */
1168 static void zeroblobFunc(
1169   sqlite3_context *context,
1170   int argc,
1171   sqlite3_value **argv
1172 ){
1173   i64 n;
1174   int rc;
1175   assert( argc==1 );
1176   UNUSED_PARAMETER(argc);
1177   n = sqlite3_value_int64(argv[0]);
1178   if( n<0 ) n = 0;
1179   rc = sqlite3_result_zeroblob64(context, n); /* IMP: R-00293-64994 */
1180   if( rc ){
1181     sqlite3_result_error_code(context, rc);
1182   }
1183 }
1184 
1185 /*
1186 ** The replace() function.  Three arguments are all strings: call
1187 ** them A, B, and C. The result is also a string which is derived
1188 ** from A by replacing every occurrence of B with C.  The match
1189 ** must be exact.  Collating sequences are not used.
1190 */
1191 static void replaceFunc(
1192   sqlite3_context *context,
1193   int argc,
1194   sqlite3_value **argv
1195 ){
1196   const unsigned char *zStr;        /* The input string A */
1197   const unsigned char *zPattern;    /* The pattern string B */
1198   const unsigned char *zRep;        /* The replacement string C */
1199   unsigned char *zOut;              /* The output */
1200   int nStr;                /* Size of zStr */
1201   int nPattern;            /* Size of zPattern */
1202   int nRep;                /* Size of zRep */
1203   i64 nOut;                /* Maximum size of zOut */
1204   int loopLimit;           /* Last zStr[] that might match zPattern[] */
1205   int i, j;                /* Loop counters */
1206   unsigned cntExpand;      /* Number zOut expansions */
1207   sqlite3 *db = sqlite3_context_db_handle(context);
1208 
1209   assert( argc==3 );
1210   UNUSED_PARAMETER(argc);
1211   zStr = sqlite3_value_text(argv[0]);
1212   if( zStr==0 ) return;
1213   nStr = sqlite3_value_bytes(argv[0]);
1214   assert( zStr==sqlite3_value_text(argv[0]) );  /* No encoding change */
1215   zPattern = sqlite3_value_text(argv[1]);
1216   if( zPattern==0 ){
1217     assert( sqlite3_value_type(argv[1])==SQLITE_NULL
1218             || sqlite3_context_db_handle(context)->mallocFailed );
1219     return;
1220   }
1221   if( zPattern[0]==0 ){
1222     assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
1223     sqlite3_result_value(context, argv[0]);
1224     return;
1225   }
1226   nPattern = sqlite3_value_bytes(argv[1]);
1227   assert( zPattern==sqlite3_value_text(argv[1]) );  /* No encoding change */
1228   zRep = sqlite3_value_text(argv[2]);
1229   if( zRep==0 ) return;
1230   nRep = sqlite3_value_bytes(argv[2]);
1231   assert( zRep==sqlite3_value_text(argv[2]) );
1232   nOut = nStr + 1;
1233   assert( nOut<SQLITE_MAX_LENGTH );
1234   zOut = contextMalloc(context, (i64)nOut);
1235   if( zOut==0 ){
1236     return;
1237   }
1238   loopLimit = nStr - nPattern;
1239   cntExpand = 0;
1240   for(i=j=0; i<=loopLimit; i++){
1241     if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
1242       zOut[j++] = zStr[i];
1243     }else{
1244       if( nRep>nPattern ){
1245         nOut += nRep - nPattern;
1246         testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
1247         testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
1248         if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
1249           sqlite3_result_error_toobig(context);
1250           sqlite3_free(zOut);
1251           return;
1252         }
1253         cntExpand++;
1254         if( (cntExpand&(cntExpand-1))==0 ){
1255           /* Grow the size of the output buffer only on substitutions
1256           ** whose index is a power of two: 1, 2, 4, 8, 16, 32, ... */
1257           u8 *zOld;
1258           zOld = zOut;
1259           zOut = sqlite3_realloc64(zOut, (int)nOut + (nOut - nStr - 1));
1260           if( zOut==0 ){
1261             sqlite3_result_error_nomem(context);
1262             sqlite3_free(zOld);
1263             return;
1264           }
1265         }
1266       }
1267       memcpy(&zOut[j], zRep, nRep);
1268       j += nRep;
1269       i += nPattern-1;
1270     }
1271   }
1272   assert( j+nStr-i+1<=nOut );
1273   memcpy(&zOut[j], &zStr[i], nStr-i);
1274   j += nStr - i;
1275   assert( j<=nOut );
1276   zOut[j] = 0;
1277   sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
1278 }
1279 
1280 /*
1281 ** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
1282 ** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
1283 */
1284 static void trimFunc(
1285   sqlite3_context *context,
1286   int argc,
1287   sqlite3_value **argv
1288 ){
1289   const unsigned char *zIn;         /* Input string */
1290   const unsigned char *zCharSet;    /* Set of characters to trim */
1291   int nIn;                          /* Number of bytes in input */
1292   int flags;                        /* 1: trimleft  2: trimright  3: trim */
1293   int i;                            /* Loop counter */
1294   unsigned char *aLen = 0;          /* Length of each character in zCharSet */
1295   unsigned char **azChar = 0;       /* Individual characters in zCharSet */
1296   int nChar;                        /* Number of characters in zCharSet */
1297 
1298   if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1299     return;
1300   }
1301   zIn = sqlite3_value_text(argv[0]);
1302   if( zIn==0 ) return;
1303   nIn = sqlite3_value_bytes(argv[0]);
1304   assert( zIn==sqlite3_value_text(argv[0]) );
1305   if( argc==1 ){
1306     static const unsigned char lenOne[] = { 1 };
1307     static unsigned char * const azOne[] = { (u8*)" " };
1308     nChar = 1;
1309     aLen = (u8*)lenOne;
1310     azChar = (unsigned char **)azOne;
1311     zCharSet = 0;
1312   }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
1313     return;
1314   }else{
1315     const unsigned char *z;
1316     for(z=zCharSet, nChar=0; *z; nChar++){
1317       SQLITE_SKIP_UTF8(z);
1318     }
1319     if( nChar>0 ){
1320       azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));
1321       if( azChar==0 ){
1322         return;
1323       }
1324       aLen = (unsigned char*)&azChar[nChar];
1325       for(z=zCharSet, nChar=0; *z; nChar++){
1326         azChar[nChar] = (unsigned char *)z;
1327         SQLITE_SKIP_UTF8(z);
1328         aLen[nChar] = (u8)(z - azChar[nChar]);
1329       }
1330     }
1331   }
1332   if( nChar>0 ){
1333     flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
1334     if( flags & 1 ){
1335       while( nIn>0 ){
1336         int len = 0;
1337         for(i=0; i<nChar; i++){
1338           len = aLen[i];
1339           if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
1340         }
1341         if( i>=nChar ) break;
1342         zIn += len;
1343         nIn -= len;
1344       }
1345     }
1346     if( flags & 2 ){
1347       while( nIn>0 ){
1348         int len = 0;
1349         for(i=0; i<nChar; i++){
1350           len = aLen[i];
1351           if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
1352         }
1353         if( i>=nChar ) break;
1354         nIn -= len;
1355       }
1356     }
1357     if( zCharSet ){
1358       sqlite3_free(azChar);
1359     }
1360   }
1361   sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
1362 }
1363 
1364 
1365 #ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
1366 /*
1367 ** The "unknown" function is automatically substituted in place of
1368 ** any unrecognized function name when doing an EXPLAIN or EXPLAIN QUERY PLAN
1369 ** when the SQLITE_ENABLE_UNKNOWN_FUNCTION compile-time option is used.
1370 ** When the "sqlite3" command-line shell is built using this functionality,
1371 ** that allows an EXPLAIN or EXPLAIN QUERY PLAN for complex queries
1372 ** involving application-defined functions to be examined in a generic
1373 ** sqlite3 shell.
1374 */
1375 static void unknownFunc(
1376   sqlite3_context *context,
1377   int argc,
1378   sqlite3_value **argv
1379 ){
1380   /* no-op */
1381 }
1382 #endif /*SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION*/
1383 
1384 
1385 /* IMP: R-25361-16150 This function is omitted from SQLite by default. It
1386 ** is only available if the SQLITE_SOUNDEX compile-time option is used
1387 ** when SQLite is built.
1388 */
1389 #ifdef SQLITE_SOUNDEX
1390 /*
1391 ** Compute the soundex encoding of a word.
1392 **
1393 ** IMP: R-59782-00072 The soundex(X) function returns a string that is the
1394 ** soundex encoding of the string X.
1395 */
1396 static void soundexFunc(
1397   sqlite3_context *context,
1398   int argc,
1399   sqlite3_value **argv
1400 ){
1401   char zResult[8];
1402   const u8 *zIn;
1403   int i, j;
1404   static const unsigned char iCode[] = {
1405     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1406     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1407     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1408     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1409     0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1410     1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1411     0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1412     1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1413   };
1414   assert( argc==1 );
1415   zIn = (u8*)sqlite3_value_text(argv[0]);
1416   if( zIn==0 ) zIn = (u8*)"";
1417   for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
1418   if( zIn[i] ){
1419     u8 prevcode = iCode[zIn[i]&0x7f];
1420     zResult[0] = sqlite3Toupper(zIn[i]);
1421     for(j=1; j<4 && zIn[i]; i++){
1422       int code = iCode[zIn[i]&0x7f];
1423       if( code>0 ){
1424         if( code!=prevcode ){
1425           prevcode = code;
1426           zResult[j++] = code + '0';
1427         }
1428       }else{
1429         prevcode = 0;
1430       }
1431     }
1432     while( j<4 ){
1433       zResult[j++] = '0';
1434     }
1435     zResult[j] = 0;
1436     sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
1437   }else{
1438     /* IMP: R-64894-50321 The string "?000" is returned if the argument
1439     ** is NULL or contains no ASCII alphabetic characters. */
1440     sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
1441   }
1442 }
1443 #endif /* SQLITE_SOUNDEX */
1444 
1445 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1446 /*
1447 ** A function that loads a shared-library extension then returns NULL.
1448 */
1449 static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
1450   const char *zFile = (const char *)sqlite3_value_text(argv[0]);
1451   const char *zProc;
1452   sqlite3 *db = sqlite3_context_db_handle(context);
1453   char *zErrMsg = 0;
1454 
1455   /* Disallow the load_extension() SQL function unless the SQLITE_LoadExtFunc
1456   ** flag is set.  See the sqlite3_enable_load_extension() API.
1457   */
1458   if( (db->flags & SQLITE_LoadExtFunc)==0 ){
1459     sqlite3_result_error(context, "not authorized", -1);
1460     return;
1461   }
1462 
1463   if( argc==2 ){
1464     zProc = (const char *)sqlite3_value_text(argv[1]);
1465   }else{
1466     zProc = 0;
1467   }
1468   if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
1469     sqlite3_result_error(context, zErrMsg, -1);
1470     sqlite3_free(zErrMsg);
1471   }
1472 }
1473 #endif
1474 
1475 
1476 /*
1477 ** An instance of the following structure holds the context of a
1478 ** sum() or avg() aggregate computation.
1479 */
1480 typedef struct SumCtx SumCtx;
1481 struct SumCtx {
1482   double rSum;      /* Floating point sum */
1483   i64 iSum;         /* Integer sum */
1484   i64 cnt;          /* Number of elements summed */
1485   u8 overflow;      /* True if integer overflow seen */
1486   u8 approx;        /* True if non-integer value was input to the sum */
1487 };
1488 
1489 /*
1490 ** Routines used to compute the sum, average, and total.
1491 **
1492 ** The SUM() function follows the (broken) SQL standard which means
1493 ** that it returns NULL if it sums over no inputs.  TOTAL returns
1494 ** 0.0 in that case.  In addition, TOTAL always returns a float where
1495 ** SUM might return an integer if it never encounters a floating point
1496 ** value.  TOTAL never fails, but SUM might through an exception if
1497 ** it overflows an integer.
1498 */
1499 static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
1500   SumCtx *p;
1501   int type;
1502   assert( argc==1 );
1503   UNUSED_PARAMETER(argc);
1504   p = sqlite3_aggregate_context(context, sizeof(*p));
1505   type = sqlite3_value_numeric_type(argv[0]);
1506   if( p && type!=SQLITE_NULL ){
1507     p->cnt++;
1508     if( type==SQLITE_INTEGER ){
1509       i64 v = sqlite3_value_int64(argv[0]);
1510       p->rSum += v;
1511       if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){
1512         p->approx = p->overflow = 1;
1513       }
1514     }else{
1515       p->rSum += sqlite3_value_double(argv[0]);
1516       p->approx = 1;
1517     }
1518   }
1519 }
1520 #ifndef SQLITE_OMIT_WINDOWFUNC
1521 static void sumInverse(sqlite3_context *context, int argc, sqlite3_value**argv){
1522   SumCtx *p;
1523   int type;
1524   assert( argc==1 );
1525   UNUSED_PARAMETER(argc);
1526   p = sqlite3_aggregate_context(context, sizeof(*p));
1527   type = sqlite3_value_numeric_type(argv[0]);
1528   /* p is always non-NULL because sumStep() will have been called first
1529   ** to initialize it */
1530   if( ALWAYS(p) && type!=SQLITE_NULL ){
1531     assert( p->cnt>0 );
1532     p->cnt--;
1533     assert( type==SQLITE_INTEGER || p->approx );
1534     if( type==SQLITE_INTEGER && p->approx==0 ){
1535       i64 v = sqlite3_value_int64(argv[0]);
1536       p->rSum -= v;
1537       p->iSum -= v;
1538     }else{
1539       p->rSum -= sqlite3_value_double(argv[0]);
1540     }
1541   }
1542 }
1543 #else
1544 # define sumInverse 0
1545 #endif /* SQLITE_OMIT_WINDOWFUNC */
1546 static void sumFinalize(sqlite3_context *context){
1547   SumCtx *p;
1548   p = sqlite3_aggregate_context(context, 0);
1549   if( p && p->cnt>0 ){
1550     if( p->overflow ){
1551       sqlite3_result_error(context,"integer overflow",-1);
1552     }else if( p->approx ){
1553       sqlite3_result_double(context, p->rSum);
1554     }else{
1555       sqlite3_result_int64(context, p->iSum);
1556     }
1557   }
1558 }
1559 static void avgFinalize(sqlite3_context *context){
1560   SumCtx *p;
1561   p = sqlite3_aggregate_context(context, 0);
1562   if( p && p->cnt>0 ){
1563     sqlite3_result_double(context, p->rSum/(double)p->cnt);
1564   }
1565 }
1566 static void totalFinalize(sqlite3_context *context){
1567   SumCtx *p;
1568   p = sqlite3_aggregate_context(context, 0);
1569   /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
1570   sqlite3_result_double(context, p ? p->rSum : (double)0);
1571 }
1572 
1573 /*
1574 ** The following structure keeps track of state information for the
1575 ** count() aggregate function.
1576 */
1577 typedef struct CountCtx CountCtx;
1578 struct CountCtx {
1579   i64 n;
1580 #ifdef SQLITE_DEBUG
1581   int bInverse;                   /* True if xInverse() ever called */
1582 #endif
1583 };
1584 
1585 /*
1586 ** Routines to implement the count() aggregate function.
1587 */
1588 static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
1589   CountCtx *p;
1590   p = sqlite3_aggregate_context(context, sizeof(*p));
1591   if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
1592     p->n++;
1593   }
1594 
1595 #ifndef SQLITE_OMIT_DEPRECATED
1596   /* The sqlite3_aggregate_count() function is deprecated.  But just to make
1597   ** sure it still operates correctly, verify that its count agrees with our
1598   ** internal count when using count(*) and when the total count can be
1599   ** expressed as a 32-bit integer. */
1600   assert( argc==1 || p==0 || p->n>0x7fffffff || p->bInverse
1601           || p->n==sqlite3_aggregate_count(context) );
1602 #endif
1603 }
1604 static void countFinalize(sqlite3_context *context){
1605   CountCtx *p;
1606   p = sqlite3_aggregate_context(context, 0);
1607   sqlite3_result_int64(context, p ? p->n : 0);
1608 }
1609 #ifndef SQLITE_OMIT_WINDOWFUNC
1610 static void countInverse(sqlite3_context *ctx, int argc, sqlite3_value **argv){
1611   CountCtx *p;
1612   p = sqlite3_aggregate_context(ctx, sizeof(*p));
1613   /* p is always non-NULL since countStep() will have been called first */
1614   if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && ALWAYS(p) ){
1615     p->n--;
1616 #ifdef SQLITE_DEBUG
1617     p->bInverse = 1;
1618 #endif
1619   }
1620 }
1621 #else
1622 # define countInverse 0
1623 #endif /* SQLITE_OMIT_WINDOWFUNC */
1624 
1625 /*
1626 ** Routines to implement min() and max() aggregate functions.
1627 */
1628 static void minmaxStep(
1629   sqlite3_context *context,
1630   int NotUsed,
1631   sqlite3_value **argv
1632 ){
1633   Mem *pArg  = (Mem *)argv[0];
1634   Mem *pBest;
1635   UNUSED_PARAMETER(NotUsed);
1636 
1637   pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
1638   if( !pBest ) return;
1639 
1640   if( sqlite3_value_type(pArg)==SQLITE_NULL ){
1641     if( pBest->flags ) sqlite3SkipAccumulatorLoad(context);
1642   }else if( pBest->flags ){
1643     int max;
1644     int cmp;
1645     CollSeq *pColl = sqlite3GetFuncCollSeq(context);
1646     /* This step function is used for both the min() and max() aggregates,
1647     ** the only difference between the two being that the sense of the
1648     ** comparison is inverted. For the max() aggregate, the
1649     ** sqlite3_user_data() function returns (void *)-1. For min() it
1650     ** returns (void *)db, where db is the sqlite3* database pointer.
1651     ** Therefore the next statement sets variable 'max' to 1 for the max()
1652     ** aggregate, or 0 for min().
1653     */
1654     max = sqlite3_user_data(context)!=0;
1655     cmp = sqlite3MemCompare(pBest, pArg, pColl);
1656     if( (max && cmp<0) || (!max && cmp>0) ){
1657       sqlite3VdbeMemCopy(pBest, pArg);
1658     }else{
1659       sqlite3SkipAccumulatorLoad(context);
1660     }
1661   }else{
1662     pBest->db = sqlite3_context_db_handle(context);
1663     sqlite3VdbeMemCopy(pBest, pArg);
1664   }
1665 }
1666 static void minMaxValueFinalize(sqlite3_context *context, int bValue){
1667   sqlite3_value *pRes;
1668   pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1669   if( pRes ){
1670     if( pRes->flags ){
1671       sqlite3_result_value(context, pRes);
1672     }
1673     if( bValue==0 ) sqlite3VdbeMemRelease(pRes);
1674   }
1675 }
1676 #ifndef SQLITE_OMIT_WINDOWFUNC
1677 static void minMaxValue(sqlite3_context *context){
1678   minMaxValueFinalize(context, 1);
1679 }
1680 #else
1681 # define minMaxValue 0
1682 #endif /* SQLITE_OMIT_WINDOWFUNC */
1683 static void minMaxFinalize(sqlite3_context *context){
1684   minMaxValueFinalize(context, 0);
1685 }
1686 
1687 /*
1688 ** group_concat(EXPR, ?SEPARATOR?)
1689 */
1690 static void groupConcatStep(
1691   sqlite3_context *context,
1692   int argc,
1693   sqlite3_value **argv
1694 ){
1695   const char *zVal;
1696   StrAccum *pAccum;
1697   const char *zSep;
1698   int nVal, nSep;
1699   assert( argc==1 || argc==2 );
1700   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
1701   pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
1702 
1703   if( pAccum ){
1704     sqlite3 *db = sqlite3_context_db_handle(context);
1705     int firstTerm = pAccum->mxAlloc==0;
1706     pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
1707     if( !firstTerm ){
1708       if( argc==2 ){
1709         zSep = (char*)sqlite3_value_text(argv[1]);
1710         nSep = sqlite3_value_bytes(argv[1]);
1711       }else{
1712         zSep = ",";
1713         nSep = 1;
1714       }
1715       if( zSep ) sqlite3_str_append(pAccum, zSep, nSep);
1716     }
1717     zVal = (char*)sqlite3_value_text(argv[0]);
1718     nVal = sqlite3_value_bytes(argv[0]);
1719     if( zVal ) sqlite3_str_append(pAccum, zVal, nVal);
1720   }
1721 }
1722 #ifndef SQLITE_OMIT_WINDOWFUNC
1723 static void groupConcatInverse(
1724   sqlite3_context *context,
1725   int argc,
1726   sqlite3_value **argv
1727 ){
1728   int n;
1729   StrAccum *pAccum;
1730   assert( argc==1 || argc==2 );
1731   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
1732   pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
1733   /* pAccum is always non-NULL since groupConcatStep() will have always
1734   ** run frist to initialize it */
1735   if( ALWAYS(pAccum) ){
1736     n = sqlite3_value_bytes(argv[0]);
1737     if( argc==2 ){
1738       n += sqlite3_value_bytes(argv[1]);
1739     }else{
1740       n++;
1741     }
1742     if( n>=(int)pAccum->nChar ){
1743       pAccum->nChar = 0;
1744     }else{
1745       pAccum->nChar -= n;
1746       memmove(pAccum->zText, &pAccum->zText[n], pAccum->nChar);
1747     }
1748     if( pAccum->nChar==0 ) pAccum->mxAlloc = 0;
1749   }
1750 }
1751 #else
1752 # define groupConcatInverse 0
1753 #endif /* SQLITE_OMIT_WINDOWFUNC */
1754 static void groupConcatFinalize(sqlite3_context *context){
1755   StrAccum *pAccum;
1756   pAccum = sqlite3_aggregate_context(context, 0);
1757   if( pAccum ){
1758     if( pAccum->accError==SQLITE_TOOBIG ){
1759       sqlite3_result_error_toobig(context);
1760     }else if( pAccum->accError==SQLITE_NOMEM ){
1761       sqlite3_result_error_nomem(context);
1762     }else{
1763       sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1,
1764                           sqlite3_free);
1765     }
1766   }
1767 }
1768 #ifndef SQLITE_OMIT_WINDOWFUNC
1769 static void groupConcatValue(sqlite3_context *context){
1770   sqlite3_str *pAccum;
1771   pAccum = (sqlite3_str*)sqlite3_aggregate_context(context, 0);
1772   if( pAccum ){
1773     if( pAccum->accError==SQLITE_TOOBIG ){
1774       sqlite3_result_error_toobig(context);
1775     }else if( pAccum->accError==SQLITE_NOMEM ){
1776       sqlite3_result_error_nomem(context);
1777     }else{
1778       const char *zText = sqlite3_str_value(pAccum);
1779       sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
1780     }
1781   }
1782 }
1783 #else
1784 # define groupConcatValue 0
1785 #endif /* SQLITE_OMIT_WINDOWFUNC */
1786 
1787 /*
1788 ** This routine does per-connection function registration.  Most
1789 ** of the built-in functions above are part of the global function set.
1790 ** This routine only deals with those that are not global.
1791 */
1792 void sqlite3RegisterPerConnectionBuiltinFunctions(sqlite3 *db){
1793   int rc = sqlite3_overload_function(db, "MATCH", 2);
1794   assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1795   if( rc==SQLITE_NOMEM ){
1796     sqlite3OomFault(db);
1797   }
1798 }
1799 
1800 /*
1801 ** Set the LIKEOPT flag on the 2-argument function with the given name.
1802 */
1803 static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
1804   FuncDef *pDef;
1805   pDef = sqlite3FindFunction(db, zName, 2, SQLITE_UTF8, 0);
1806   if( ALWAYS(pDef) ){
1807     pDef->funcFlags |= flagVal;
1808   }
1809   pDef = sqlite3FindFunction(db, zName, 3, SQLITE_UTF8, 0);
1810   if( pDef ){
1811     pDef->funcFlags |= flagVal;
1812   }
1813 }
1814 
1815 /*
1816 ** Register the built-in LIKE and GLOB functions.  The caseSensitive
1817 ** parameter determines whether or not the LIKE operator is case
1818 ** sensitive.  GLOB is always case sensitive.
1819 */
1820 void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1821   struct compareInfo *pInfo;
1822   if( caseSensitive ){
1823     pInfo = (struct compareInfo*)&likeInfoAlt;
1824   }else{
1825     pInfo = (struct compareInfo*)&likeInfoNorm;
1826   }
1827   sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0);
1828   sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0);
1829   sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8,
1830       (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0, 0, 0);
1831   setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
1832   setLikeOptFlag(db, "like",
1833       caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
1834 }
1835 
1836 /*
1837 ** pExpr points to an expression which implements a function.  If
1838 ** it is appropriate to apply the LIKE optimization to that function
1839 ** then set aWc[0] through aWc[2] to the wildcard characters and the
1840 ** escape character and then return TRUE.  If the function is not a
1841 ** LIKE-style function then return FALSE.
1842 **
1843 ** The expression "a LIKE b ESCAPE c" is only considered a valid LIKE
1844 ** operator if c is a string literal that is exactly one byte in length.
1845 ** That one byte is stored in aWc[3].  aWc[3] is set to zero if there is
1846 ** no ESCAPE clause.
1847 **
1848 ** *pIsNocase is set to true if uppercase and lowercase are equivalent for
1849 ** the function (default for LIKE).  If the function makes the distinction
1850 ** between uppercase and lowercase (as does GLOB) then *pIsNocase is set to
1851 ** false.
1852 */
1853 int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
1854   FuncDef *pDef;
1855   int nExpr;
1856   if( pExpr->op!=TK_FUNCTION || !pExpr->x.pList ){
1857     return 0;
1858   }
1859   assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
1860   nExpr = pExpr->x.pList->nExpr;
1861   pDef = sqlite3FindFunction(db, pExpr->u.zToken, nExpr, SQLITE_UTF8, 0);
1862   if( NEVER(pDef==0) || (pDef->funcFlags & SQLITE_FUNC_LIKE)==0 ){
1863     return 0;
1864   }
1865   if( nExpr<3 ){
1866     aWc[3] = 0;
1867   }else{
1868     Expr *pEscape = pExpr->x.pList->a[2].pExpr;
1869     char *zEscape;
1870     if( pEscape->op!=TK_STRING ) return 0;
1871     zEscape = pEscape->u.zToken;
1872     if( zEscape[0]==0 || zEscape[1]!=0 ) return 0;
1873     aWc[3] = zEscape[0];
1874   }
1875 
1876   /* The memcpy() statement assumes that the wildcard characters are
1877   ** the first three statements in the compareInfo structure.  The
1878   ** asserts() that follow verify that assumption
1879   */
1880   memcpy(aWc, pDef->pUserData, 3);
1881   assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1882   assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1883   assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
1884   *pIsNocase = (pDef->funcFlags & SQLITE_FUNC_CASE)==0;
1885   return 1;
1886 }
1887 
1888 /*
1889 ** All of the FuncDef structures in the aBuiltinFunc[] array above
1890 ** to the global function hash table.  This occurs at start-time (as
1891 ** a consequence of calling sqlite3_initialize()).
1892 **
1893 ** After this routine runs
1894 */
1895 void sqlite3RegisterBuiltinFunctions(void){
1896   /*
1897   ** The following array holds FuncDef structures for all of the functions
1898   ** defined in this file.
1899   **
1900   ** The array cannot be constant since changes are made to the
1901   ** FuncDef.pHash elements at start-time.  The elements of this array
1902   ** are read-only after initialization is complete.
1903   **
1904   ** For peak efficiency, put the most frequently used function last.
1905   */
1906   static FuncDef aBuiltinFunc[] = {
1907 #ifdef SQLITE_SOUNDEX
1908     FUNCTION(soundex,            1, 0, 0, soundexFunc      ),
1909 #endif
1910 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1911     VFUNCTION(load_extension,    1, 0, 0, loadExt          ),
1912     VFUNCTION(load_extension,    2, 0, 0, loadExt          ),
1913 #endif
1914 #if SQLITE_USER_AUTHENTICATION
1915     FUNCTION(sqlite_crypt,       2, 0, 0, sqlite3CryptFunc ),
1916 #endif
1917 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
1918     DFUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc  ),
1919     DFUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc  ),
1920 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
1921     FUNCTION2(unlikely,          1, 0, 0, noopFunc,  SQLITE_FUNC_UNLIKELY),
1922     FUNCTION2(likelihood,        2, 0, 0, noopFunc,  SQLITE_FUNC_UNLIKELY),
1923     FUNCTION2(likely,            1, 0, 0, noopFunc,  SQLITE_FUNC_UNLIKELY),
1924 #ifdef SQLITE_DEBUG
1925     FUNCTION2(affinity,          1, 0, 0, noopFunc,  SQLITE_FUNC_AFFINITY),
1926 #endif
1927 #ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC
1928     FUNCTION2(sqlite_offset,     1, 0, 0, noopFunc,  SQLITE_FUNC_OFFSET|
1929                                                      SQLITE_FUNC_TYPEOF),
1930 #endif
1931     FUNCTION(ltrim,              1, 1, 0, trimFunc         ),
1932     FUNCTION(ltrim,              2, 1, 0, trimFunc         ),
1933     FUNCTION(rtrim,              1, 2, 0, trimFunc         ),
1934     FUNCTION(rtrim,              2, 2, 0, trimFunc         ),
1935     FUNCTION(trim,               1, 3, 0, trimFunc         ),
1936     FUNCTION(trim,               2, 3, 0, trimFunc         ),
1937     FUNCTION(min,               -1, 0, 1, minmaxFunc       ),
1938     FUNCTION(min,                0, 0, 1, 0                ),
1939     WAGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize, minMaxValue, 0,
1940                                           SQLITE_FUNC_MINMAX ),
1941     FUNCTION(max,               -1, 1, 1, minmaxFunc       ),
1942     FUNCTION(max,                0, 1, 1, 0                ),
1943     WAGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize, minMaxValue, 0,
1944                                           SQLITE_FUNC_MINMAX ),
1945     FUNCTION2(typeof,            1, 0, 0, typeofFunc,  SQLITE_FUNC_TYPEOF),
1946     FUNCTION2(length,            1, 0, 0, lengthFunc,  SQLITE_FUNC_LENGTH),
1947     FUNCTION(instr,              2, 0, 0, instrFunc        ),
1948     FUNCTION(printf,            -1, 0, 0, printfFunc       ),
1949     FUNCTION(unicode,            1, 0, 0, unicodeFunc      ),
1950     FUNCTION(char,              -1, 0, 0, charFunc         ),
1951     FUNCTION(abs,                1, 0, 0, absFunc          ),
1952 #ifndef SQLITE_OMIT_FLOATING_POINT
1953     FUNCTION(round,              1, 0, 0, roundFunc        ),
1954     FUNCTION(round,              2, 0, 0, roundFunc        ),
1955 #endif
1956     FUNCTION(upper,              1, 0, 0, upperFunc        ),
1957     FUNCTION(lower,              1, 0, 0, lowerFunc        ),
1958     FUNCTION(hex,                1, 0, 0, hexFunc          ),
1959     FUNCTION2(ifnull,            2, 0, 0, noopFunc,  SQLITE_FUNC_COALESCE),
1960     VFUNCTION(random,            0, 0, 0, randomFunc       ),
1961     VFUNCTION(randomblob,        1, 0, 0, randomBlob       ),
1962     FUNCTION(nullif,             2, 0, 1, nullifFunc       ),
1963     DFUNCTION(sqlite_version,    0, 0, 0, versionFunc      ),
1964     DFUNCTION(sqlite_source_id,  0, 0, 0, sourceidFunc     ),
1965     FUNCTION(sqlite_log,         2, 0, 0, errlogFunc       ),
1966     FUNCTION(quote,              1, 0, 0, quoteFunc        ),
1967     VFUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid),
1968     VFUNCTION(changes,           0, 0, 0, changes          ),
1969     VFUNCTION(total_changes,     0, 0, 0, total_changes    ),
1970     FUNCTION(replace,            3, 0, 0, replaceFunc      ),
1971     FUNCTION(zeroblob,           1, 0, 0, zeroblobFunc     ),
1972     FUNCTION(substr,             2, 0, 0, substrFunc       ),
1973     FUNCTION(substr,             3, 0, 0, substrFunc       ),
1974     WAGGREGATE(sum,   1,0,0, sumStep, sumFinalize, sumFinalize, sumInverse, 0),
1975     WAGGREGATE(total, 1,0,0, sumStep,totalFinalize,totalFinalize,sumInverse, 0),
1976     WAGGREGATE(avg,   1,0,0, sumStep, avgFinalize, avgFinalize, sumInverse, 0),
1977     WAGGREGATE(count, 0,0,0, countStep,
1978         countFinalize, countFinalize, countInverse, SQLITE_FUNC_COUNT  ),
1979     WAGGREGATE(count, 1,0,0, countStep,
1980         countFinalize, countFinalize, countInverse, 0  ),
1981     WAGGREGATE(group_concat, 1, 0, 0, groupConcatStep,
1982         groupConcatFinalize, groupConcatValue, groupConcatInverse, 0),
1983     WAGGREGATE(group_concat, 2, 0, 0, groupConcatStep,
1984         groupConcatFinalize, groupConcatValue, groupConcatInverse, 0),
1985 
1986     LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1987 #ifdef SQLITE_CASE_SENSITIVE_LIKE
1988     LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1989     LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1990 #else
1991     LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
1992     LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
1993 #endif
1994 #ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
1995     FUNCTION(unknown,           -1, 0, 0, unknownFunc      ),
1996 #endif
1997     FUNCTION(coalesce,           1, 0, 0, 0                ),
1998     FUNCTION(coalesce,           0, 0, 0, 0                ),
1999     FUNCTION2(coalesce,         -1, 0, 0, noopFunc,  SQLITE_FUNC_COALESCE),
2000   };
2001 #ifndef SQLITE_OMIT_ALTERTABLE
2002   sqlite3AlterFunctions();
2003 #endif
2004   sqlite3WindowFunctions();
2005 #if defined(SQLITE_ENABLE_STAT3) || defined(SQLITE_ENABLE_STAT4)
2006   sqlite3AnalyzeFunctions();
2007 #endif
2008   sqlite3RegisterDateTimeFunctions();
2009   sqlite3InsertBuiltinFuncs(aBuiltinFunc, ArraySize(aBuiltinFunc));
2010 
2011 #if 0  /* Enable to print out how the built-in functions are hashed */
2012   {
2013     int i;
2014     FuncDef *p;
2015     for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){
2016       printf("FUNC-HASH %02d:", i);
2017       for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash){
2018         int n = sqlite3Strlen30(p->zName);
2019         int h = p->zName[0] + n;
2020         printf(" %s(%d)", p->zName, h);
2021       }
2022       printf("\n");
2023     }
2024   }
2025 #endif
2026 }
2027