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