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