xref: /sqlite-3.40.0/src/func.c (revision 4dcbdbff)
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.102 2005/07/09 02:38:06 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 static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
30   return context->pColl;
31 }
32 
33 /*
34 ** Implementation of the non-aggregate min() and max() functions
35 */
36 static void minmaxFunc(
37   sqlite3_context *context,
38   int argc,
39   sqlite3_value **argv
40 ){
41   int i;
42   int mask;    /* 0 for min() or 0xffffffff for max() */
43   int iBest;
44   CollSeq *pColl;
45 
46   if( argc==0 ) return;
47   mask = sqlite3_user_data(context)==0 ? 0 : -1;
48   pColl = sqlite3GetFuncCollSeq(context);
49   assert( pColl );
50   assert( mask==-1 || mask==0 );
51   iBest = 0;
52   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
53   for(i=1; i<argc; i++){
54     if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
55     if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
56       iBest = i;
57     }
58   }
59   sqlite3_result_value(context, argv[iBest]);
60 }
61 
62 /*
63 ** Return the type of the argument.
64 */
65 static void typeofFunc(
66   sqlite3_context *context,
67   int argc,
68   sqlite3_value **argv
69 ){
70   const char *z = 0;
71   switch( sqlite3_value_type(argv[0]) ){
72     case SQLITE_NULL:    z = "null";    break;
73     case SQLITE_INTEGER: z = "integer"; break;
74     case SQLITE_TEXT:    z = "text";    break;
75     case SQLITE_FLOAT:   z = "real";    break;
76     case SQLITE_BLOB:    z = "blob";    break;
77   }
78   sqlite3_result_text(context, z, -1, SQLITE_STATIC);
79 }
80 
81 
82 /*
83 ** Implementation of the length() function
84 */
85 static void lengthFunc(
86   sqlite3_context *context,
87   int argc,
88   sqlite3_value **argv
89 ){
90   int len;
91 
92   assert( argc==1 );
93   switch( sqlite3_value_type(argv[0]) ){
94     case SQLITE_BLOB:
95     case SQLITE_INTEGER:
96     case SQLITE_FLOAT: {
97       sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
98       break;
99     }
100     case SQLITE_TEXT: {
101       const char *z = sqlite3_value_text(argv[0]);
102       for(len=0; *z; z++){ if( (0xc0&*z)!=0x80 ) len++; }
103       sqlite3_result_int(context, len);
104       break;
105     }
106     default: {
107       sqlite3_result_null(context);
108       break;
109     }
110   }
111 }
112 
113 /*
114 ** Implementation of the abs() function
115 */
116 static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
117   assert( argc==1 );
118   switch( sqlite3_value_type(argv[0]) ){
119     case SQLITE_INTEGER: {
120       i64 iVal = sqlite3_value_int64(argv[0]);
121       if( iVal<0 ) iVal = iVal * -1;
122       sqlite3_result_int64(context, iVal);
123       break;
124     }
125     case SQLITE_NULL: {
126       sqlite3_result_null(context);
127       break;
128     }
129     default: {
130       double rVal = sqlite3_value_double(argv[0]);
131       if( rVal<0 ) rVal = rVal * -1.0;
132       sqlite3_result_double(context, rVal);
133       break;
134     }
135   }
136 }
137 
138 /*
139 ** Implementation of the substr() function
140 */
141 static void substrFunc(
142   sqlite3_context *context,
143   int argc,
144   sqlite3_value **argv
145 ){
146   const char *z;
147   const char *z2;
148   int i;
149   int p1, p2, len;
150 
151   assert( argc==3 );
152   z = sqlite3_value_text(argv[0]);
153   if( z==0 ) return;
154   p1 = sqlite3_value_int(argv[1]);
155   p2 = sqlite3_value_int(argv[2]);
156   for(len=0, z2=z; *z2; z2++){ if( (0xc0&*z2)!=0x80 ) len++; }
157   if( p1<0 ){
158     p1 += len;
159     if( p1<0 ){
160       p2 += p1;
161       p1 = 0;
162     }
163   }else if( p1>0 ){
164     p1--;
165   }
166   if( p1+p2>len ){
167     p2 = len-p1;
168   }
169   for(i=0; i<p1 && z[i]; i++){
170     if( (z[i]&0xc0)==0x80 ) p1++;
171   }
172   while( z[i] && (z[i]&0xc0)==0x80 ){ i++; p1++; }
173   for(; i<p1+p2 && z[i]; i++){
174     if( (z[i]&0xc0)==0x80 ) p2++;
175   }
176   while( z[i] && (z[i]&0xc0)==0x80 ){ i++; p2++; }
177   if( p2<0 ) p2 = 0;
178   sqlite3_result_text(context, &z[p1], p2, SQLITE_TRANSIENT);
179 }
180 
181 /*
182 ** Implementation of the round() function
183 */
184 static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
185   int n = 0;
186   double r;
187   char zBuf[100];
188   assert( argc==1 || argc==2 );
189   if( argc==2 ){
190     if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
191     n = sqlite3_value_int(argv[1]);
192     if( n>30 ) n = 30;
193     if( n<0 ) n = 0;
194   }
195   if( SQLITE_NULL==sqlite3_value_type(argv[0]) ) return;
196   r = sqlite3_value_double(argv[0]);
197   sqlite3_snprintf(sizeof(zBuf),zBuf,"%.*f",n,r);
198   sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
199 }
200 
201 /*
202 ** Implementation of the upper() and lower() SQL functions.
203 */
204 static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
205   unsigned char *z;
206   int i;
207   if( argc<1 || SQLITE_NULL==sqlite3_value_type(argv[0]) ) return;
208   z = sqliteMalloc(sqlite3_value_bytes(argv[0])+1);
209   if( z==0 ) return;
210   strcpy(z, sqlite3_value_text(argv[0]));
211   for(i=0; z[i]; i++){
212     z[i] = toupper(z[i]);
213   }
214   sqlite3_result_text(context, z, -1, SQLITE_TRANSIENT);
215   sqliteFree(z);
216 }
217 static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
218   unsigned char *z;
219   int i;
220   if( argc<1 || SQLITE_NULL==sqlite3_value_type(argv[0]) ) return;
221   z = sqliteMalloc(sqlite3_value_bytes(argv[0])+1);
222   if( z==0 ) return;
223   strcpy(z, sqlite3_value_text(argv[0]));
224   for(i=0; z[i]; i++){
225     z[i] = tolower(z[i]);
226   }
227   sqlite3_result_text(context, z, -1, SQLITE_TRANSIENT);
228   sqliteFree(z);
229 }
230 
231 /*
232 ** Implementation of the IFNULL(), NVL(), and COALESCE() functions.
233 ** All three do the same thing.  They return the first non-NULL
234 ** argument.
235 */
236 static void ifnullFunc(
237   sqlite3_context *context,
238   int argc,
239   sqlite3_value **argv
240 ){
241   int i;
242   for(i=0; i<argc; i++){
243     if( SQLITE_NULL!=sqlite3_value_type(argv[i]) ){
244       sqlite3_result_value(context, argv[i]);
245       break;
246     }
247   }
248 }
249 
250 /*
251 ** Implementation of random().  Return a random integer.
252 */
253 static void randomFunc(
254   sqlite3_context *context,
255   int argc,
256   sqlite3_value **argv
257 ){
258   int r;
259   sqlite3Randomness(sizeof(r), &r);
260   sqlite3_result_int(context, r);
261 }
262 
263 /*
264 ** Implementation of the last_insert_rowid() SQL function.  The return
265 ** value is the same as the sqlite3_last_insert_rowid() API function.
266 */
267 static void last_insert_rowid(
268   sqlite3_context *context,
269   int arg,
270   sqlite3_value **argv
271 ){
272   sqlite3 *db = sqlite3_user_data(context);
273   sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
274 }
275 
276 /*
277 ** Implementation of the changes() SQL function.  The return value is the
278 ** same as the sqlite3_changes() API function.
279 */
280 static void changes(
281   sqlite3_context *context,
282   int arg,
283   sqlite3_value **argv
284 ){
285   sqlite3 *db = sqlite3_user_data(context);
286   sqlite3_result_int(context, sqlite3_changes(db));
287 }
288 
289 /*
290 ** Implementation of the total_changes() SQL function.  The return value is
291 ** the same as the sqlite3_total_changes() API function.
292 */
293 static void total_changes(
294   sqlite3_context *context,
295   int arg,
296   sqlite3_value **argv
297 ){
298   sqlite3 *db = sqlite3_user_data(context);
299   sqlite3_result_int(context, sqlite3_total_changes(db));
300 }
301 
302 /*
303 ** A structure defining how to do GLOB-style comparisons.
304 */
305 struct compareInfo {
306   u8 matchAll;
307   u8 matchOne;
308   u8 matchSet;
309   u8 noCase;
310 };
311 static const struct compareInfo globInfo = { '*', '?', '[', 0 };
312 #ifndef SQLITE_CASE_SENSITIVE_LIKE
313   /* The correct SQL-92 behavior is for the LIKE operator to ignore
314   ** case.  Thus  'a' LIKE 'A' would be true. */
315   static const struct compareInfo likeInfo = { '%', '_',   0, 1 };
316 #else
317   /* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
318   ** is case sensitive causing 'a' LIKE 'A' to be false */
319   static const struct compareInfo likeInfo = { '%', '_',   0, 0 };
320 #endif
321 
322 /*
323 ** X is a pointer to the first byte of a UTF-8 character.  Increment
324 ** X so that it points to the next character.  This only works right
325 ** if X points to a well-formed UTF-8 string.
326 */
327 #define sqliteNextChar(X)  while( (0xc0&*++(X))==0x80 ){}
328 #define sqliteCharVal(X)   sqlite3ReadUtf8(X)
329 
330 
331 /*
332 ** Compare two UTF-8 strings for equality where the first string can
333 ** potentially be a "glob" expression.  Return true (1) if they
334 ** are the same and false (0) if they are different.
335 **
336 ** Globbing rules:
337 **
338 **      '*'       Matches any sequence of zero or more characters.
339 **
340 **      '?'       Matches exactly one character.
341 **
342 **     [...]      Matches one character from the enclosed list of
343 **                characters.
344 **
345 **     [^...]     Matches one character not in the enclosed list.
346 **
347 ** With the [...] and [^...] matching, a ']' character can be included
348 ** in the list by making it the first character after '[' or '^'.  A
349 ** range of characters can be specified using '-'.  Example:
350 ** "[a-z]" matches any single lower-case letter.  To match a '-', make
351 ** it the last character in the list.
352 **
353 ** This routine is usually quick, but can be N**2 in the worst case.
354 **
355 ** Hints: to match '*' or '?', put them in "[]".  Like this:
356 **
357 **         abc[*]xyz        Matches "abc*xyz" only
358 */
359 static int patternCompare(
360   const u8 *zPattern,              /* The glob pattern */
361   const u8 *zString,               /* The string to compare against the glob */
362   const struct compareInfo *pInfo, /* Information about how to do the compare */
363   const int esc                    /* The escape character */
364 ){
365   register int c;
366   int invert;
367   int seen;
368   int c2;
369   u8 matchOne = pInfo->matchOne;
370   u8 matchAll = pInfo->matchAll;
371   u8 matchSet = pInfo->matchSet;
372   u8 noCase = pInfo->noCase;
373   int prevEscape = 0;     /* True if the previous character was 'escape' */
374 
375   while( (c = *zPattern)!=0 ){
376     if( !prevEscape && c==matchAll ){
377       while( (c=zPattern[1]) == matchAll || c == matchOne ){
378         if( c==matchOne ){
379           if( *zString==0 ) return 0;
380           sqliteNextChar(zString);
381         }
382         zPattern++;
383       }
384       if( c && esc && sqlite3ReadUtf8(&zPattern[1])==esc ){
385         u8 const *zTemp = &zPattern[1];
386         sqliteNextChar(zTemp);
387         c = *zTemp;
388       }
389       if( c==0 ) return 1;
390       if( c==matchSet ){
391         assert( esc==0 );   /* This is GLOB, not LIKE */
392         while( *zString && patternCompare(&zPattern[1],zString,pInfo,esc)==0 ){
393           sqliteNextChar(zString);
394         }
395         return *zString!=0;
396       }else{
397         while( (c2 = *zString)!=0 ){
398           if( noCase ){
399             c2 = sqlite3UpperToLower[c2];
400             c = sqlite3UpperToLower[c];
401             while( c2 != 0 && c2 != c ){ c2 = sqlite3UpperToLower[*++zString]; }
402           }else{
403             while( c2 != 0 && c2 != c ){ c2 = *++zString; }
404           }
405           if( c2==0 ) return 0;
406           if( patternCompare(&zPattern[1],zString,pInfo,esc) ) return 1;
407           sqliteNextChar(zString);
408         }
409         return 0;
410       }
411     }else if( !prevEscape && c==matchOne ){
412       if( *zString==0 ) return 0;
413       sqliteNextChar(zString);
414       zPattern++;
415     }else if( c==matchSet ){
416       int prior_c = 0;
417       assert( esc==0 );    /* This only occurs for GLOB, not LIKE */
418       seen = 0;
419       invert = 0;
420       c = sqliteCharVal(zString);
421       if( c==0 ) return 0;
422       c2 = *++zPattern;
423       if( c2=='^' ){ invert = 1; c2 = *++zPattern; }
424       if( c2==']' ){
425         if( c==']' ) seen = 1;
426         c2 = *++zPattern;
427       }
428       while( (c2 = sqliteCharVal(zPattern))!=0 && c2!=']' ){
429         if( c2=='-' && zPattern[1]!=']' && zPattern[1]!=0 && prior_c>0 ){
430           zPattern++;
431           c2 = sqliteCharVal(zPattern);
432           if( c>=prior_c && c<=c2 ) seen = 1;
433           prior_c = 0;
434         }else if( c==c2 ){
435           seen = 1;
436           prior_c = c2;
437         }else{
438           prior_c = c2;
439         }
440         sqliteNextChar(zPattern);
441       }
442       if( c2==0 || (seen ^ invert)==0 ) return 0;
443       sqliteNextChar(zString);
444       zPattern++;
445     }else if( esc && !prevEscape && sqlite3ReadUtf8(zPattern)==esc){
446       prevEscape = 1;
447       sqliteNextChar(zPattern);
448     }else{
449       if( noCase ){
450         if( sqlite3UpperToLower[c] != sqlite3UpperToLower[*zString] ) return 0;
451       }else{
452         if( c != *zString ) return 0;
453       }
454       zPattern++;
455       zString++;
456       prevEscape = 0;
457     }
458   }
459   return *zString==0;
460 }
461 
462 
463 /*
464 ** Implementation of the like() SQL function.  This function implements
465 ** the build-in LIKE operator.  The first argument to the function is the
466 ** pattern and the second argument is the string.  So, the SQL statements:
467 **
468 **       A LIKE B
469 **
470 ** is implemented as like(B,A).
471 **
472 ** If the pointer retrieved by via a call to sqlite3_user_data() is
473 ** not NULL, then this function uses UTF-16. Otherwise UTF-8.
474 */
475 static void likeFunc(
476   sqlite3_context *context,
477   int argc,
478   sqlite3_value **argv
479 ){
480   const unsigned char *zA = sqlite3_value_text(argv[0]);
481   const unsigned char *zB = sqlite3_value_text(argv[1]);
482   int escape = 0;
483   if( argc==3 ){
484     /* The escape character string must consist of a single UTF-8 character.
485     ** Otherwise, return an error.
486     */
487     const unsigned char *zEsc = sqlite3_value_text(argv[2]);
488     if( sqlite3utf8CharLen(zEsc, -1)!=1 ){
489       sqlite3_result_error(context,
490           "ESCAPE expression must be a single character", -1);
491       return;
492     }
493     escape = sqlite3ReadUtf8(zEsc);
494   }
495   if( zA && zB ){
496     sqlite3_result_int(context, patternCompare(zA, zB, &likeInfo, escape));
497   }
498 }
499 
500 /*
501 ** Implementation of the glob() SQL function.  This function implements
502 ** the build-in GLOB operator.  The first argument to the function is the
503 ** string and the second argument is the pattern.  So, the SQL statements:
504 **
505 **       A GLOB B
506 **
507 ** is implemented as glob(B,A).
508 */
509 static void globFunc(sqlite3_context *context, int arg, sqlite3_value **argv){
510   const unsigned char *zA = sqlite3_value_text(argv[0]);
511   const unsigned char *zB = sqlite3_value_text(argv[1]);
512   if( zA && zB ){
513     sqlite3_result_int(context, patternCompare(zA, zB, &globInfo, 0));
514   }
515 }
516 
517 /*
518 ** Implementation of the NULLIF(x,y) function.  The result is the first
519 ** argument if the arguments are different.  The result is NULL if the
520 ** arguments are equal to each other.
521 */
522 static void nullifFunc(
523   sqlite3_context *context,
524   int argc,
525   sqlite3_value **argv
526 ){
527   CollSeq *pColl = sqlite3GetFuncCollSeq(context);
528   if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
529     sqlite3_result_value(context, argv[0]);
530   }
531 }
532 
533 /*
534 ** Implementation of the VERSION(*) function.  The result is the version
535 ** of the SQLite library that is running.
536 */
537 static void versionFunc(
538   sqlite3_context *context,
539   int argc,
540   sqlite3_value **argv
541 ){
542   sqlite3_result_text(context, sqlite3_version, -1, SQLITE_STATIC);
543 }
544 
545 
546 /*
547 ** EXPERIMENTAL - This is not an official function.  The interface may
548 ** change.  This function may disappear.  Do not write code that depends
549 ** on this function.
550 **
551 ** Implementation of the QUOTE() function.  This function takes a single
552 ** argument.  If the argument is numeric, the return value is the same as
553 ** the argument.  If the argument is NULL, the return value is the string
554 ** "NULL".  Otherwise, the argument is enclosed in single quotes with
555 ** single-quote escapes.
556 */
557 static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
558   if( argc<1 ) return;
559   switch( sqlite3_value_type(argv[0]) ){
560     case SQLITE_NULL: {
561       sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
562       break;
563     }
564     case SQLITE_INTEGER:
565     case SQLITE_FLOAT: {
566       sqlite3_result_value(context, argv[0]);
567       break;
568     }
569     case SQLITE_BLOB: {
570       static const char hexdigits[] = {
571         '0', '1', '2', '3', '4', '5', '6', '7',
572         '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
573       };
574       char *zText = 0;
575       int nBlob = sqlite3_value_bytes(argv[0]);
576       char const *zBlob = sqlite3_value_blob(argv[0]);
577 
578       zText = (char *)sqliteMalloc((2*nBlob)+4);
579       if( !zText ){
580         sqlite3_result_error(context, "out of memory", -1);
581       }else{
582         int i;
583         for(i=0; i<nBlob; i++){
584           zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
585           zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
586         }
587         zText[(nBlob*2)+2] = '\'';
588         zText[(nBlob*2)+3] = '\0';
589         zText[0] = 'X';
590         zText[1] = '\'';
591         sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
592         sqliteFree(zText);
593       }
594       break;
595     }
596     case SQLITE_TEXT: {
597       int i,j,n;
598       const char *zArg = sqlite3_value_text(argv[0]);
599       char *z;
600 
601       for(i=n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
602       z = sqliteMalloc( i+n+3 );
603       if( z==0 ) return;
604       z[0] = '\'';
605       for(i=0, j=1; zArg[i]; i++){
606         z[j++] = zArg[i];
607         if( zArg[i]=='\'' ){
608           z[j++] = '\'';
609         }
610       }
611       z[j++] = '\'';
612       z[j] = 0;
613       sqlite3_result_text(context, z, j, SQLITE_TRANSIENT);
614       sqliteFree(z);
615     }
616   }
617 }
618 
619 #ifdef SQLITE_SOUNDEX
620 /*
621 ** Compute the soundex encoding of a word.
622 */
623 static void soundexFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
624   char zResult[8];
625   const u8 *zIn;
626   int i, j;
627   static const unsigned char iCode[] = {
628     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
629     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
630     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
631     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
632     0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
633     1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
634     0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
635     1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
636   };
637   assert( argc==1 );
638   zIn = (u8*)sqlite3_value_text(argv[0]);
639   for(i=0; zIn[i] && !isalpha(zIn[i]); i++){}
640   if( zIn[i] ){
641     zResult[0] = toupper(zIn[i]);
642     for(j=1; j<4 && zIn[i]; i++){
643       int code = iCode[zIn[i]&0x7f];
644       if( code>0 ){
645         zResult[j++] = code + '0';
646       }
647     }
648     while( j<4 ){
649       zResult[j++] = '0';
650     }
651     zResult[j] = 0;
652     sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
653   }else{
654     sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
655   }
656 }
657 #endif
658 
659 #ifdef SQLITE_TEST
660 /*
661 ** This function generates a string of random characters.  Used for
662 ** generating test data.
663 */
664 static void randStr(sqlite3_context *context, int argc, sqlite3_value **argv){
665   static const unsigned char zSrc[] =
666      "abcdefghijklmnopqrstuvwxyz"
667      "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
668      "0123456789"
669      ".-!,:*^+=_|?/<> ";
670   int iMin, iMax, n, r, i;
671   unsigned char zBuf[1000];
672   if( argc>=1 ){
673     iMin = sqlite3_value_int(argv[0]);
674     if( iMin<0 ) iMin = 0;
675     if( iMin>=sizeof(zBuf) ) iMin = sizeof(zBuf)-1;
676   }else{
677     iMin = 1;
678   }
679   if( argc>=2 ){
680     iMax = sqlite3_value_int(argv[1]);
681     if( iMax<iMin ) iMax = iMin;
682     if( iMax>=sizeof(zBuf) ) iMax = sizeof(zBuf)-1;
683   }else{
684     iMax = 50;
685   }
686   n = iMin;
687   if( iMax>iMin ){
688     sqlite3Randomness(sizeof(r), &r);
689     r &= 0x7fffffff;
690     n += r%(iMax + 1 - iMin);
691   }
692   assert( n<sizeof(zBuf) );
693   sqlite3Randomness(n, zBuf);
694   for(i=0; i<n; i++){
695     zBuf[i] = zSrc[zBuf[i]%(sizeof(zSrc)-1)];
696   }
697   zBuf[n] = 0;
698   sqlite3_result_text(context, zBuf, n, SQLITE_TRANSIENT);
699 }
700 #endif /* SQLITE_TEST */
701 
702 #ifdef SQLITE_TEST
703 /*
704 ** The following two SQL functions are used to test returning a text
705 ** result with a destructor. Function 'test_destructor' takes one argument
706 ** and returns the same argument interpreted as TEXT. A destructor is
707 ** passed with the sqlite3_result_text() call.
708 **
709 ** SQL function 'test_destructor_count' returns the number of outstanding
710 ** allocations made by 'test_destructor';
711 **
712 ** WARNING: Not threadsafe.
713 */
714 static int test_destructor_count_var = 0;
715 static void destructor(void *p){
716   char *zVal = (char *)p;
717   assert(zVal);
718   zVal--;
719   sqliteFree(zVal);
720   test_destructor_count_var--;
721 }
722 static void test_destructor(
723   sqlite3_context *pCtx,
724   int nArg,
725   sqlite3_value **argv
726 ){
727   char *zVal;
728   int len;
729   sqlite3 *db = sqlite3_user_data(pCtx);
730 
731   test_destructor_count_var++;
732   assert( nArg==1 );
733   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
734   len = sqlite3ValueBytes(argv[0], db->enc);
735   zVal = sqliteMalloc(len+3);
736   zVal[len] = 0;
737   zVal[len-1] = 0;
738   assert( zVal );
739   zVal++;
740   memcpy(zVal, sqlite3ValueText(argv[0], db->enc), len);
741   if( db->enc==SQLITE_UTF8 ){
742     sqlite3_result_text(pCtx, zVal, -1, destructor);
743 #ifndef SQLITE_OMIT_UTF16
744   }else if( db->enc==SQLITE_UTF16LE ){
745     sqlite3_result_text16le(pCtx, zVal, -1, destructor);
746   }else{
747     sqlite3_result_text16be(pCtx, zVal, -1, destructor);
748 #endif /* SQLITE_OMIT_UTF16 */
749   }
750 }
751 static void test_destructor_count(
752   sqlite3_context *pCtx,
753   int nArg,
754   sqlite3_value **argv
755 ){
756   sqlite3_result_int(pCtx, test_destructor_count_var);
757 }
758 #endif /* SQLITE_TEST */
759 
760 #ifdef SQLITE_TEST
761 /*
762 ** Routines for testing the sqlite3_get_auxdata() and sqlite3_set_auxdata()
763 ** interface.
764 **
765 ** The test_auxdata() SQL function attempts to register each of its arguments
766 ** as auxiliary data.  If there are no prior registrations of aux data for
767 ** that argument (meaning the argument is not a constant or this is its first
768 ** call) then the result for that argument is 0.  If there is a prior
769 ** registration, the result for that argument is 1.  The overall result
770 ** is the individual argument results separated by spaces.
771 */
772 static void free_test_auxdata(void *p) {sqliteFree(p);}
773 static void test_auxdata(
774   sqlite3_context *pCtx,
775   int nArg,
776   sqlite3_value **argv
777 ){
778   int i;
779   char *zRet = sqliteMalloc(nArg*2);
780   if( !zRet ) return;
781   for(i=0; i<nArg; i++){
782     char const *z = sqlite3_value_text(argv[i]);
783     if( z ){
784       char *zAux = sqlite3_get_auxdata(pCtx, i);
785       if( zAux ){
786         zRet[i*2] = '1';
787         if( strcmp(zAux, z) ){
788           sqlite3_result_error(pCtx, "Auxilary data corruption", -1);
789           return;
790         }
791       }else{
792         zRet[i*2] = '0';
793         zAux = sqliteStrDup(z);
794         sqlite3_set_auxdata(pCtx, i, zAux, free_test_auxdata);
795       }
796       zRet[i*2+1] = ' ';
797     }
798   }
799   sqlite3_result_text(pCtx, zRet, 2*nArg-1, free_test_auxdata);
800 }
801 #endif /* SQLITE_TEST */
802 
803 #ifdef SQLITE_TEST
804 /*
805 ** A function to test error reporting from user functions. This function
806 ** returns a copy of it's first argument as an error.
807 */
808 static void test_error(
809   sqlite3_context *pCtx,
810   int nArg,
811   sqlite3_value **argv
812 ){
813   sqlite3_result_error(pCtx, sqlite3_value_text(argv[0]), 0);
814 }
815 #endif /* SQLITE_TEST */
816 
817 /*
818 ** An instance of the following structure holds the context of a
819 ** sum() or avg() aggregate computation.
820 */
821 typedef struct SumCtx SumCtx;
822 struct SumCtx {
823   double sum;     /* Sum of terms */
824   int cnt;        /* Number of elements summed */
825 };
826 
827 /*
828 ** Routines used to compute the sum or average.
829 */
830 static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
831   SumCtx *p;
832   if( argc<1 ) return;
833   p = sqlite3_aggregate_context(context, sizeof(*p));
834   if( p && SQLITE_NULL!=sqlite3_value_type(argv[0]) ){
835     p->sum += sqlite3_value_double(argv[0]);
836     p->cnt++;
837   }
838 }
839 static void sumFinalize(sqlite3_context *context){
840   SumCtx *p;
841   p = sqlite3_aggregate_context(context, sizeof(*p));
842   sqlite3_result_double(context, p ? p->sum : 0.0);
843 }
844 static void avgFinalize(sqlite3_context *context){
845   SumCtx *p;
846   p = sqlite3_aggregate_context(context, sizeof(*p));
847   if( p && p->cnt>0 ){
848     sqlite3_result_double(context, p->sum/(double)p->cnt);
849   }
850 }
851 
852 /*
853 ** An instance of the following structure holds the context of a
854 ** variance or standard deviation computation.
855 */
856 typedef struct StdDevCtx StdDevCtx;
857 struct StdDevCtx {
858   double sum;     /* Sum of terms */
859   double sum2;    /* Sum of the squares of terms */
860   int cnt;        /* Number of terms counted */
861 };
862 
863 /*
864 ** The following structure keeps track of state information for the
865 ** count() aggregate function.
866 */
867 typedef struct CountCtx CountCtx;
868 struct CountCtx {
869   int n;
870 };
871 
872 /*
873 ** Routines to implement the count() aggregate function.
874 */
875 static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
876   CountCtx *p;
877   p = sqlite3_aggregate_context(context, sizeof(*p));
878   if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
879     p->n++;
880   }
881 }
882 static void countFinalize(sqlite3_context *context){
883   CountCtx *p;
884   p = sqlite3_aggregate_context(context, sizeof(*p));
885   sqlite3_result_int(context, p ? p->n : 0);
886 }
887 
888 /*
889 ** This function tracks state information for the min() and max()
890 ** aggregate functions.
891 */
892 typedef struct MinMaxCtx MinMaxCtx;
893 struct MinMaxCtx {
894   char *z;         /* The best so far */
895   char zBuf[28];   /* Space that can be used for storage */
896 };
897 
898 /*
899 ** Routines to implement min() and max() aggregate functions.
900 */
901 static void minmaxStep(sqlite3_context *context, int argc, sqlite3_value **argv){
902   Mem *pArg  = (Mem *)argv[0];
903   Mem *pBest;
904 
905   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
906   pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
907   if( !pBest ) return;
908 
909   if( pBest->flags ){
910     int max;
911     int cmp;
912     CollSeq *pColl = sqlite3GetFuncCollSeq(context);
913     /* This step function is used for both the min() and max() aggregates,
914     ** the only difference between the two being that the sense of the
915     ** comparison is inverted. For the max() aggregate, the
916     ** sqlite3_user_data() function returns (void *)-1. For min() it
917     ** returns (void *)db, where db is the sqlite3* database pointer.
918     ** Therefore the next statement sets variable 'max' to 1 for the max()
919     ** aggregate, or 0 for min().
920     */
921     max = ((sqlite3_user_data(context)==(void *)-1)?1:0);
922     cmp = sqlite3MemCompare(pBest, pArg, pColl);
923     if( (max && cmp<0) || (!max && cmp>0) ){
924       sqlite3VdbeMemCopy(pBest, pArg);
925     }
926   }else{
927     sqlite3VdbeMemCopy(pBest, pArg);
928   }
929 }
930 static void minMaxFinalize(sqlite3_context *context){
931   sqlite3_value *pRes;
932   pRes = (sqlite3_value *)sqlite3_aggregate_context(context, sizeof(Mem));
933   if( pRes->flags ){
934     sqlite3_result_value(context, pRes);
935   }
936   sqlite3VdbeMemRelease(pRes);
937 }
938 
939 
940 /*
941 ** This function registered all of the above C functions as SQL
942 ** functions.  This should be the only routine in this file with
943 ** external linkage.
944 */
945 void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
946   static const struct {
947      char *zName;
948      signed char nArg;
949      u8 argType;           /* 0: none.  1: db  2: (-1) */
950      u8 eTextRep;          /* 1: UTF-16.  0: UTF-8 */
951      u8 needCollSeq;
952      void (*xFunc)(sqlite3_context*,int,sqlite3_value **);
953   } aFuncs[] = {
954     { "min",               -1, 0, SQLITE_UTF8,    1, minmaxFunc },
955     { "min",                0, 0, SQLITE_UTF8,    1, 0          },
956     { "max",               -1, 2, SQLITE_UTF8,    1, minmaxFunc },
957     { "max",                0, 2, SQLITE_UTF8,    1, 0          },
958     { "typeof",             1, 0, SQLITE_UTF8,    0, typeofFunc },
959     { "length",             1, 0, SQLITE_UTF8,    0, lengthFunc },
960     { "substr",             3, 0, SQLITE_UTF8,    0, substrFunc },
961 #ifndef SQLITE_OMIT_UTF16
962     { "substr",             3, 0, SQLITE_UTF16LE, 0, sqlite3utf16Substr },
963 #endif
964     { "abs",                1, 0, SQLITE_UTF8,    0, absFunc    },
965     { "round",              1, 0, SQLITE_UTF8,    0, roundFunc  },
966     { "round",              2, 0, SQLITE_UTF8,    0, roundFunc  },
967     { "upper",              1, 0, SQLITE_UTF8,    0, upperFunc  },
968     { "lower",              1, 0, SQLITE_UTF8,    0, lowerFunc  },
969     { "coalesce",          -1, 0, SQLITE_UTF8,    0, ifnullFunc },
970     { "coalesce",           0, 0, SQLITE_UTF8,    0, 0          },
971     { "coalesce",           1, 0, SQLITE_UTF8,    0, 0          },
972     { "ifnull",             2, 0, SQLITE_UTF8,    1, ifnullFunc },
973     { "random",            -1, 0, SQLITE_UTF8,    0, randomFunc },
974     { "like",               2, 0, SQLITE_UTF8,    0, likeFunc   },
975     { "like",               3, 0, SQLITE_UTF8,    0, likeFunc   },
976     { "glob",               2, 0, SQLITE_UTF8,    0, globFunc   },
977     { "nullif",             2, 0, SQLITE_UTF8,    1, nullifFunc },
978     { "sqlite_version",     0, 0, SQLITE_UTF8,    0, versionFunc},
979     { "quote",              1, 0, SQLITE_UTF8,    0, quoteFunc  },
980     { "last_insert_rowid",  0, 1, SQLITE_UTF8,    0, last_insert_rowid },
981     { "changes",            0, 1, SQLITE_UTF8,    0, changes    },
982     { "total_changes",      0, 1, SQLITE_UTF8,    0, total_changes },
983 #ifdef SQLITE_SOUNDEX
984     { "soundex",            1, 0, SQLITE_UTF8, 0, soundexFunc},
985 #endif
986 #ifdef SQLITE_TEST
987     { "randstr",               2, 0, SQLITE_UTF8, 0, randStr    },
988     { "test_destructor",       1, 1, SQLITE_UTF8, 0, test_destructor},
989     { "test_destructor_count", 0, 0, SQLITE_UTF8, 0, test_destructor_count},
990     { "test_auxdata",         -1, 0, SQLITE_UTF8, 0, test_auxdata},
991     { "test_error",            1, 0, SQLITE_UTF8, 0, test_error},
992 #endif
993   };
994   static const struct {
995     char *zName;
996     signed char nArg;
997     u8 argType;
998     u8 needCollSeq;
999     void (*xStep)(sqlite3_context*,int,sqlite3_value**);
1000     void (*xFinalize)(sqlite3_context*);
1001   } aAggs[] = {
1002     { "min",    1, 0, 1, minmaxStep,   minMaxFinalize },
1003     { "max",    1, 2, 1, minmaxStep,   minMaxFinalize },
1004     { "sum",    1, 0, 0, sumStep,      sumFinalize    },
1005     { "avg",    1, 0, 0, sumStep,      avgFinalize    },
1006     { "count",  0, 0, 0, countStep,    countFinalize  },
1007     { "count",  1, 0, 0, countStep,    countFinalize  },
1008   };
1009   int i;
1010 
1011   for(i=0; i<sizeof(aFuncs)/sizeof(aFuncs[0]); i++){
1012     void *pArg = 0;
1013     switch( aFuncs[i].argType ){
1014       case 1: pArg = db; break;
1015       case 2: pArg = (void *)(-1); break;
1016     }
1017     sqlite3_create_function(db, aFuncs[i].zName, aFuncs[i].nArg,
1018         aFuncs[i].eTextRep, pArg, aFuncs[i].xFunc, 0, 0);
1019     if( aFuncs[i].needCollSeq ){
1020       FuncDef *pFunc = sqlite3FindFunction(db, aFuncs[i].zName,
1021           strlen(aFuncs[i].zName), aFuncs[i].nArg, aFuncs[i].eTextRep, 0);
1022       if( pFunc && aFuncs[i].needCollSeq ){
1023         pFunc->needCollSeq = 1;
1024       }
1025     }
1026   }
1027 #ifndef SQLITE_OMIT_ALTERTABLE
1028   sqlite3AlterFunctions(db);
1029 #endif
1030   for(i=0; i<sizeof(aAggs)/sizeof(aAggs[0]); i++){
1031     void *pArg = 0;
1032     switch( aAggs[i].argType ){
1033       case 1: pArg = db; break;
1034       case 2: pArg = (void *)(-1); break;
1035     }
1036     sqlite3_create_function(db, aAggs[i].zName, aAggs[i].nArg, SQLITE_UTF8,
1037         pArg, 0, aAggs[i].xStep, aAggs[i].xFinalize);
1038     if( aAggs[i].needCollSeq ){
1039       FuncDef *pFunc = sqlite3FindFunction( db, aAggs[i].zName,
1040           strlen(aAggs[i].zName), aAggs[i].nArg, SQLITE_UTF8, 0);
1041       if( pFunc && aAggs[i].needCollSeq ){
1042         pFunc->needCollSeq = 1;
1043       }
1044     }
1045   }
1046   sqlite3RegisterDateTimeFunctions(db);
1047 #ifdef SQLITE_SSE
1048   {
1049     sqlite3SseFunctions(db);
1050   }
1051 #endif
1052 }
1053