xref: /sqlite-3.40.0/src/func.c (revision ad5536fc)
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 
847   /* Limit the length of the LIKE or GLOB pattern to avoid problems
848   ** of deep recursion and N*N behavior in patternCompare().
849   */
850   nPat = sqlite3_value_bytes(argv[0]);
851   testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );
852   testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );
853   if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
854     sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
855     return;
856   }
857   if( argc==3 ){
858     /* The escape character string must consist of a single UTF-8 character.
859     ** Otherwise, return an error.
860     */
861     const unsigned char *zEsc = sqlite3_value_text(argv[2]);
862     if( zEsc==0 ) return;
863     if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
864       sqlite3_result_error(context,
865           "ESCAPE expression must be a single character", -1);
866       return;
867     }
868     escape = sqlite3Utf8Read(&zEsc);
869   }else{
870     escape = pInfo->matchSet;
871   }
872   zB = sqlite3_value_text(argv[0]);
873   zA = sqlite3_value_text(argv[1]);
874   if( zA && zB ){
875 #ifdef SQLITE_TEST
876     sqlite3_like_count++;
877 #endif
878     sqlite3_result_int(context,
879                       patternCompare(zB, zA, pInfo, escape)==SQLITE_MATCH);
880   }
881 }
882 
883 /*
884 ** Implementation of the NULLIF(x,y) function.  The result is the first
885 ** argument if the arguments are different.  The result is NULL if the
886 ** arguments are equal to each other.
887 */
888 static void nullifFunc(
889   sqlite3_context *context,
890   int NotUsed,
891   sqlite3_value **argv
892 ){
893   CollSeq *pColl = sqlite3GetFuncCollSeq(context);
894   UNUSED_PARAMETER(NotUsed);
895   if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
896     sqlite3_result_value(context, argv[0]);
897   }
898 }
899 
900 /*
901 ** Implementation of the sqlite_version() function.  The result is the version
902 ** of the SQLite library that is running.
903 */
904 static void versionFunc(
905   sqlite3_context *context,
906   int NotUsed,
907   sqlite3_value **NotUsed2
908 ){
909   UNUSED_PARAMETER2(NotUsed, NotUsed2);
910   /* IMP: R-48699-48617 This function is an SQL wrapper around the
911   ** sqlite3_libversion() C-interface. */
912   sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC);
913 }
914 
915 /*
916 ** Implementation of the sqlite_source_id() function. The result is a string
917 ** that identifies the particular version of the source code used to build
918 ** SQLite.
919 */
920 static void sourceidFunc(
921   sqlite3_context *context,
922   int NotUsed,
923   sqlite3_value **NotUsed2
924 ){
925   UNUSED_PARAMETER2(NotUsed, NotUsed2);
926   /* IMP: R-24470-31136 This function is an SQL wrapper around the
927   ** sqlite3_sourceid() C interface. */
928   sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC);
929 }
930 
931 /*
932 ** Implementation of the sqlite_log() function.  This is a wrapper around
933 ** sqlite3_log().  The return value is NULL.  The function exists purely for
934 ** its side-effects.
935 */
936 static void errlogFunc(
937   sqlite3_context *context,
938   int argc,
939   sqlite3_value **argv
940 ){
941   UNUSED_PARAMETER(argc);
942   UNUSED_PARAMETER(context);
943   sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1]));
944 }
945 
946 /*
947 ** Implementation of the sqlite_compileoption_used() function.
948 ** The result is an integer that identifies if the compiler option
949 ** was used to build SQLite.
950 */
951 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
952 static void compileoptionusedFunc(
953   sqlite3_context *context,
954   int argc,
955   sqlite3_value **argv
956 ){
957   const char *zOptName;
958   assert( argc==1 );
959   UNUSED_PARAMETER(argc);
960   /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL
961   ** function is a wrapper around the sqlite3_compileoption_used() C/C++
962   ** function.
963   */
964   if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){
965     sqlite3_result_int(context, sqlite3_compileoption_used(zOptName));
966   }
967 }
968 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
969 
970 /*
971 ** Implementation of the sqlite_compileoption_get() function.
972 ** The result is a string that identifies the compiler options
973 ** used to build SQLite.
974 */
975 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
976 static void compileoptiongetFunc(
977   sqlite3_context *context,
978   int argc,
979   sqlite3_value **argv
980 ){
981   int n;
982   assert( argc==1 );
983   UNUSED_PARAMETER(argc);
984   /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function
985   ** is a wrapper around the sqlite3_compileoption_get() C/C++ function.
986   */
987   n = sqlite3_value_int(argv[0]);
988   sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC);
989 }
990 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
991 
992 /* Array for converting from half-bytes (nybbles) into ASCII hex
993 ** digits. */
994 static const char hexdigits[] = {
995   '0', '1', '2', '3', '4', '5', '6', '7',
996   '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
997 };
998 
999 /*
1000 ** Implementation of the QUOTE() function.  This function takes a single
1001 ** argument.  If the argument is numeric, the return value is the same as
1002 ** the argument.  If the argument is NULL, the return value is the string
1003 ** "NULL".  Otherwise, the argument is enclosed in single quotes with
1004 ** single-quote escapes.
1005 */
1006 static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
1007   assert( argc==1 );
1008   UNUSED_PARAMETER(argc);
1009   switch( sqlite3_value_type(argv[0]) ){
1010     case SQLITE_FLOAT: {
1011       double r1, r2;
1012       char zBuf[50];
1013       r1 = sqlite3_value_double(argv[0]);
1014       sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.15g", r1);
1015       sqlite3AtoF(zBuf, &r2, 20, SQLITE_UTF8);
1016       if( r1!=r2 ){
1017         sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.20e", r1);
1018       }
1019       sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
1020       break;
1021     }
1022     case SQLITE_INTEGER: {
1023       sqlite3_result_value(context, argv[0]);
1024       break;
1025     }
1026     case SQLITE_BLOB: {
1027       char *zText = 0;
1028       char const *zBlob = sqlite3_value_blob(argv[0]);
1029       int nBlob = sqlite3_value_bytes(argv[0]);
1030       assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
1031       zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4);
1032       if( zText ){
1033         int i;
1034         for(i=0; i<nBlob; i++){
1035           zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
1036           zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
1037         }
1038         zText[(nBlob*2)+2] = '\'';
1039         zText[(nBlob*2)+3] = '\0';
1040         zText[0] = 'X';
1041         zText[1] = '\'';
1042         sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
1043         sqlite3_free(zText);
1044       }
1045       break;
1046     }
1047     case SQLITE_TEXT: {
1048       int i,j;
1049       u64 n;
1050       const unsigned char *zArg = sqlite3_value_text(argv[0]);
1051       char *z;
1052 
1053       if( zArg==0 ) return;
1054       for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
1055       z = contextMalloc(context, ((i64)i)+((i64)n)+3);
1056       if( z ){
1057         z[0] = '\'';
1058         for(i=0, j=1; zArg[i]; i++){
1059           z[j++] = zArg[i];
1060           if( zArg[i]=='\'' ){
1061             z[j++] = '\'';
1062           }
1063         }
1064         z[j++] = '\'';
1065         z[j] = 0;
1066         sqlite3_result_text(context, z, j, sqlite3_free);
1067       }
1068       break;
1069     }
1070     default: {
1071       assert( sqlite3_value_type(argv[0])==SQLITE_NULL );
1072       sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
1073       break;
1074     }
1075   }
1076 }
1077 
1078 /*
1079 ** The unicode() function.  Return the integer unicode code-point value
1080 ** for the first character of the input string.
1081 */
1082 static void unicodeFunc(
1083   sqlite3_context *context,
1084   int argc,
1085   sqlite3_value **argv
1086 ){
1087   const unsigned char *z = sqlite3_value_text(argv[0]);
1088   (void)argc;
1089   if( z && z[0] ) sqlite3_result_int(context, sqlite3Utf8Read(&z));
1090 }
1091 
1092 /*
1093 ** The char() function takes zero or more arguments, each of which is
1094 ** an integer.  It constructs a string where each character of the string
1095 ** is the unicode character for the corresponding integer argument.
1096 */
1097 static void charFunc(
1098   sqlite3_context *context,
1099   int argc,
1100   sqlite3_value **argv
1101 ){
1102   unsigned char *z, *zOut;
1103   int i;
1104   zOut = z = sqlite3_malloc64( argc*4+1 );
1105   if( z==0 ){
1106     sqlite3_result_error_nomem(context);
1107     return;
1108   }
1109   for(i=0; i<argc; i++){
1110     sqlite3_int64 x;
1111     unsigned c;
1112     x = sqlite3_value_int64(argv[i]);
1113     if( x<0 || x>0x10ffff ) x = 0xfffd;
1114     c = (unsigned)(x & 0x1fffff);
1115     if( c<0x00080 ){
1116       *zOut++ = (u8)(c&0xFF);
1117     }else if( c<0x00800 ){
1118       *zOut++ = 0xC0 + (u8)((c>>6)&0x1F);
1119       *zOut++ = 0x80 + (u8)(c & 0x3F);
1120     }else if( c<0x10000 ){
1121       *zOut++ = 0xE0 + (u8)((c>>12)&0x0F);
1122       *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1123       *zOut++ = 0x80 + (u8)(c & 0x3F);
1124     }else{
1125       *zOut++ = 0xF0 + (u8)((c>>18) & 0x07);
1126       *zOut++ = 0x80 + (u8)((c>>12) & 0x3F);
1127       *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1128       *zOut++ = 0x80 + (u8)(c & 0x3F);
1129     }                                                    \
1130   }
1131   sqlite3_result_text64(context, (char*)z, zOut-z, sqlite3_free, SQLITE_UTF8);
1132 }
1133 
1134 /*
1135 ** The hex() function.  Interpret the argument as a blob.  Return
1136 ** a hexadecimal rendering as text.
1137 */
1138 static void hexFunc(
1139   sqlite3_context *context,
1140   int argc,
1141   sqlite3_value **argv
1142 ){
1143   int i, n;
1144   const unsigned char *pBlob;
1145   char *zHex, *z;
1146   assert( argc==1 );
1147   UNUSED_PARAMETER(argc);
1148   pBlob = sqlite3_value_blob(argv[0]);
1149   n = sqlite3_value_bytes(argv[0]);
1150   assert( pBlob==sqlite3_value_blob(argv[0]) );  /* No encoding change */
1151   z = zHex = contextMalloc(context, ((i64)n)*2 + 1);
1152   if( zHex ){
1153     for(i=0; i<n; i++, pBlob++){
1154       unsigned char c = *pBlob;
1155       *(z++) = hexdigits[(c>>4)&0xf];
1156       *(z++) = hexdigits[c&0xf];
1157     }
1158     *z = 0;
1159     sqlite3_result_text(context, zHex, n*2, sqlite3_free);
1160   }
1161 }
1162 
1163 /*
1164 ** The zeroblob(N) function returns a zero-filled blob of size N bytes.
1165 */
1166 static void zeroblobFunc(
1167   sqlite3_context *context,
1168   int argc,
1169   sqlite3_value **argv
1170 ){
1171   i64 n;
1172   int rc;
1173   assert( argc==1 );
1174   UNUSED_PARAMETER(argc);
1175   n = sqlite3_value_int64(argv[0]);
1176   if( n<0 ) n = 0;
1177   rc = sqlite3_result_zeroblob64(context, n); /* IMP: R-00293-64994 */
1178   if( rc ){
1179     sqlite3_result_error_code(context, rc);
1180   }
1181 }
1182 
1183 /*
1184 ** The replace() function.  Three arguments are all strings: call
1185 ** them A, B, and C. The result is also a string which is derived
1186 ** from A by replacing every occurrence of B with C.  The match
1187 ** must be exact.  Collating sequences are not used.
1188 */
1189 static void replaceFunc(
1190   sqlite3_context *context,
1191   int argc,
1192   sqlite3_value **argv
1193 ){
1194   const unsigned char *zStr;        /* The input string A */
1195   const unsigned char *zPattern;    /* The pattern string B */
1196   const unsigned char *zRep;        /* The replacement string C */
1197   unsigned char *zOut;              /* The output */
1198   int nStr;                /* Size of zStr */
1199   int nPattern;            /* Size of zPattern */
1200   int nRep;                /* Size of zRep */
1201   i64 nOut;                /* Maximum size of zOut */
1202   int loopLimit;           /* Last zStr[] that might match zPattern[] */
1203   int i, j;                /* Loop counters */
1204   unsigned cntExpand;      /* Number zOut expansions */
1205   sqlite3 *db = sqlite3_context_db_handle(context);
1206 
1207   assert( argc==3 );
1208   UNUSED_PARAMETER(argc);
1209   zStr = sqlite3_value_text(argv[0]);
1210   if( zStr==0 ) return;
1211   nStr = sqlite3_value_bytes(argv[0]);
1212   assert( zStr==sqlite3_value_text(argv[0]) );  /* No encoding change */
1213   zPattern = sqlite3_value_text(argv[1]);
1214   if( zPattern==0 ){
1215     assert( sqlite3_value_type(argv[1])==SQLITE_NULL
1216             || sqlite3_context_db_handle(context)->mallocFailed );
1217     return;
1218   }
1219   if( zPattern[0]==0 ){
1220     assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
1221     sqlite3_result_value(context, argv[0]);
1222     return;
1223   }
1224   nPattern = sqlite3_value_bytes(argv[1]);
1225   assert( zPattern==sqlite3_value_text(argv[1]) );  /* No encoding change */
1226   zRep = sqlite3_value_text(argv[2]);
1227   if( zRep==0 ) return;
1228   nRep = sqlite3_value_bytes(argv[2]);
1229   assert( zRep==sqlite3_value_text(argv[2]) );
1230   nOut = nStr + 1;
1231   assert( nOut<SQLITE_MAX_LENGTH );
1232   zOut = contextMalloc(context, (i64)nOut);
1233   if( zOut==0 ){
1234     return;
1235   }
1236   loopLimit = nStr - nPattern;
1237   cntExpand = 0;
1238   for(i=j=0; i<=loopLimit; i++){
1239     if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
1240       zOut[j++] = zStr[i];
1241     }else{
1242       if( nRep>nPattern ){
1243         nOut += nRep - nPattern;
1244         testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
1245         testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
1246         if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
1247           sqlite3_result_error_toobig(context);
1248           sqlite3_free(zOut);
1249           return;
1250         }
1251         cntExpand++;
1252         if( (cntExpand&(cntExpand-1))==0 ){
1253           /* Grow the size of the output buffer only on substitutions
1254           ** whose index is a power of two: 1, 2, 4, 8, 16, 32, ... */
1255           u8 *zOld;
1256           zOld = zOut;
1257           zOut = sqlite3_realloc64(zOut, (int)nOut + (nOut - nStr - 1));
1258           if( zOut==0 ){
1259             sqlite3_result_error_nomem(context);
1260             sqlite3_free(zOld);
1261             return;
1262           }
1263         }
1264       }
1265       memcpy(&zOut[j], zRep, nRep);
1266       j += nRep;
1267       i += nPattern-1;
1268     }
1269   }
1270   assert( j+nStr-i+1<=nOut );
1271   memcpy(&zOut[j], &zStr[i], nStr-i);
1272   j += nStr - i;
1273   assert( j<=nOut );
1274   zOut[j] = 0;
1275   sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
1276 }
1277 
1278 /*
1279 ** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
1280 ** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
1281 */
1282 static void trimFunc(
1283   sqlite3_context *context,
1284   int argc,
1285   sqlite3_value **argv
1286 ){
1287   const unsigned char *zIn;         /* Input string */
1288   const unsigned char *zCharSet;    /* Set of characters to trim */
1289   int nIn;                          /* Number of bytes in input */
1290   int flags;                        /* 1: trimleft  2: trimright  3: trim */
1291   int i;                            /* Loop counter */
1292   unsigned char *aLen = 0;          /* Length of each character in zCharSet */
1293   unsigned char **azChar = 0;       /* Individual characters in zCharSet */
1294   int nChar;                        /* Number of characters in zCharSet */
1295 
1296   if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1297     return;
1298   }
1299   zIn = sqlite3_value_text(argv[0]);
1300   if( zIn==0 ) return;
1301   nIn = sqlite3_value_bytes(argv[0]);
1302   assert( zIn==sqlite3_value_text(argv[0]) );
1303   if( argc==1 ){
1304     static const unsigned char lenOne[] = { 1 };
1305     static unsigned char * const azOne[] = { (u8*)" " };
1306     nChar = 1;
1307     aLen = (u8*)lenOne;
1308     azChar = (unsigned char **)azOne;
1309     zCharSet = 0;
1310   }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
1311     return;
1312   }else{
1313     const unsigned char *z;
1314     for(z=zCharSet, nChar=0; *z; nChar++){
1315       SQLITE_SKIP_UTF8(z);
1316     }
1317     if( nChar>0 ){
1318       azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));
1319       if( azChar==0 ){
1320         return;
1321       }
1322       aLen = (unsigned char*)&azChar[nChar];
1323       for(z=zCharSet, nChar=0; *z; nChar++){
1324         azChar[nChar] = (unsigned char *)z;
1325         SQLITE_SKIP_UTF8(z);
1326         aLen[nChar] = (u8)(z - azChar[nChar]);
1327       }
1328     }
1329   }
1330   if( nChar>0 ){
1331     flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
1332     if( flags & 1 ){
1333       while( nIn>0 ){
1334         int len = 0;
1335         for(i=0; i<nChar; i++){
1336           len = aLen[i];
1337           if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
1338         }
1339         if( i>=nChar ) break;
1340         zIn += len;
1341         nIn -= len;
1342       }
1343     }
1344     if( flags & 2 ){
1345       while( nIn>0 ){
1346         int len = 0;
1347         for(i=0; i<nChar; i++){
1348           len = aLen[i];
1349           if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
1350         }
1351         if( i>=nChar ) break;
1352         nIn -= len;
1353       }
1354     }
1355     if( zCharSet ){
1356       sqlite3_free(azChar);
1357     }
1358   }
1359   sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
1360 }
1361 
1362 
1363 #ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
1364 /*
1365 ** The "unknown" function is automatically substituted in place of
1366 ** any unrecognized function name when doing an EXPLAIN or EXPLAIN QUERY PLAN
1367 ** when the SQLITE_ENABLE_UNKNOWN_FUNCTION compile-time option is used.
1368 ** When the "sqlite3" command-line shell is built using this functionality,
1369 ** that allows an EXPLAIN or EXPLAIN QUERY PLAN for complex queries
1370 ** involving application-defined functions to be examined in a generic
1371 ** sqlite3 shell.
1372 */
1373 static void unknownFunc(
1374   sqlite3_context *context,
1375   int argc,
1376   sqlite3_value **argv
1377 ){
1378   /* no-op */
1379 }
1380 #endif /*SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION*/
1381 
1382 
1383 /* IMP: R-25361-16150 This function is omitted from SQLite by default. It
1384 ** is only available if the SQLITE_SOUNDEX compile-time option is used
1385 ** when SQLite is built.
1386 */
1387 #ifdef SQLITE_SOUNDEX
1388 /*
1389 ** Compute the soundex encoding of a word.
1390 **
1391 ** IMP: R-59782-00072 The soundex(X) function returns a string that is the
1392 ** soundex encoding of the string X.
1393 */
1394 static void soundexFunc(
1395   sqlite3_context *context,
1396   int argc,
1397   sqlite3_value **argv
1398 ){
1399   char zResult[8];
1400   const u8 *zIn;
1401   int i, j;
1402   static const unsigned char iCode[] = {
1403     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1404     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
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, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1408     1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 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   };
1412   assert( argc==1 );
1413   zIn = (u8*)sqlite3_value_text(argv[0]);
1414   if( zIn==0 ) zIn = (u8*)"";
1415   for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
1416   if( zIn[i] ){
1417     u8 prevcode = iCode[zIn[i]&0x7f];
1418     zResult[0] = sqlite3Toupper(zIn[i]);
1419     for(j=1; j<4 && zIn[i]; i++){
1420       int code = iCode[zIn[i]&0x7f];
1421       if( code>0 ){
1422         if( code!=prevcode ){
1423           prevcode = code;
1424           zResult[j++] = code + '0';
1425         }
1426       }else{
1427         prevcode = 0;
1428       }
1429     }
1430     while( j<4 ){
1431       zResult[j++] = '0';
1432     }
1433     zResult[j] = 0;
1434     sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
1435   }else{
1436     /* IMP: R-64894-50321 The string "?000" is returned if the argument
1437     ** is NULL or contains no ASCII alphabetic characters. */
1438     sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
1439   }
1440 }
1441 #endif /* SQLITE_SOUNDEX */
1442 
1443 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1444 /*
1445 ** A function that loads a shared-library extension then returns NULL.
1446 */
1447 static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
1448   const char *zFile = (const char *)sqlite3_value_text(argv[0]);
1449   const char *zProc;
1450   sqlite3 *db = sqlite3_context_db_handle(context);
1451   char *zErrMsg = 0;
1452 
1453   /* Disallow the load_extension() SQL function unless the SQLITE_LoadExtFunc
1454   ** flag is set.  See the sqlite3_enable_load_extension() API.
1455   */
1456   if( (db->flags & SQLITE_LoadExtFunc)==0 ){
1457     sqlite3_result_error(context, "not authorized", -1);
1458     return;
1459   }
1460 
1461   if( argc==2 ){
1462     zProc = (const char *)sqlite3_value_text(argv[1]);
1463   }else{
1464     zProc = 0;
1465   }
1466   if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
1467     sqlite3_result_error(context, zErrMsg, -1);
1468     sqlite3_free(zErrMsg);
1469   }
1470 }
1471 #endif
1472 
1473 
1474 /*
1475 ** An instance of the following structure holds the context of a
1476 ** sum() or avg() aggregate computation.
1477 */
1478 typedef struct SumCtx SumCtx;
1479 struct SumCtx {
1480   double rSum;      /* Floating point sum */
1481   i64 iSum;         /* Integer sum */
1482   i64 cnt;          /* Number of elements summed */
1483   u8 overflow;      /* True if integer overflow seen */
1484   u8 approx;        /* True if non-integer value was input to the sum */
1485 };
1486 
1487 /*
1488 ** Routines used to compute the sum, average, and total.
1489 **
1490 ** The SUM() function follows the (broken) SQL standard which means
1491 ** that it returns NULL if it sums over no inputs.  TOTAL returns
1492 ** 0.0 in that case.  In addition, TOTAL always returns a float where
1493 ** SUM might return an integer if it never encounters a floating point
1494 ** value.  TOTAL never fails, but SUM might through an exception if
1495 ** it overflows an integer.
1496 */
1497 static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
1498   SumCtx *p;
1499   int type;
1500   assert( argc==1 );
1501   UNUSED_PARAMETER(argc);
1502   p = sqlite3_aggregate_context(context, sizeof(*p));
1503   type = sqlite3_value_numeric_type(argv[0]);
1504   if( p && type!=SQLITE_NULL ){
1505     p->cnt++;
1506     if( type==SQLITE_INTEGER ){
1507       i64 v = sqlite3_value_int64(argv[0]);
1508       p->rSum += v;
1509       if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){
1510         p->approx = p->overflow = 1;
1511       }
1512     }else{
1513       p->rSum += sqlite3_value_double(argv[0]);
1514       p->approx = 1;
1515     }
1516   }
1517 }
1518 #ifndef SQLITE_OMIT_WINDOWFUNC
1519 static void sumInverse(sqlite3_context *context, int argc, sqlite3_value**argv){
1520   SumCtx *p;
1521   int type;
1522   assert( argc==1 );
1523   UNUSED_PARAMETER(argc);
1524   p = sqlite3_aggregate_context(context, sizeof(*p));
1525   type = sqlite3_value_numeric_type(argv[0]);
1526   /* p is always non-NULL because sumStep() will have been called first
1527   ** to initialize it */
1528   if( ALWAYS(p) && type!=SQLITE_NULL ){
1529     assert( p->cnt>0 );
1530     p->cnt--;
1531     assert( type==SQLITE_INTEGER || p->approx );
1532     if( type==SQLITE_INTEGER && p->approx==0 ){
1533       i64 v = sqlite3_value_int64(argv[0]);
1534       p->rSum -= v;
1535       p->iSum -= v;
1536     }else{
1537       p->rSum -= sqlite3_value_double(argv[0]);
1538     }
1539   }
1540 }
1541 #else
1542 # define sumInverse 0
1543 #endif /* SQLITE_OMIT_WINDOWFUNC */
1544 static void sumFinalize(sqlite3_context *context){
1545   SumCtx *p;
1546   p = sqlite3_aggregate_context(context, 0);
1547   if( p && p->cnt>0 ){
1548     if( p->overflow ){
1549       sqlite3_result_error(context,"integer overflow",-1);
1550     }else if( p->approx ){
1551       sqlite3_result_double(context, p->rSum);
1552     }else{
1553       sqlite3_result_int64(context, p->iSum);
1554     }
1555   }
1556 }
1557 static void avgFinalize(sqlite3_context *context){
1558   SumCtx *p;
1559   p = sqlite3_aggregate_context(context, 0);
1560   if( p && p->cnt>0 ){
1561     sqlite3_result_double(context, p->rSum/(double)p->cnt);
1562   }
1563 }
1564 static void totalFinalize(sqlite3_context *context){
1565   SumCtx *p;
1566   p = sqlite3_aggregate_context(context, 0);
1567   /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
1568   sqlite3_result_double(context, p ? p->rSum : (double)0);
1569 }
1570 
1571 /*
1572 ** The following structure keeps track of state information for the
1573 ** count() aggregate function.
1574 */
1575 typedef struct CountCtx CountCtx;
1576 struct CountCtx {
1577   i64 n;
1578 #ifdef SQLITE_DEBUG
1579   int bInverse;                   /* True if xInverse() ever called */
1580 #endif
1581 };
1582 
1583 /*
1584 ** Routines to implement the count() aggregate function.
1585 */
1586 static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
1587   CountCtx *p;
1588   p = sqlite3_aggregate_context(context, sizeof(*p));
1589   if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
1590     p->n++;
1591   }
1592 
1593 #ifndef SQLITE_OMIT_DEPRECATED
1594   /* The sqlite3_aggregate_count() function is deprecated.  But just to make
1595   ** sure it still operates correctly, verify that its count agrees with our
1596   ** internal count when using count(*) and when the total count can be
1597   ** expressed as a 32-bit integer. */
1598   assert( argc==1 || p==0 || p->n>0x7fffffff || p->bInverse
1599           || p->n==sqlite3_aggregate_count(context) );
1600 #endif
1601 }
1602 static void countFinalize(sqlite3_context *context){
1603   CountCtx *p;
1604   p = sqlite3_aggregate_context(context, 0);
1605   sqlite3_result_int64(context, p ? p->n : 0);
1606 }
1607 #ifndef SQLITE_OMIT_WINDOWFUNC
1608 static void countInverse(sqlite3_context *ctx, int argc, sqlite3_value **argv){
1609   CountCtx *p;
1610   p = sqlite3_aggregate_context(ctx, sizeof(*p));
1611   /* p is always non-NULL since countStep() will have been called first */
1612   if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && ALWAYS(p) ){
1613     p->n--;
1614 #ifdef SQLITE_DEBUG
1615     p->bInverse = 1;
1616 #endif
1617   }
1618 }
1619 #else
1620 # define countInverse 0
1621 #endif /* SQLITE_OMIT_WINDOWFUNC */
1622 
1623 /*
1624 ** Routines to implement min() and max() aggregate functions.
1625 */
1626 static void minmaxStep(
1627   sqlite3_context *context,
1628   int NotUsed,
1629   sqlite3_value **argv
1630 ){
1631   Mem *pArg  = (Mem *)argv[0];
1632   Mem *pBest;
1633   UNUSED_PARAMETER(NotUsed);
1634 
1635   pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
1636   if( !pBest ) return;
1637 
1638   if( sqlite3_value_type(pArg)==SQLITE_NULL ){
1639     if( pBest->flags ) sqlite3SkipAccumulatorLoad(context);
1640   }else if( pBest->flags ){
1641     int max;
1642     int cmp;
1643     CollSeq *pColl = sqlite3GetFuncCollSeq(context);
1644     /* This step function is used for both the min() and max() aggregates,
1645     ** the only difference between the two being that the sense of the
1646     ** comparison is inverted. For the max() aggregate, the
1647     ** sqlite3_user_data() function returns (void *)-1. For min() it
1648     ** returns (void *)db, where db is the sqlite3* database pointer.
1649     ** Therefore the next statement sets variable 'max' to 1 for the max()
1650     ** aggregate, or 0 for min().
1651     */
1652     max = sqlite3_user_data(context)!=0;
1653     cmp = sqlite3MemCompare(pBest, pArg, pColl);
1654     if( (max && cmp<0) || (!max && cmp>0) ){
1655       sqlite3VdbeMemCopy(pBest, pArg);
1656     }else{
1657       sqlite3SkipAccumulatorLoad(context);
1658     }
1659   }else{
1660     pBest->db = sqlite3_context_db_handle(context);
1661     sqlite3VdbeMemCopy(pBest, pArg);
1662   }
1663 }
1664 static void minMaxValueFinalize(sqlite3_context *context, int bValue){
1665   sqlite3_value *pRes;
1666   pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1667   if( pRes ){
1668     if( pRes->flags ){
1669       sqlite3_result_value(context, pRes);
1670     }
1671     if( bValue==0 ) sqlite3VdbeMemRelease(pRes);
1672   }
1673 }
1674 #ifndef SQLITE_OMIT_WINDOWFUNC
1675 static void minMaxValue(sqlite3_context *context){
1676   minMaxValueFinalize(context, 1);
1677 }
1678 #else
1679 # define minMaxValue 0
1680 #endif /* SQLITE_OMIT_WINDOWFUNC */
1681 static void minMaxFinalize(sqlite3_context *context){
1682   minMaxValueFinalize(context, 0);
1683 }
1684 
1685 /*
1686 ** group_concat(EXPR, ?SEPARATOR?)
1687 */
1688 static void groupConcatStep(
1689   sqlite3_context *context,
1690   int argc,
1691   sqlite3_value **argv
1692 ){
1693   const char *zVal;
1694   StrAccum *pAccum;
1695   const char *zSep;
1696   int nVal, nSep;
1697   assert( argc==1 || argc==2 );
1698   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
1699   pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
1700 
1701   if( pAccum ){
1702     sqlite3 *db = sqlite3_context_db_handle(context);
1703     int firstTerm = pAccum->mxAlloc==0;
1704     pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
1705     if( !firstTerm ){
1706       if( argc==2 ){
1707         zSep = (char*)sqlite3_value_text(argv[1]);
1708         nSep = sqlite3_value_bytes(argv[1]);
1709       }else{
1710         zSep = ",";
1711         nSep = 1;
1712       }
1713       if( zSep ) sqlite3_str_append(pAccum, zSep, nSep);
1714     }
1715     zVal = (char*)sqlite3_value_text(argv[0]);
1716     nVal = sqlite3_value_bytes(argv[0]);
1717     if( zVal ) sqlite3_str_append(pAccum, zVal, nVal);
1718   }
1719 }
1720 #ifndef SQLITE_OMIT_WINDOWFUNC
1721 static void groupConcatInverse(
1722   sqlite3_context *context,
1723   int argc,
1724   sqlite3_value **argv
1725 ){
1726   int n;
1727   StrAccum *pAccum;
1728   assert( argc==1 || argc==2 );
1729   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
1730   pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
1731   /* pAccum is always non-NULL since groupConcatStep() will have always
1732   ** run frist to initialize it */
1733   if( ALWAYS(pAccum) ){
1734     n = sqlite3_value_bytes(argv[0]);
1735     if( argc==2 ){
1736       n += sqlite3_value_bytes(argv[1]);
1737     }else{
1738       n++;
1739     }
1740     if( n>=(int)pAccum->nChar ){
1741       pAccum->nChar = 0;
1742     }else{
1743       pAccum->nChar -= n;
1744       memmove(pAccum->zText, &pAccum->zText[n], pAccum->nChar);
1745     }
1746     if( pAccum->nChar==0 ) pAccum->mxAlloc = 0;
1747   }
1748 }
1749 #else
1750 # define groupConcatInverse 0
1751 #endif /* SQLITE_OMIT_WINDOWFUNC */
1752 static void groupConcatFinalize(sqlite3_context *context){
1753   StrAccum *pAccum;
1754   pAccum = sqlite3_aggregate_context(context, 0);
1755   if( pAccum ){
1756     if( pAccum->accError==SQLITE_TOOBIG ){
1757       sqlite3_result_error_toobig(context);
1758     }else if( pAccum->accError==SQLITE_NOMEM ){
1759       sqlite3_result_error_nomem(context);
1760     }else{
1761       sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1,
1762                           sqlite3_free);
1763     }
1764   }
1765 }
1766 #ifndef SQLITE_OMIT_WINDOWFUNC
1767 static void groupConcatValue(sqlite3_context *context){
1768   sqlite3_str *pAccum;
1769   pAccum = (sqlite3_str*)sqlite3_aggregate_context(context, 0);
1770   if( pAccum ){
1771     if( pAccum->accError==SQLITE_TOOBIG ){
1772       sqlite3_result_error_toobig(context);
1773     }else if( pAccum->accError==SQLITE_NOMEM ){
1774       sqlite3_result_error_nomem(context);
1775     }else{
1776       const char *zText = sqlite3_str_value(pAccum);
1777       sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
1778     }
1779   }
1780 }
1781 #else
1782 # define groupConcatValue 0
1783 #endif /* SQLITE_OMIT_WINDOWFUNC */
1784 
1785 /*
1786 ** This routine does per-connection function registration.  Most
1787 ** of the built-in functions above are part of the global function set.
1788 ** This routine only deals with those that are not global.
1789 */
1790 void sqlite3RegisterPerConnectionBuiltinFunctions(sqlite3 *db){
1791   int rc = sqlite3_overload_function(db, "MATCH", 2);
1792   assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1793   if( rc==SQLITE_NOMEM ){
1794     sqlite3OomFault(db);
1795   }
1796 }
1797 
1798 /*
1799 ** Re-register the built-in LIKE functions.  The caseSensitive
1800 ** parameter determines whether or not the LIKE operator is case
1801 ** sensitive.
1802 */
1803 void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1804   struct compareInfo *pInfo;
1805   int flags;
1806   if( caseSensitive ){
1807     pInfo = (struct compareInfo*)&likeInfoAlt;
1808     flags = SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE;
1809   }else{
1810     pInfo = (struct compareInfo*)&likeInfoNorm;
1811     flags = SQLITE_FUNC_LIKE;
1812   }
1813   sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0);
1814   sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0);
1815   sqlite3FindFunction(db, "like", 2, SQLITE_UTF8, 0)->funcFlags |= flags;
1816   sqlite3FindFunction(db, "like", 3, SQLITE_UTF8, 0)->funcFlags |= flags;
1817 }
1818 
1819 /*
1820 ** pExpr points to an expression which implements a function.  If
1821 ** it is appropriate to apply the LIKE optimization to that function
1822 ** then set aWc[0] through aWc[2] to the wildcard characters and the
1823 ** escape character and then return TRUE.  If the function is not a
1824 ** LIKE-style function then return FALSE.
1825 **
1826 ** The expression "a LIKE b ESCAPE c" is only considered a valid LIKE
1827 ** operator if c is a string literal that is exactly one byte in length.
1828 ** That one byte is stored in aWc[3].  aWc[3] is set to zero if there is
1829 ** no ESCAPE clause.
1830 **
1831 ** *pIsNocase is set to true if uppercase and lowercase are equivalent for
1832 ** the function (default for LIKE).  If the function makes the distinction
1833 ** between uppercase and lowercase (as does GLOB) then *pIsNocase is set to
1834 ** false.
1835 */
1836 int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
1837   FuncDef *pDef;
1838   int nExpr;
1839   if( pExpr->op!=TK_FUNCTION || !pExpr->x.pList ){
1840     return 0;
1841   }
1842   assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
1843   nExpr = pExpr->x.pList->nExpr;
1844   pDef = sqlite3FindFunction(db, pExpr->u.zToken, nExpr, SQLITE_UTF8, 0);
1845   if( NEVER(pDef==0) || (pDef->funcFlags & SQLITE_FUNC_LIKE)==0 ){
1846     return 0;
1847   }
1848   if( nExpr<3 ){
1849     aWc[3] = 0;
1850   }else{
1851     Expr *pEscape = pExpr->x.pList->a[2].pExpr;
1852     char *zEscape;
1853     if( pEscape->op!=TK_STRING ) return 0;
1854     zEscape = pEscape->u.zToken;
1855     if( zEscape[0]==0 || zEscape[1]!=0 ) return 0;
1856     aWc[3] = zEscape[0];
1857   }
1858 
1859   /* The memcpy() statement assumes that the wildcard characters are
1860   ** the first three statements in the compareInfo structure.  The
1861   ** asserts() that follow verify that assumption
1862   */
1863   memcpy(aWc, pDef->pUserData, 3);
1864   assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1865   assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1866   assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
1867   *pIsNocase = (pDef->funcFlags & SQLITE_FUNC_CASE)==0;
1868   return 1;
1869 }
1870 
1871 /*
1872 ** All of the FuncDef structures in the aBuiltinFunc[] array above
1873 ** to the global function hash table.  This occurs at start-time (as
1874 ** a consequence of calling sqlite3_initialize()).
1875 **
1876 ** After this routine runs
1877 */
1878 void sqlite3RegisterBuiltinFunctions(void){
1879   /*
1880   ** The following array holds FuncDef structures for all of the functions
1881   ** defined in this file.
1882   **
1883   ** The array cannot be constant since changes are made to the
1884   ** FuncDef.pHash elements at start-time.  The elements of this array
1885   ** are read-only after initialization is complete.
1886   **
1887   ** For peak efficiency, put the most frequently used function last.
1888   */
1889   static FuncDef aBuiltinFunc[] = {
1890 #ifdef SQLITE_SOUNDEX
1891     FUNCTION(soundex,            1, 0, 0, soundexFunc      ),
1892 #endif
1893 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1894     VFUNCTION(load_extension,    1, 0, 0, loadExt          ),
1895     VFUNCTION(load_extension,    2, 0, 0, loadExt          ),
1896 #endif
1897 #if SQLITE_USER_AUTHENTICATION
1898     FUNCTION(sqlite_crypt,       2, 0, 0, sqlite3CryptFunc ),
1899 #endif
1900 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
1901     DFUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc  ),
1902     DFUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc  ),
1903 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
1904     FUNCTION2(unlikely,          1, 0, 0, noopFunc,  SQLITE_FUNC_UNLIKELY),
1905     FUNCTION2(likelihood,        2, 0, 0, noopFunc,  SQLITE_FUNC_UNLIKELY),
1906     FUNCTION2(likely,            1, 0, 0, noopFunc,  SQLITE_FUNC_UNLIKELY),
1907 #ifdef SQLITE_DEBUG
1908     FUNCTION2(affinity,          1, 0, 0, noopFunc,  SQLITE_FUNC_AFFINITY),
1909 #endif
1910 #ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC
1911     FUNCTION2(sqlite_offset,     1, 0, 0, noopFunc,  SQLITE_FUNC_OFFSET|
1912                                                      SQLITE_FUNC_TYPEOF),
1913 #endif
1914     FUNCTION(ltrim,              1, 1, 0, trimFunc         ),
1915     FUNCTION(ltrim,              2, 1, 0, trimFunc         ),
1916     FUNCTION(rtrim,              1, 2, 0, trimFunc         ),
1917     FUNCTION(rtrim,              2, 2, 0, trimFunc         ),
1918     FUNCTION(trim,               1, 3, 0, trimFunc         ),
1919     FUNCTION(trim,               2, 3, 0, trimFunc         ),
1920     FUNCTION(min,               -1, 0, 1, minmaxFunc       ),
1921     FUNCTION(min,                0, 0, 1, 0                ),
1922     WAGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize, minMaxValue, 0,
1923                                           SQLITE_FUNC_MINMAX ),
1924     FUNCTION(max,               -1, 1, 1, minmaxFunc       ),
1925     FUNCTION(max,                0, 1, 1, 0                ),
1926     WAGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize, minMaxValue, 0,
1927                                           SQLITE_FUNC_MINMAX ),
1928     FUNCTION2(typeof,            1, 0, 0, typeofFunc,  SQLITE_FUNC_TYPEOF),
1929     FUNCTION2(length,            1, 0, 0, lengthFunc,  SQLITE_FUNC_LENGTH),
1930     FUNCTION(instr,              2, 0, 0, instrFunc        ),
1931     FUNCTION(printf,            -1, 0, 0, printfFunc       ),
1932     FUNCTION(unicode,            1, 0, 0, unicodeFunc      ),
1933     FUNCTION(char,              -1, 0, 0, charFunc         ),
1934     FUNCTION(abs,                1, 0, 0, absFunc          ),
1935 #ifndef SQLITE_OMIT_FLOATING_POINT
1936     FUNCTION(round,              1, 0, 0, roundFunc        ),
1937     FUNCTION(round,              2, 0, 0, roundFunc        ),
1938 #endif
1939     FUNCTION(upper,              1, 0, 0, upperFunc        ),
1940     FUNCTION(lower,              1, 0, 0, lowerFunc        ),
1941     FUNCTION(hex,                1, 0, 0, hexFunc          ),
1942     FUNCTION2(ifnull,            2, 0, 0, noopFunc,  SQLITE_FUNC_COALESCE),
1943     VFUNCTION(random,            0, 0, 0, randomFunc       ),
1944     VFUNCTION(randomblob,        1, 0, 0, randomBlob       ),
1945     FUNCTION(nullif,             2, 0, 1, nullifFunc       ),
1946     DFUNCTION(sqlite_version,    0, 0, 0, versionFunc      ),
1947     DFUNCTION(sqlite_source_id,  0, 0, 0, sourceidFunc     ),
1948     FUNCTION(sqlite_log,         2, 0, 0, errlogFunc       ),
1949     FUNCTION(quote,              1, 0, 0, quoteFunc        ),
1950     VFUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid),
1951     VFUNCTION(changes,           0, 0, 0, changes          ),
1952     VFUNCTION(total_changes,     0, 0, 0, total_changes    ),
1953     FUNCTION(replace,            3, 0, 0, replaceFunc      ),
1954     FUNCTION(zeroblob,           1, 0, 0, zeroblobFunc     ),
1955     FUNCTION(substr,             2, 0, 0, substrFunc       ),
1956     FUNCTION(substr,             3, 0, 0, substrFunc       ),
1957     WAGGREGATE(sum,   1,0,0, sumStep, sumFinalize, sumFinalize, sumInverse, 0),
1958     WAGGREGATE(total, 1,0,0, sumStep,totalFinalize,totalFinalize,sumInverse, 0),
1959     WAGGREGATE(avg,   1,0,0, sumStep, avgFinalize, avgFinalize, sumInverse, 0),
1960     WAGGREGATE(count, 0,0,0, countStep,
1961         countFinalize, countFinalize, countInverse, SQLITE_FUNC_COUNT  ),
1962     WAGGREGATE(count, 1,0,0, countStep,
1963         countFinalize, countFinalize, countInverse, 0  ),
1964     WAGGREGATE(group_concat, 1, 0, 0, groupConcatStep,
1965         groupConcatFinalize, groupConcatValue, groupConcatInverse, 0),
1966     WAGGREGATE(group_concat, 2, 0, 0, groupConcatStep,
1967         groupConcatFinalize, groupConcatValue, groupConcatInverse, 0),
1968 
1969     LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1970 #ifdef SQLITE_CASE_SENSITIVE_LIKE
1971     LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1972     LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1973 #else
1974     LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
1975     LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
1976 #endif
1977 #ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
1978     FUNCTION(unknown,           -1, 0, 0, unknownFunc      ),
1979 #endif
1980     FUNCTION(coalesce,           1, 0, 0, 0                ),
1981     FUNCTION(coalesce,           0, 0, 0, 0                ),
1982     FUNCTION2(coalesce,         -1, 0, 0, noopFunc,  SQLITE_FUNC_COALESCE),
1983   };
1984 #ifndef SQLITE_OMIT_ALTERTABLE
1985   sqlite3AlterFunctions();
1986 #endif
1987   sqlite3WindowFunctions();
1988 #if defined(SQLITE_ENABLE_STAT3) || defined(SQLITE_ENABLE_STAT4)
1989   sqlite3AnalyzeFunctions();
1990 #endif
1991   sqlite3RegisterDateTimeFunctions();
1992   sqlite3InsertBuiltinFuncs(aBuiltinFunc, ArraySize(aBuiltinFunc));
1993 
1994 #if 0  /* Enable to print out how the built-in functions are hashed */
1995   {
1996     int i;
1997     FuncDef *p;
1998     for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){
1999       printf("FUNC-HASH %02d:", i);
2000       for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash){
2001         int n = sqlite3Strlen30(p->zName);
2002         int h = p->zName[0] + n;
2003         printf(" %s(%d)", p->zName, h);
2004       }
2005       printf("\n");
2006     }
2007   }
2008 #endif
2009 }
2010