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