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