func.c.svn-base
上传用户:sunhongbo
上传日期:2022-01-25
资源大小:3010k
文件大小:41k
源码类别:

数据库系统

开发平台:

C/C++

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