xref: /sqlite-3.40.0/src/func.c (revision 27a770e0)
1 /*
2 ** 2002 February 23
3 **
4 ** The author disclaims copyright to this source code.  In place of
5 ** a legal notice, here is a blessing:
6 **
7 **    May you do good and not evil.
8 **    May you find forgiveness for yourself and forgive others.
9 **    May you share freely, never taking more than you give.
10 **
11 *************************************************************************
12 ** This file contains the C functions that implement various SQL
13 ** functions of SQLite.
14 **
15 ** There is only one exported symbol in this file - the function
16 ** sqliteRegisterBuildinFunctions() found at the bottom of the file.
17 ** All other code has file scope.
18 **
19 ** $Id: func.c,v 1.169 2007/08/23 02:47:53 drh Exp $
20 */
21 #include "sqliteInt.h"
22 #include <ctype.h>
23 #include <stdlib.h>
24 #include <assert.h>
25 #include "vdbeInt.h"
26 
27 
28 /*
29 ** Return the collating function associated with a function.
30 */
31 static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
32   return context->pColl;
33 }
34 
35 /*
36 ** Implementation of the non-aggregate min() and max() functions
37 */
38 static void minmaxFunc(
39   sqlite3_context *context,
40   int argc,
41   sqlite3_value **argv
42 ){
43   int i;
44   int mask;    /* 0 for min() or 0xffffffff for max() */
45   int iBest;
46   CollSeq *pColl;
47 
48   if( argc==0 ) return;
49   mask = sqlite3_user_data(context)==0 ? 0 : -1;
50   pColl = sqlite3GetFuncCollSeq(context);
51   assert( pColl );
52   assert( mask==-1 || mask==0 );
53   iBest = 0;
54   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
55   for(i=1; i<argc; i++){
56     if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
57     if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
58       iBest = i;
59     }
60   }
61   sqlite3_result_value(context, argv[iBest]);
62 }
63 
64 /*
65 ** Return the type of the argument.
66 */
67 static void typeofFunc(
68   sqlite3_context *context,
69   int argc,
70   sqlite3_value **argv
71 ){
72   const char *z = 0;
73   switch( sqlite3_value_type(argv[0]) ){
74     case SQLITE_NULL:    z = "null";    break;
75     case SQLITE_INTEGER: z = "integer"; break;
76     case SQLITE_TEXT:    z = "text";    break;
77     case SQLITE_FLOAT:   z = "real";    break;
78     case SQLITE_BLOB:    z = "blob";    break;
79   }
80   sqlite3_result_text(context, z, -1, SQLITE_STATIC);
81 }
82 
83 
84 /*
85 ** Implementation of the length() function
86 */
87 static void lengthFunc(
88   sqlite3_context *context,
89   int argc,
90   sqlite3_value **argv
91 ){
92   int len;
93 
94   assert( argc==1 );
95   switch( sqlite3_value_type(argv[0]) ){
96     case SQLITE_BLOB:
97     case SQLITE_INTEGER:
98     case SQLITE_FLOAT: {
99       sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
100       break;
101     }
102     case SQLITE_TEXT: {
103       const unsigned char *z = sqlite3_value_text(argv[0]);
104       if( z==0 ) return;
105       len = 0;
106       while( *z ){
107         len++;
108         SQLITE_SKIP_UTF8(z);
109       }
110       sqlite3_result_int(context, len);
111       break;
112     }
113     default: {
114       sqlite3_result_null(context);
115       break;
116     }
117   }
118 }
119 
120 /*
121 ** Implementation of the abs() function
122 */
123 static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
124   assert( argc==1 );
125   switch( sqlite3_value_type(argv[0]) ){
126     case SQLITE_INTEGER: {
127       i64 iVal = sqlite3_value_int64(argv[0]);
128       if( iVal<0 ){
129         if( (iVal<<1)==0 ){
130           sqlite3_result_error(context, "integer overflow", -1);
131           return;
132         }
133         iVal = -iVal;
134       }
135       sqlite3_result_int64(context, iVal);
136       break;
137     }
138     case SQLITE_NULL: {
139       sqlite3_result_null(context);
140       break;
141     }
142     default: {
143       double rVal = sqlite3_value_double(argv[0]);
144       if( rVal<0 ) rVal = -rVal;
145       sqlite3_result_double(context, rVal);
146       break;
147     }
148   }
149 }
150 
151 /*
152 ** Implementation of the substr() function.
153 **
154 ** substr(x,p1,p2)  returns p2 characters of x[] beginning with p1.
155 ** p1 is 1-indexed.  So substr(x,1,1) returns the first character
156 ** of x.  If x is text, then we actually count UTF-8 characters.
157 ** If x is a blob, then we count bytes.
158 **
159 ** If p1 is negative, then we begin abs(p1) from the end of x[].
160 */
161 static void substrFunc(
162   sqlite3_context *context,
163   int argc,
164   sqlite3_value **argv
165 ){
166   const unsigned char *z;
167   const unsigned char *z2;
168   int len;
169   int p0type;
170   i64 p1, p2;
171 
172   assert( argc==3 );
173   p0type = sqlite3_value_type(argv[0]);
174   if( p0type==SQLITE_BLOB ){
175     len = sqlite3_value_bytes(argv[0]);
176     z = sqlite3_value_blob(argv[0]);
177     if( z==0 ) return;
178     assert( len==sqlite3_value_bytes(argv[0]) );
179   }else{
180     z = sqlite3_value_text(argv[0]);
181     if( z==0 ) return;
182     len = 0;
183     for(z2=z; *z2; len++){
184       SQLITE_SKIP_UTF8(z2);
185     }
186   }
187   p1 = sqlite3_value_int(argv[1]);
188   p2 = sqlite3_value_int(argv[2]);
189   if( p1<0 ){
190     p1 += len;
191     if( p1<0 ){
192       p2 += p1;
193       p1 = 0;
194     }
195   }else if( p1>0 ){
196     p1--;
197   }
198   if( p1+p2>len ){
199     p2 = len-p1;
200   }
201   if( p0type!=SQLITE_BLOB ){
202     while( *z && p1 ){
203       SQLITE_SKIP_UTF8(z);
204       p1--;
205     }
206     for(z2=z; *z2 && p2; p2--){
207       SQLITE_SKIP_UTF8(z2);
208     }
209     sqlite3_result_text(context, (char*)z, z2-z, SQLITE_TRANSIENT);
210   }else{
211     if( p2<0 ) p2 = 0;
212     sqlite3_result_blob(context, (char*)&z[p1], p2, SQLITE_TRANSIENT);
213   }
214 }
215 
216 /*
217 ** Implementation of the round() function
218 */
219 static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
220   int n = 0;
221   double r;
222   char zBuf[500];  /* larger than the %f representation of the largest double */
223   assert( argc==1 || argc==2 );
224   if( argc==2 ){
225     if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
226     n = sqlite3_value_int(argv[1]);
227     if( n>30 ) n = 30;
228     if( n<0 ) n = 0;
229   }
230   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
231   r = sqlite3_value_double(argv[0]);
232   sqlite3_snprintf(sizeof(zBuf),zBuf,"%.*f",n,r);
233   sqlite3AtoF(zBuf, &r);
234   sqlite3_result_double(context, r);
235 }
236 
237 /*
238 ** Implementation of the upper() and lower() SQL functions.
239 */
240 static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
241   char *z1;
242   const char *z2;
243   int i, n;
244   if( argc<1 || SQLITE_NULL==sqlite3_value_type(argv[0]) ) return;
245   z2 = (char*)sqlite3_value_text(argv[0]);
246   n = sqlite3_value_bytes(argv[0]);
247   /* Verify that the call to _bytes() does not invalidate the _text() pointer */
248   assert( z2==(char*)sqlite3_value_text(argv[0]) );
249   if( z2 ){
250     z1 = sqlite3_malloc(n+1);
251     if( z1 ){
252       memcpy(z1, z2, n+1);
253       for(i=0; z1[i]; i++){
254         z1[i] = toupper(z1[i]);
255       }
256       sqlite3_result_text(context, z1, -1, sqlite3_free);
257     }
258   }
259 }
260 static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
261   char *z1;
262   const char *z2;
263   int i, n;
264   if( argc<1 || SQLITE_NULL==sqlite3_value_type(argv[0]) ) return;
265   z2 = (char*)sqlite3_value_text(argv[0]);
266   n = sqlite3_value_bytes(argv[0]);
267   /* Verify that the call to _bytes() does not invalidate the _text() pointer */
268   assert( z2==(char*)sqlite3_value_text(argv[0]) );
269   if( z2 ){
270     z1 = sqlite3_malloc(n+1);
271     if( z1 ){
272       memcpy(z1, z2, n+1);
273       for(i=0; z1[i]; i++){
274         z1[i] = tolower(z1[i]);
275       }
276       sqlite3_result_text(context, z1, -1, sqlite3_free);
277     }
278   }
279 }
280 
281 /*
282 ** Implementation of the IFNULL(), NVL(), and COALESCE() functions.
283 ** All three do the same thing.  They return the first non-NULL
284 ** argument.
285 */
286 static void ifnullFunc(
287   sqlite3_context *context,
288   int argc,
289   sqlite3_value **argv
290 ){
291   int i;
292   for(i=0; i<argc; i++){
293     if( SQLITE_NULL!=sqlite3_value_type(argv[i]) ){
294       sqlite3_result_value(context, argv[i]);
295       break;
296     }
297   }
298 }
299 
300 /*
301 ** Implementation of random().  Return a random integer.
302 */
303 static void randomFunc(
304   sqlite3_context *context,
305   int argc,
306   sqlite3_value **argv
307 ){
308   sqlite_int64 r;
309   sqlite3Randomness(sizeof(r), &r);
310   if( (r<<1)==0 ) r = 0;  /* Prevent 0x8000.... as the result so that we */
311                           /* can always do abs() of the result */
312   sqlite3_result_int64(context, r);
313 }
314 
315 /*
316 ** Implementation of randomblob(N).  Return a random blob
317 ** that is N bytes long.
318 */
319 static void randomBlob(
320   sqlite3_context *context,
321   int argc,
322   sqlite3_value **argv
323 ){
324   int n;
325   unsigned char *p;
326   assert( argc==1 );
327   n = sqlite3_value_int(argv[0]);
328   if( n<1 ){
329     n = 1;
330   }
331   if( n>SQLITE_MAX_LENGTH ){
332     sqlite3_result_error_toobig(context);
333     return;
334   }
335   p = sqlite3_malloc(n);
336   if( p ){
337     sqlite3Randomness(n, p);
338     sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
339   }
340 }
341 
342 /*
343 ** Implementation of the last_insert_rowid() SQL function.  The return
344 ** value is the same as the sqlite3_last_insert_rowid() API function.
345 */
346 static void last_insert_rowid(
347   sqlite3_context *context,
348   int arg,
349   sqlite3_value **argv
350 ){
351   sqlite3 *db = sqlite3_user_data(context);
352   sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
353 }
354 
355 /*
356 ** Implementation of the changes() SQL function.  The return value is the
357 ** same as the sqlite3_changes() API function.
358 */
359 static void changes(
360   sqlite3_context *context,
361   int arg,
362   sqlite3_value **argv
363 ){
364   sqlite3 *db = sqlite3_user_data(context);
365   sqlite3_result_int(context, sqlite3_changes(db));
366 }
367 
368 /*
369 ** Implementation of the total_changes() SQL function.  The return value is
370 ** the same as the sqlite3_total_changes() API function.
371 */
372 static void total_changes(
373   sqlite3_context *context,
374   int arg,
375   sqlite3_value **argv
376 ){
377   sqlite3 *db = sqlite3_user_data(context);
378   sqlite3_result_int(context, sqlite3_total_changes(db));
379 }
380 
381 /*
382 ** A structure defining how to do GLOB-style comparisons.
383 */
384 struct compareInfo {
385   u8 matchAll;
386   u8 matchOne;
387   u8 matchSet;
388   u8 noCase;
389 };
390 
391 static const struct compareInfo globInfo = { '*', '?', '[', 0 };
392 /* The correct SQL-92 behavior is for the LIKE operator to ignore
393 ** case.  Thus  'a' LIKE 'A' would be true. */
394 static const struct compareInfo likeInfoNorm = { '%', '_',   0, 1 };
395 /* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
396 ** is case sensitive causing 'a' LIKE 'A' to be false */
397 static const struct compareInfo likeInfoAlt = { '%', '_',   0, 0 };
398 
399 /*
400 ** Compare two UTF-8 strings for equality where the first string can
401 ** potentially be a "glob" expression.  Return true (1) if they
402 ** are the same and false (0) if they are different.
403 **
404 ** Globbing rules:
405 **
406 **      '*'       Matches any sequence of zero or more characters.
407 **
408 **      '?'       Matches exactly one character.
409 **
410 **     [...]      Matches one character from the enclosed list of
411 **                characters.
412 **
413 **     [^...]     Matches one character not in the enclosed list.
414 **
415 ** With the [...] and [^...] matching, a ']' character can be included
416 ** in the list by making it the first character after '[' or '^'.  A
417 ** range of characters can be specified using '-'.  Example:
418 ** "[a-z]" matches any single lower-case letter.  To match a '-', make
419 ** it the last character in the list.
420 **
421 ** This routine is usually quick, but can be N**2 in the worst case.
422 **
423 ** Hints: to match '*' or '?', put them in "[]".  Like this:
424 **
425 **         abc[*]xyz        Matches "abc*xyz" only
426 */
427 static int patternCompare(
428   const u8 *zPattern,              /* The glob pattern */
429   const u8 *zString,               /* The string to compare against the glob */
430   const struct compareInfo *pInfo, /* Information about how to do the compare */
431   const int esc                    /* The escape character */
432 ){
433   int c, c2;
434   int invert;
435   int seen;
436   u8 matchOne = pInfo->matchOne;
437   u8 matchAll = pInfo->matchAll;
438   u8 matchSet = pInfo->matchSet;
439   u8 noCase = pInfo->noCase;
440   int prevEscape = 0;     /* True if the previous character was 'escape' */
441 
442   while( (c = sqlite3Utf8Read(zPattern,0,&zPattern))!=0 ){
443     if( !prevEscape && c==matchAll ){
444       while( (c=sqlite3Utf8Read(zPattern,0,&zPattern)) == matchAll
445                || c == matchOne ){
446         if( c==matchOne && sqlite3Utf8Read(zString, 0, &zString)==0 ){
447           return 0;
448         }
449       }
450       if( c==0 ){
451         return 1;
452       }else if( c==esc ){
453         c = sqlite3Utf8Read(zPattern, 0, &zPattern);
454         if( c==0 ){
455           return 0;
456         }
457       }else if( c==matchSet ){
458         assert( esc==0 );         /* This is GLOB, not LIKE */
459         assert( matchSet<0x80 );  /* '[' is a single-byte character */
460         while( *zString && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){
461           SQLITE_SKIP_UTF8(zString);
462         }
463         return *zString!=0;
464       }
465       while( (c2 = sqlite3Utf8Read(zString,0,&zString))!=0 ){
466         if( noCase ){
467           c2 = c2<0x80 ? sqlite3UpperToLower[c2] : c2;
468           c = c<0x80 ? sqlite3UpperToLower[c] : c;
469           while( c2 != 0 && c2 != c ){
470             c2 = sqlite3Utf8Read(zString, 0, &zString);
471             if( c2<0x80 ) c2 = sqlite3UpperToLower[c2];
472           }
473         }else{
474           while( c2 != 0 && c2 != c ){
475             c2 = sqlite3Utf8Read(zString, 0, &zString);
476           }
477         }
478         if( c2==0 ) return 0;
479         if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
480       }
481       return 0;
482     }else if( !prevEscape && c==matchOne ){
483       if( sqlite3Utf8Read(zString, 0, &zString)==0 ){
484         return 0;
485       }
486     }else if( c==matchSet ){
487       int prior_c = 0;
488       assert( esc==0 );    /* This only occurs for GLOB, not LIKE */
489       seen = 0;
490       invert = 0;
491       c = sqlite3Utf8Read(zString, 0, &zString);
492       if( c==0 ) return 0;
493       c2 = sqlite3Utf8Read(zPattern, 0, &zPattern);
494       if( c2=='^' ){
495         invert = 1;
496         c2 = sqlite3Utf8Read(zPattern, 0, &zPattern);
497       }
498       if( c2==']' ){
499         if( c==']' ) seen = 1;
500         c2 = sqlite3Utf8Read(zPattern, 0, &zPattern);
501       }
502       while( c2 && c2!=']' ){
503         if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
504           c2 = sqlite3Utf8Read(zPattern, 0, &zPattern);
505           if( c>=prior_c && c<=c2 ) seen = 1;
506           prior_c = 0;
507         }else{
508           if( c==c2 ){
509             seen = 1;
510           }
511           prior_c = c2;
512         }
513         c2 = sqlite3Utf8Read(zPattern, 0, &zPattern);
514       }
515       if( c2==0 || (seen ^ invert)==0 ){
516         return 0;
517       }
518     }else if( esc==c && !prevEscape ){
519       prevEscape = 1;
520     }else{
521       c2 = sqlite3Utf8Read(zString, 0, &zString);
522       if( noCase ){
523         c = c<0x80 ? sqlite3UpperToLower[c] : c;
524         c2 = c2<0x80 ? sqlite3UpperToLower[c2] : c2;
525       }
526       if( c!=c2 ){
527         return 0;
528       }
529       prevEscape = 0;
530     }
531   }
532   return *zString==0;
533 }
534 
535 /*
536 ** Count the number of times that the LIKE operator (or GLOB which is
537 ** just a variation of LIKE) gets called.  This is used for testing
538 ** only.
539 */
540 #ifdef SQLITE_TEST
541 int sqlite3_like_count = 0;
542 #endif
543 
544 
545 /*
546 ** Implementation of the like() SQL function.  This function implements
547 ** the build-in LIKE operator.  The first argument to the function is the
548 ** pattern and the second argument is the string.  So, the SQL statements:
549 **
550 **       A LIKE B
551 **
552 ** is implemented as like(B,A).
553 **
554 ** This same function (with a different compareInfo structure) computes
555 ** the GLOB operator.
556 */
557 static void likeFunc(
558   sqlite3_context *context,
559   int argc,
560   sqlite3_value **argv
561 ){
562   const unsigned char *zA, *zB;
563   int escape = 0;
564 
565   zB = sqlite3_value_text(argv[0]);
566   zA = sqlite3_value_text(argv[1]);
567 
568   /* Limit the length of the LIKE or GLOB pattern to avoid problems
569   ** of deep recursion and N*N behavior in patternCompare().
570   */
571   if( sqlite3_value_bytes(argv[0])>SQLITE_MAX_LIKE_PATTERN_LENGTH ){
572     sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
573     return;
574   }
575   assert( zB==sqlite3_value_text(argv[0]) );  /* Encoding did not change */
576 
577   if( argc==3 ){
578     /* The escape character string must consist of a single UTF-8 character.
579     ** Otherwise, return an error.
580     */
581     const unsigned char *zEsc = sqlite3_value_text(argv[2]);
582     if( zEsc==0 ) return;
583     if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
584       sqlite3_result_error(context,
585           "ESCAPE expression must be a single character", -1);
586       return;
587     }
588     escape = sqlite3Utf8Read(zEsc, 0, &zEsc);
589   }
590   if( zA && zB ){
591     struct compareInfo *pInfo = sqlite3_user_data(context);
592 #ifdef SQLITE_TEST
593     sqlite3_like_count++;
594 #endif
595 
596     sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape));
597   }
598 }
599 
600 /*
601 ** Implementation of the NULLIF(x,y) function.  The result is the first
602 ** argument if the arguments are different.  The result is NULL if the
603 ** arguments are equal to each other.
604 */
605 static void nullifFunc(
606   sqlite3_context *context,
607   int argc,
608   sqlite3_value **argv
609 ){
610   CollSeq *pColl = sqlite3GetFuncCollSeq(context);
611   if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
612     sqlite3_result_value(context, argv[0]);
613   }
614 }
615 
616 /*
617 ** Implementation of the VERSION(*) function.  The result is the version
618 ** of the SQLite library that is running.
619 */
620 static void versionFunc(
621   sqlite3_context *context,
622   int argc,
623   sqlite3_value **argv
624 ){
625   sqlite3_result_text(context, sqlite3_version, -1, SQLITE_STATIC);
626 }
627 
628 /* Array for converting from half-bytes (nybbles) into ASCII hex
629 ** digits. */
630 static const char hexdigits[] = {
631   '0', '1', '2', '3', '4', '5', '6', '7',
632   '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
633 };
634 
635 /*
636 ** EXPERIMENTAL - This is not an official function.  The interface may
637 ** change.  This function may disappear.  Do not write code that depends
638 ** on this function.
639 **
640 ** Implementation of the QUOTE() function.  This function takes a single
641 ** argument.  If the argument is numeric, the return value is the same as
642 ** the argument.  If the argument is NULL, the return value is the string
643 ** "NULL".  Otherwise, the argument is enclosed in single quotes with
644 ** single-quote escapes.
645 */
646 static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
647   if( argc<1 ) return;
648   switch( sqlite3_value_type(argv[0]) ){
649     case SQLITE_NULL: {
650       sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
651       break;
652     }
653     case SQLITE_INTEGER:
654     case SQLITE_FLOAT: {
655       sqlite3_result_value(context, argv[0]);
656       break;
657     }
658     case SQLITE_BLOB: {
659       char *zText = 0;
660       char const *zBlob = sqlite3_value_blob(argv[0]);
661       int nBlob = sqlite3_value_bytes(argv[0]);
662       assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
663 
664       if( 2*nBlob+4>SQLITE_MAX_LENGTH ){
665         sqlite3_result_error_toobig(context);
666         return;
667       }
668       zText = (char *)sqlite3_malloc((2*nBlob)+4);
669       if( !zText ){
670         sqlite3_result_error(context, "out of memory", -1);
671       }else{
672         int i;
673         for(i=0; i<nBlob; i++){
674           zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
675           zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
676         }
677         zText[(nBlob*2)+2] = '\'';
678         zText[(nBlob*2)+3] = '\0';
679         zText[0] = 'X';
680         zText[1] = '\'';
681         sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
682         sqlite3_free(zText);
683       }
684       break;
685     }
686     case SQLITE_TEXT: {
687       int i,j;
688       u64 n;
689       const unsigned char *zArg = sqlite3_value_text(argv[0]);
690       char *z;
691 
692       if( zArg==0 ) return;
693       for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
694       if( i+n+3>SQLITE_MAX_LENGTH ){
695         sqlite3_result_error_toobig(context);
696         return;
697       }
698       z = sqlite3_malloc( i+n+3 );
699       if( z==0 ) return;
700       z[0] = '\'';
701       for(i=0, j=1; zArg[i]; i++){
702         z[j++] = zArg[i];
703         if( zArg[i]=='\'' ){
704           z[j++] = '\'';
705         }
706       }
707       z[j++] = '\'';
708       z[j] = 0;
709       sqlite3_result_text(context, z, j, SQLITE_TRANSIENT);
710       sqlite3_free(z);
711     }
712   }
713 }
714 
715 /*
716 ** The hex() function.  Interpret the argument as a blob.  Return
717 ** a hexadecimal rendering as text.
718 */
719 static void hexFunc(
720   sqlite3_context *context,
721   int argc,
722   sqlite3_value **argv
723 ){
724   int i, n;
725   const unsigned char *pBlob;
726   char *zHex, *z;
727   assert( argc==1 );
728   pBlob = sqlite3_value_blob(argv[0]);
729   n = sqlite3_value_bytes(argv[0]);
730   if( n*2+1>SQLITE_MAX_LENGTH ){
731     sqlite3_result_error_toobig(context);
732     return;
733   }
734   assert( pBlob==sqlite3_value_blob(argv[0]) );  /* No encoding change */
735   z = zHex = sqlite3_malloc(n*2 + 1);
736   if( zHex==0 ) return;
737   for(i=0; i<n; i++, pBlob++){
738     unsigned char c = *pBlob;
739     *(z++) = hexdigits[(c>>4)&0xf];
740     *(z++) = hexdigits[c&0xf];
741   }
742   *z = 0;
743   sqlite3_result_text(context, zHex, n*2, sqlite3_free);
744 }
745 
746 /*
747 ** The zeroblob(N) function returns a zero-filled blob of size N bytes.
748 */
749 static void zeroblobFunc(
750   sqlite3_context *context,
751   int argc,
752   sqlite3_value **argv
753 ){
754   i64 n;
755   assert( argc==1 );
756   n = sqlite3_value_int64(argv[0]);
757   if( n>SQLITE_MAX_LENGTH ){
758     sqlite3_result_error_toobig(context);
759   }else{
760     sqlite3_result_zeroblob(context, n);
761   }
762 }
763 
764 /*
765 ** The replace() function.  Three arguments are all strings: call
766 ** them A, B, and C. The result is also a string which is derived
767 ** from A by replacing every occurance of B with C.  The match
768 ** must be exact.  Collating sequences are not used.
769 */
770 static void replaceFunc(
771   sqlite3_context *context,
772   int argc,
773   sqlite3_value **argv
774 ){
775   const unsigned char *zStr;        /* The input string A */
776   const unsigned char *zPattern;    /* The pattern string B */
777   const unsigned char *zRep;        /* The replacement string C */
778   unsigned char *zOut;              /* The output */
779   int nStr;                /* Size of zStr */
780   int nPattern;            /* Size of zPattern */
781   int nRep;                /* Size of zRep */
782   i64 nOut;                /* Maximum size of zOut */
783   int loopLimit;           /* Last zStr[] that might match zPattern[] */
784   int i, j;                /* Loop counters */
785 
786   assert( argc==3 );
787   zStr = sqlite3_value_text(argv[0]);
788   if( zStr==0 ) return;
789   nStr = sqlite3_value_bytes(argv[0]);
790   assert( zStr==sqlite3_value_text(argv[0]) );  /* No encoding change */
791   zPattern = sqlite3_value_text(argv[1]);
792   if( zPattern==0 || zPattern[0]==0 ) return;
793   nPattern = sqlite3_value_bytes(argv[1]);
794   assert( zPattern==sqlite3_value_text(argv[1]) );  /* No encoding change */
795   zRep = sqlite3_value_text(argv[2]);
796   if( zRep==0 ) return;
797   nRep = sqlite3_value_bytes(argv[2]);
798   assert( zRep==sqlite3_value_text(argv[2]) );
799   nOut = nStr + 1;
800   assert( nOut<SQLITE_MAX_LENGTH );
801   zOut = sqlite3_malloc((int)nOut);
802   if( zOut==0 ){
803     return;
804   }
805   loopLimit = nStr - nPattern;
806   for(i=j=0; i<=loopLimit; i++){
807     if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
808       zOut[j++] = zStr[i];
809     }else{
810       u8 *zOld;
811       nOut += nRep - nPattern;
812       if( nOut>=SQLITE_MAX_LENGTH ){
813         sqlite3_result_error_toobig(context);
814         sqlite3_free(zOut);
815         return;
816       }
817       zOld = zOut;
818       zOut = sqlite3_realloc(zOut, (int)nOut);
819       if( zOut==0 ){
820         sqlite3_free(zOld);
821         return;
822       }
823       memcpy(&zOut[j], zRep, nRep);
824       j += nRep;
825       i += nPattern-1;
826     }
827   }
828   assert( j+nStr-i+1==nOut );
829   memcpy(&zOut[j], &zStr[i], nStr-i);
830   j += nStr - i;
831   assert( j<=nOut );
832   zOut[j] = 0;
833   sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
834 }
835 
836 /*
837 ** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
838 ** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
839 */
840 static void trimFunc(
841   sqlite3_context *context,
842   int argc,
843   sqlite3_value **argv
844 ){
845   const unsigned char *zIn;         /* Input string */
846   const unsigned char *zCharSet;    /* Set of characters to trim */
847   int nIn;                          /* Number of bytes in input */
848   int flags;                        /* 1: trimleft  2: trimright  3: trim */
849   int i;                            /* Loop counter */
850   unsigned char *aLen;              /* Length of each character in zCharSet */
851   const unsigned char **azChar;     /* Individual characters in zCharSet */
852   int nChar;                        /* Number of characters in zCharSet */
853 
854   if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
855     return;
856   }
857   zIn = sqlite3_value_text(argv[0]);
858   if( zIn==0 ) return;
859   nIn = sqlite3_value_bytes(argv[0]);
860   assert( zIn==sqlite3_value_text(argv[0]) );
861   if( argc==1 ){
862     static const unsigned char lenOne[] = { 1 };
863     static const unsigned char *azOne[] = { (u8*)" " };
864     nChar = 1;
865     aLen = (u8*)lenOne;
866     azChar = azOne;
867     zCharSet = 0;
868   }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
869     return;
870   }else{
871     const unsigned char *z;
872     for(z=zCharSet, nChar=0; *z; nChar++){
873       SQLITE_SKIP_UTF8(z);
874     }
875     if( nChar>0 ){
876       azChar = sqlite3_malloc( nChar*(sizeof(char*)+1) );
877       if( azChar==0 ){
878         return;
879       }
880       aLen = (unsigned char*)&azChar[nChar];
881       for(z=zCharSet, nChar=0; *z; nChar++){
882         azChar[nChar] = z;
883         SQLITE_SKIP_UTF8(z);
884         aLen[nChar] = z - azChar[nChar];
885       }
886     }
887   }
888   if( nChar>0 ){
889     flags = (int)sqlite3_user_data(context);
890     if( flags & 1 ){
891       while( nIn>0 ){
892         int len;
893         for(i=0; i<nChar; i++){
894           len = aLen[i];
895           if( memcmp(zIn, azChar[i], len)==0 ) break;
896         }
897         if( i>=nChar ) break;
898         zIn += len;
899         nIn -= len;
900       }
901     }
902     if( flags & 2 ){
903       while( nIn>0 ){
904         int len;
905         for(i=0; i<nChar; i++){
906           len = aLen[i];
907           if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
908         }
909         if( i>=nChar ) break;
910         nIn -= len;
911       }
912     }
913     if( zCharSet ){
914       sqlite3_free(azChar);
915     }
916   }
917   sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
918 }
919 
920 #ifdef SQLITE_SOUNDEX
921 /*
922 ** Compute the soundex encoding of a word.
923 */
924 static void soundexFunc(
925   sqlite3_context *context,
926   int argc,
927   sqlite3_value **argv
928 ){
929   char zResult[8];
930   const u8 *zIn;
931   int i, j;
932   static const unsigned char iCode[] = {
933     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
934     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
935     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
936     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
937     0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
938     1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
939     0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
940     1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
941   };
942   assert( argc==1 );
943   zIn = (u8*)sqlite3_value_text(argv[0]);
944   if( zIn==0 ) zIn = (u8*)"";
945   for(i=0; zIn[i] && !isalpha(zIn[i]); i++){}
946   if( zIn[i] ){
947     u8 prevcode = iCode[zIn[i]&0x7f];
948     zResult[0] = toupper(zIn[i]);
949     for(j=1; j<4 && zIn[i]; i++){
950       int code = iCode[zIn[i]&0x7f];
951       if( code>0 ){
952         if( code!=prevcode ){
953           prevcode = code;
954           zResult[j++] = code + '0';
955         }
956       }else{
957         prevcode = 0;
958       }
959     }
960     while( j<4 ){
961       zResult[j++] = '0';
962     }
963     zResult[j] = 0;
964     sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
965   }else{
966     sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
967   }
968 }
969 #endif
970 
971 #ifndef SQLITE_OMIT_LOAD_EXTENSION
972 /*
973 ** A function that loads a shared-library extension then returns NULL.
974 */
975 static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
976   const char *zFile = (const char *)sqlite3_value_text(argv[0]);
977   const char *zProc;
978   sqlite3 *db = sqlite3_user_data(context);
979   char *zErrMsg = 0;
980 
981   if( argc==2 ){
982     zProc = (const char *)sqlite3_value_text(argv[1]);
983   }else{
984     zProc = 0;
985   }
986   if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
987     sqlite3_result_error(context, zErrMsg, -1);
988     sqlite3_free(zErrMsg);
989   }
990 }
991 #endif
992 
993 #ifdef SQLITE_TEST
994 /*
995 ** This function generates a string of random characters.  Used for
996 ** generating test data.
997 */
998 static void randStr(sqlite3_context *context, int argc, sqlite3_value **argv){
999   static const unsigned char zSrc[] =
1000      "abcdefghijklmnopqrstuvwxyz"
1001      "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
1002      "0123456789"
1003      ".-!,:*^+=_|?/<> ";
1004   int iMin, iMax, n, r, i;
1005   unsigned char zBuf[1000];
1006   if( argc>=1 ){
1007     iMin = sqlite3_value_int(argv[0]);
1008     if( iMin<0 ) iMin = 0;
1009     if( iMin>=sizeof(zBuf) ) iMin = sizeof(zBuf)-1;
1010   }else{
1011     iMin = 1;
1012   }
1013   if( argc>=2 ){
1014     iMax = sqlite3_value_int(argv[1]);
1015     if( iMax<iMin ) iMax = iMin;
1016     if( iMax>=sizeof(zBuf) ) iMax = sizeof(zBuf)-1;
1017   }else{
1018     iMax = 50;
1019   }
1020   n = iMin;
1021   if( iMax>iMin ){
1022     sqlite3Randomness(sizeof(r), &r);
1023     r &= 0x7fffffff;
1024     n += r%(iMax + 1 - iMin);
1025   }
1026   assert( n<sizeof(zBuf) );
1027   sqlite3Randomness(n, zBuf);
1028   for(i=0; i<n; i++){
1029     zBuf[i] = zSrc[zBuf[i]%(sizeof(zSrc)-1)];
1030   }
1031   zBuf[n] = 0;
1032   sqlite3_result_text(context, (char*)zBuf, n, SQLITE_TRANSIENT);
1033 }
1034 #endif /* SQLITE_TEST */
1035 
1036 #ifdef SQLITE_TEST
1037 /*
1038 ** The following two SQL functions are used to test returning a text
1039 ** result with a destructor. Function 'test_destructor' takes one argument
1040 ** and returns the same argument interpreted as TEXT. A destructor is
1041 ** passed with the sqlite3_result_text() call.
1042 **
1043 ** SQL function 'test_destructor_count' returns the number of outstanding
1044 ** allocations made by 'test_destructor';
1045 **
1046 ** WARNING: Not threadsafe.
1047 */
1048 static int test_destructor_count_var = 0;
1049 static void destructor(void *p){
1050   char *zVal = (char *)p;
1051   assert(zVal);
1052   zVal--;
1053   sqlite3_free(zVal);
1054   test_destructor_count_var--;
1055 }
1056 static void test_destructor(
1057   sqlite3_context *pCtx,
1058   int nArg,
1059   sqlite3_value **argv
1060 ){
1061   char *zVal;
1062   int len;
1063   sqlite3 *db = sqlite3_user_data(pCtx);
1064 
1065   test_destructor_count_var++;
1066   assert( nArg==1 );
1067   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
1068   len = sqlite3ValueBytes(argv[0], ENC(db));
1069   zVal = sqlite3MallocZero(len+3);
1070   zVal[len] = 0;
1071   zVal[len-1] = 0;
1072   assert( zVal );
1073   zVal++;
1074   memcpy(zVal, sqlite3ValueText(argv[0], ENC(db)), len);
1075   if( ENC(db)==SQLITE_UTF8 ){
1076     sqlite3_result_text(pCtx, zVal, -1, destructor);
1077 #ifndef SQLITE_OMIT_UTF16
1078   }else if( ENC(db)==SQLITE_UTF16LE ){
1079     sqlite3_result_text16le(pCtx, zVal, -1, destructor);
1080   }else{
1081     sqlite3_result_text16be(pCtx, zVal, -1, destructor);
1082 #endif /* SQLITE_OMIT_UTF16 */
1083   }
1084 }
1085 static void test_destructor_count(
1086   sqlite3_context *pCtx,
1087   int nArg,
1088   sqlite3_value **argv
1089 ){
1090   sqlite3_result_int(pCtx, test_destructor_count_var);
1091 }
1092 #endif /* SQLITE_TEST */
1093 
1094 #ifdef SQLITE_TEST
1095 /*
1096 ** Routines for testing the sqlite3_get_auxdata() and sqlite3_set_auxdata()
1097 ** interface.
1098 **
1099 ** The test_auxdata() SQL function attempts to register each of its arguments
1100 ** as auxiliary data.  If there are no prior registrations of aux data for
1101 ** that argument (meaning the argument is not a constant or this is its first
1102 ** call) then the result for that argument is 0.  If there is a prior
1103 ** registration, the result for that argument is 1.  The overall result
1104 ** is the individual argument results separated by spaces.
1105 */
1106 static void free_test_auxdata(void *p) {sqlite3_free(p);}
1107 static void test_auxdata(
1108   sqlite3_context *pCtx,
1109   int nArg,
1110   sqlite3_value **argv
1111 ){
1112   int i;
1113   char *zRet = sqlite3MallocZero(nArg*2);
1114   if( !zRet ) return;
1115   for(i=0; i<nArg; i++){
1116     char const *z = (char*)sqlite3_value_text(argv[i]);
1117     if( z ){
1118       char *zAux = sqlite3_get_auxdata(pCtx, i);
1119       if( zAux ){
1120         zRet[i*2] = '1';
1121         if( strcmp(zAux, z) ){
1122           free_test_auxdata((void *)zRet);
1123           sqlite3_result_error(pCtx, "Auxilary data corruption", -1);
1124           return;
1125         }
1126       }else{
1127         zRet[i*2] = '0';
1128         zAux = sqlite3StrDup(z);
1129         sqlite3_set_auxdata(pCtx, i, zAux, free_test_auxdata);
1130       }
1131       zRet[i*2+1] = ' ';
1132     }
1133   }
1134   sqlite3_result_text(pCtx, zRet, 2*nArg-1, free_test_auxdata);
1135 }
1136 #endif /* SQLITE_TEST */
1137 
1138 #ifdef SQLITE_TEST
1139 /*
1140 ** A function to test error reporting from user functions. This function
1141 ** returns a copy of it's first argument as an error.
1142 */
1143 static void test_error(
1144   sqlite3_context *pCtx,
1145   int nArg,
1146   sqlite3_value **argv
1147 ){
1148   sqlite3_result_error(pCtx, (char*)sqlite3_value_text(argv[0]), 0);
1149 }
1150 #endif /* SQLITE_TEST */
1151 
1152 /*
1153 ** An instance of the following structure holds the context of a
1154 ** sum() or avg() aggregate computation.
1155 */
1156 typedef struct SumCtx SumCtx;
1157 struct SumCtx {
1158   double rSum;      /* Floating point sum */
1159   i64 iSum;         /* Integer sum */
1160   i64 cnt;          /* Number of elements summed */
1161   u8 overflow;      /* True if integer overflow seen */
1162   u8 approx;        /* True if non-integer value was input to the sum */
1163 };
1164 
1165 /*
1166 ** Routines used to compute the sum, average, and total.
1167 **
1168 ** The SUM() function follows the (broken) SQL standard which means
1169 ** that it returns NULL if it sums over no inputs.  TOTAL returns
1170 ** 0.0 in that case.  In addition, TOTAL always returns a float where
1171 ** SUM might return an integer if it never encounters a floating point
1172 ** value.  TOTAL never fails, but SUM might through an exception if
1173 ** it overflows an integer.
1174 */
1175 static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
1176   SumCtx *p;
1177   int type;
1178   assert( argc==1 );
1179   p = sqlite3_aggregate_context(context, sizeof(*p));
1180   type = sqlite3_value_numeric_type(argv[0]);
1181   if( p && type!=SQLITE_NULL ){
1182     p->cnt++;
1183     if( type==SQLITE_INTEGER ){
1184       i64 v = sqlite3_value_int64(argv[0]);
1185       p->rSum += v;
1186       if( (p->approx|p->overflow)==0 ){
1187         i64 iNewSum = p->iSum + v;
1188         int s1 = p->iSum >> (sizeof(i64)*8-1);
1189         int s2 = v       >> (sizeof(i64)*8-1);
1190         int s3 = iNewSum >> (sizeof(i64)*8-1);
1191         p->overflow = (s1&s2&~s3) | (~s1&~s2&s3);
1192         p->iSum = iNewSum;
1193       }
1194     }else{
1195       p->rSum += sqlite3_value_double(argv[0]);
1196       p->approx = 1;
1197     }
1198   }
1199 }
1200 static void sumFinalize(sqlite3_context *context){
1201   SumCtx *p;
1202   p = sqlite3_aggregate_context(context, 0);
1203   if( p && p->cnt>0 ){
1204     if( p->overflow ){
1205       sqlite3_result_error(context,"integer overflow",-1);
1206     }else if( p->approx ){
1207       sqlite3_result_double(context, p->rSum);
1208     }else{
1209       sqlite3_result_int64(context, p->iSum);
1210     }
1211   }
1212 }
1213 static void avgFinalize(sqlite3_context *context){
1214   SumCtx *p;
1215   p = sqlite3_aggregate_context(context, 0);
1216   if( p && p->cnt>0 ){
1217     sqlite3_result_double(context, p->rSum/(double)p->cnt);
1218   }
1219 }
1220 static void totalFinalize(sqlite3_context *context){
1221   SumCtx *p;
1222   p = sqlite3_aggregate_context(context, 0);
1223   sqlite3_result_double(context, p ? p->rSum : 0.0);
1224 }
1225 
1226 /*
1227 ** The following structure keeps track of state information for the
1228 ** count() aggregate function.
1229 */
1230 typedef struct CountCtx CountCtx;
1231 struct CountCtx {
1232   i64 n;
1233 };
1234 
1235 /*
1236 ** Routines to implement the count() aggregate function.
1237 */
1238 static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
1239   CountCtx *p;
1240   p = sqlite3_aggregate_context(context, sizeof(*p));
1241   if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
1242     p->n++;
1243   }
1244 }
1245 static void countFinalize(sqlite3_context *context){
1246   CountCtx *p;
1247   p = sqlite3_aggregate_context(context, 0);
1248   sqlite3_result_int64(context, p ? p->n : 0);
1249 }
1250 
1251 /*
1252 ** Routines to implement min() and max() aggregate functions.
1253 */
1254 static void minmaxStep(sqlite3_context *context, int argc, sqlite3_value **argv){
1255   Mem *pArg  = (Mem *)argv[0];
1256   Mem *pBest;
1257 
1258   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
1259   pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
1260   if( !pBest ) return;
1261 
1262   if( pBest->flags ){
1263     int max;
1264     int cmp;
1265     CollSeq *pColl = sqlite3GetFuncCollSeq(context);
1266     /* This step function is used for both the min() and max() aggregates,
1267     ** the only difference between the two being that the sense of the
1268     ** comparison is inverted. For the max() aggregate, the
1269     ** sqlite3_user_data() function returns (void *)-1. For min() it
1270     ** returns (void *)db, where db is the sqlite3* database pointer.
1271     ** Therefore the next statement sets variable 'max' to 1 for the max()
1272     ** aggregate, or 0 for min().
1273     */
1274     max = sqlite3_user_data(context)!=0;
1275     cmp = sqlite3MemCompare(pBest, pArg, pColl);
1276     if( (max && cmp<0) || (!max && cmp>0) ){
1277       sqlite3VdbeMemCopy(pBest, pArg);
1278     }
1279   }else{
1280     sqlite3VdbeMemCopy(pBest, pArg);
1281   }
1282 }
1283 static void minMaxFinalize(sqlite3_context *context){
1284   sqlite3_value *pRes;
1285   pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1286   if( pRes ){
1287     if( pRes->flags ){
1288       sqlite3_result_value(context, pRes);
1289     }
1290     sqlite3VdbeMemRelease(pRes);
1291   }
1292 }
1293 
1294 
1295 /*
1296 ** This function registered all of the above C functions as SQL
1297 ** functions.  This should be the only routine in this file with
1298 ** external linkage.
1299 */
1300 void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
1301   static const struct {
1302      char *zName;
1303      signed char nArg;
1304      u8 argType;           /* ff: db   1: 0, 2: 1, 3: 2,...  N:  N-1. */
1305      u8 eTextRep;          /* 1: UTF-16.  0: UTF-8 */
1306      u8 needCollSeq;
1307      void (*xFunc)(sqlite3_context*,int,sqlite3_value **);
1308   } aFuncs[] = {
1309     { "min",               -1, 0, SQLITE_UTF8,    1, minmaxFunc },
1310     { "min",                0, 0, SQLITE_UTF8,    1, 0          },
1311     { "max",               -1, 1, SQLITE_UTF8,    1, minmaxFunc },
1312     { "max",                0, 1, SQLITE_UTF8,    1, 0          },
1313     { "typeof",             1, 0, SQLITE_UTF8,    0, typeofFunc },
1314     { "length",             1, 0, SQLITE_UTF8,    0, lengthFunc },
1315     { "substr",             3, 0, SQLITE_UTF8,    0, substrFunc },
1316     { "abs",                1, 0, SQLITE_UTF8,    0, absFunc    },
1317     { "round",              1, 0, SQLITE_UTF8,    0, roundFunc  },
1318     { "round",              2, 0, SQLITE_UTF8,    0, roundFunc  },
1319     { "upper",              1, 0, SQLITE_UTF8,    0, upperFunc  },
1320     { "lower",              1, 0, SQLITE_UTF8,    0, lowerFunc  },
1321     { "coalesce",          -1, 0, SQLITE_UTF8,    0, ifnullFunc },
1322     { "coalesce",           0, 0, SQLITE_UTF8,    0, 0          },
1323     { "coalesce",           1, 0, SQLITE_UTF8,    0, 0          },
1324     { "hex",                1, 0, SQLITE_UTF8,    0, hexFunc    },
1325     { "ifnull",             2, 0, SQLITE_UTF8,    1, ifnullFunc },
1326     { "random",            -1, 0, SQLITE_UTF8,    0, randomFunc },
1327     { "randomblob",         1, 0, SQLITE_UTF8,    0, randomBlob },
1328     { "nullif",             2, 0, SQLITE_UTF8,    1, nullifFunc },
1329     { "sqlite_version",     0, 0, SQLITE_UTF8,    0, versionFunc},
1330     { "quote",              1, 0, SQLITE_UTF8,    0, quoteFunc  },
1331     { "last_insert_rowid",  0, 0xff, SQLITE_UTF8, 0, last_insert_rowid },
1332     { "changes",            0, 0xff, SQLITE_UTF8, 0, changes           },
1333     { "total_changes",      0, 0xff, SQLITE_UTF8, 0, total_changes     },
1334     { "replace",            3, 0, SQLITE_UTF8,    0, replaceFunc       },
1335     { "ltrim",              1, 1, SQLITE_UTF8,    0, trimFunc          },
1336     { "ltrim",              2, 1, SQLITE_UTF8,    0, trimFunc          },
1337     { "rtrim",              1, 2, SQLITE_UTF8,    0, trimFunc          },
1338     { "rtrim",              2, 2, SQLITE_UTF8,    0, trimFunc          },
1339     { "trim",               1, 3, SQLITE_UTF8,    0, trimFunc          },
1340     { "trim",               2, 3, SQLITE_UTF8,    0, trimFunc          },
1341     { "zeroblob",           1, 0, SQLITE_UTF8,    0, zeroblobFunc      },
1342 #ifdef SQLITE_SOUNDEX
1343     { "soundex",            1, 0, SQLITE_UTF8,    0, soundexFunc},
1344 #endif
1345 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1346     { "load_extension",     1, 0xff, SQLITE_UTF8, 0, loadExt },
1347     { "load_extension",     2, 0xff, SQLITE_UTF8, 0, loadExt },
1348 #endif
1349 #ifdef SQLITE_TEST
1350     { "randstr",               2, 0,    SQLITE_UTF8, 0, randStr    },
1351     { "test_destructor",       1, 0xff, SQLITE_UTF8, 0, test_destructor},
1352     { "test_destructor_count", 0, 0,    SQLITE_UTF8, 0, test_destructor_count},
1353     { "test_auxdata",         -1, 0,    SQLITE_UTF8, 0, test_auxdata},
1354     { "test_error",            1, 0,    SQLITE_UTF8, 0, test_error},
1355 #endif
1356   };
1357   static const struct {
1358     char *zName;
1359     signed char nArg;
1360     u8 argType;
1361     u8 needCollSeq;
1362     void (*xStep)(sqlite3_context*,int,sqlite3_value**);
1363     void (*xFinalize)(sqlite3_context*);
1364   } aAggs[] = {
1365     { "min",    1, 0, 1, minmaxStep,   minMaxFinalize },
1366     { "max",    1, 1, 1, minmaxStep,   minMaxFinalize },
1367     { "sum",    1, 0, 0, sumStep,      sumFinalize    },
1368     { "total",  1, 0, 0, sumStep,      totalFinalize    },
1369     { "avg",    1, 0, 0, sumStep,      avgFinalize    },
1370     { "count",  0, 0, 0, countStep,    countFinalize  },
1371     { "count",  1, 0, 0, countStep,    countFinalize  },
1372   };
1373   int i;
1374 
1375   for(i=0; i<sizeof(aFuncs)/sizeof(aFuncs[0]); i++){
1376     void *pArg;
1377     u8 argType = aFuncs[i].argType;
1378     if( argType==0xff ){
1379       pArg = db;
1380     }else{
1381       pArg = (void*)(int)argType;
1382     }
1383     sqlite3CreateFunc(db, aFuncs[i].zName, aFuncs[i].nArg,
1384         aFuncs[i].eTextRep, pArg, aFuncs[i].xFunc, 0, 0);
1385     if( aFuncs[i].needCollSeq ){
1386       FuncDef *pFunc = sqlite3FindFunction(db, aFuncs[i].zName,
1387           strlen(aFuncs[i].zName), aFuncs[i].nArg, aFuncs[i].eTextRep, 0);
1388       if( pFunc && aFuncs[i].needCollSeq ){
1389         pFunc->needCollSeq = 1;
1390       }
1391     }
1392   }
1393 #ifndef SQLITE_OMIT_ALTERTABLE
1394   sqlite3AlterFunctions(db);
1395 #endif
1396 #ifndef SQLITE_OMIT_PARSER
1397   sqlite3AttachFunctions(db);
1398 #endif
1399   for(i=0; i<sizeof(aAggs)/sizeof(aAggs[0]); i++){
1400     void *pArg = (void*)(int)aAggs[i].argType;
1401     sqlite3CreateFunc(db, aAggs[i].zName, aAggs[i].nArg, SQLITE_UTF8,
1402         pArg, 0, aAggs[i].xStep, aAggs[i].xFinalize);
1403     if( aAggs[i].needCollSeq ){
1404       FuncDef *pFunc = sqlite3FindFunction( db, aAggs[i].zName,
1405           strlen(aAggs[i].zName), aAggs[i].nArg, SQLITE_UTF8, 0);
1406       if( pFunc && aAggs[i].needCollSeq ){
1407         pFunc->needCollSeq = 1;
1408       }
1409     }
1410   }
1411   sqlite3RegisterDateTimeFunctions(db);
1412   if( !db->mallocFailed ){
1413     int rc = sqlite3_overload_function(db, "MATCH", 2);
1414     assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1415     if( rc==SQLITE_NOMEM ){
1416       db->mallocFailed = 1;
1417     }
1418   }
1419 #ifdef SQLITE_SSE
1420   (void)sqlite3SseFunctions(db);
1421 #endif
1422 #ifdef SQLITE_CASE_SENSITIVE_LIKE
1423   sqlite3RegisterLikeFunctions(db, 1);
1424 #else
1425   sqlite3RegisterLikeFunctions(db, 0);
1426 #endif
1427 }
1428 
1429 /*
1430 ** Set the LIKEOPT flag on the 2-argument function with the given name.
1431 */
1432 static void setLikeOptFlag(sqlite3 *db, const char *zName, int flagVal){
1433   FuncDef *pDef;
1434   pDef = sqlite3FindFunction(db, zName, strlen(zName), 2, SQLITE_UTF8, 0);
1435   if( pDef ){
1436     pDef->flags = flagVal;
1437   }
1438 }
1439 
1440 /*
1441 ** Register the built-in LIKE and GLOB functions.  The caseSensitive
1442 ** parameter determines whether or not the LIKE operator is case
1443 ** sensitive.  GLOB is always case sensitive.
1444 */
1445 void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1446   struct compareInfo *pInfo;
1447   if( caseSensitive ){
1448     pInfo = (struct compareInfo*)&likeInfoAlt;
1449   }else{
1450     pInfo = (struct compareInfo*)&likeInfoNorm;
1451   }
1452   sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0);
1453   sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0);
1454   sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8,
1455       (struct compareInfo*)&globInfo, likeFunc, 0,0);
1456   setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
1457   setLikeOptFlag(db, "like",
1458       caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
1459 }
1460 
1461 /*
1462 ** pExpr points to an expression which implements a function.  If
1463 ** it is appropriate to apply the LIKE optimization to that function
1464 ** then set aWc[0] through aWc[2] to the wildcard characters and
1465 ** return TRUE.  If the function is not a LIKE-style function then
1466 ** return FALSE.
1467 */
1468 int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
1469   FuncDef *pDef;
1470   if( pExpr->op!=TK_FUNCTION || !pExpr->pList ){
1471     return 0;
1472   }
1473   if( pExpr->pList->nExpr!=2 ){
1474     return 0;
1475   }
1476   pDef = sqlite3FindFunction(db, (char*)pExpr->token.z, pExpr->token.n, 2,
1477                              SQLITE_UTF8, 0);
1478   if( pDef==0 || (pDef->flags & SQLITE_FUNC_LIKE)==0 ){
1479     return 0;
1480   }
1481 
1482   /* The memcpy() statement assumes that the wildcard characters are
1483   ** the first three statements in the compareInfo structure.  The
1484   ** asserts() that follow verify that assumption
1485   */
1486   memcpy(aWc, pDef->pUserData, 3);
1487   assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1488   assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1489   assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
1490   *pIsNocase = (pDef->flags & SQLITE_FUNC_CASE)==0;
1491   return 1;
1492 }
1493