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