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