modernc.org/cc@v1.0.1/v2/testdata/_sqlite/src/func.c (about)

     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-language implementations for many of the SQL
    13  ** functions of SQLite.  (Some function, and in particular the date and
    14  ** time functions, are implemented separately.)
    15  */
    16  #include "sqliteInt.h"
    17  #include <stdlib.h>
    18  #include <assert.h>
    19  #include "vdbeInt.h"
    20  
    21  /*
    22  ** Return the collating function associated with a function.
    23  */
    24  static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
    25    VdbeOp *pOp;
    26    assert( context->pVdbe!=0 );
    27    pOp = &context->pVdbe->aOp[context->iOp-1];
    28    assert( pOp->opcode==OP_CollSeq );
    29    assert( pOp->p4type==P4_COLLSEQ );
    30    return pOp->p4.pColl;
    31  }
    32  
    33  /*
    34  ** Indicate that the accumulator load should be skipped on this
    35  ** iteration of the aggregate loop.
    36  */
    37  static void sqlite3SkipAccumulatorLoad(sqlite3_context *context){
    38    context->skipFlag = 1;
    39  }
    40  
    41  /*
    42  ** Implementation of the non-aggregate min() and max() functions
    43  */
    44  static void minmaxFunc(
    45    sqlite3_context *context,
    46    int argc,
    47    sqlite3_value **argv
    48  ){
    49    int i;
    50    int mask;    /* 0 for min() or 0xffffffff for max() */
    51    int iBest;
    52    CollSeq *pColl;
    53  
    54    assert( argc>1 );
    55    mask = sqlite3_user_data(context)==0 ? 0 : -1;
    56    pColl = sqlite3GetFuncCollSeq(context);
    57    assert( pColl );
    58    assert( mask==-1 || mask==0 );
    59    iBest = 0;
    60    if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
    61    for(i=1; i<argc; i++){
    62      if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
    63      if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
    64        testcase( mask==0 );
    65        iBest = i;
    66      }
    67    }
    68    sqlite3_result_value(context, argv[iBest]);
    69  }
    70  
    71  /*
    72  ** Return the type of the argument.
    73  */
    74  static void typeofFunc(
    75    sqlite3_context *context,
    76    int NotUsed,
    77    sqlite3_value **argv
    78  ){
    79    static const char *azType[] = { "integer", "real", "text", "blob", "null" };
    80    int i = sqlite3_value_type(argv[0]) - 1;
    81    UNUSED_PARAMETER(NotUsed);
    82    assert( i>=0 && i<ArraySize(azType) );
    83    assert( SQLITE_INTEGER==1 );
    84    assert( SQLITE_FLOAT==2 );
    85    assert( SQLITE_TEXT==3 );
    86    assert( SQLITE_BLOB==4 );
    87    assert( SQLITE_NULL==5 );
    88    /* EVIDENCE-OF: R-01470-60482 The sqlite3_value_type(V) interface returns
    89    ** the datatype code for the initial datatype of the sqlite3_value object
    90    ** V. The returned value is one of SQLITE_INTEGER, SQLITE_FLOAT,
    91    ** SQLITE_TEXT, SQLITE_BLOB, or SQLITE_NULL. */
    92    sqlite3_result_text(context, azType[i], -1, SQLITE_STATIC);
    93  }
    94  
    95  
    96  /*
    97  ** Implementation of the length() function
    98  */
    99  static void lengthFunc(
   100    sqlite3_context *context,
   101    int argc,
   102    sqlite3_value **argv
   103  ){
   104    int len;
   105  
   106    assert( argc==1 );
   107    UNUSED_PARAMETER(argc);
   108    switch( sqlite3_value_type(argv[0]) ){
   109      case SQLITE_BLOB:
   110      case SQLITE_INTEGER:
   111      case SQLITE_FLOAT: {
   112        sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
   113        break;
   114      }
   115      case SQLITE_TEXT: {
   116        const unsigned char *z = sqlite3_value_text(argv[0]);
   117        if( z==0 ) return;
   118        len = 0;
   119        while( *z ){
   120          len++;
   121          SQLITE_SKIP_UTF8(z);
   122        }
   123        sqlite3_result_int(context, len);
   124        break;
   125      }
   126      default: {
   127        sqlite3_result_null(context);
   128        break;
   129      }
   130    }
   131  }
   132  
   133  /*
   134  ** Implementation of the abs() function.
   135  **
   136  ** IMP: R-23979-26855 The abs(X) function returns the absolute value of
   137  ** the numeric argument X. 
   138  */
   139  static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
   140    assert( argc==1 );
   141    UNUSED_PARAMETER(argc);
   142    switch( sqlite3_value_type(argv[0]) ){
   143      case SQLITE_INTEGER: {
   144        i64 iVal = sqlite3_value_int64(argv[0]);
   145        if( iVal<0 ){
   146          if( iVal==SMALLEST_INT64 ){
   147            /* IMP: R-31676-45509 If X is the integer -9223372036854775808
   148            ** then abs(X) throws an integer overflow error since there is no
   149            ** equivalent positive 64-bit two complement value. */
   150            sqlite3_result_error(context, "integer overflow", -1);
   151            return;
   152          }
   153          iVal = -iVal;
   154        } 
   155        sqlite3_result_int64(context, iVal);
   156        break;
   157      }
   158      case SQLITE_NULL: {
   159        /* IMP: R-37434-19929 Abs(X) returns NULL if X is NULL. */
   160        sqlite3_result_null(context);
   161        break;
   162      }
   163      default: {
   164        /* Because sqlite3_value_double() returns 0.0 if the argument is not
   165        ** something that can be converted into a number, we have:
   166        ** IMP: R-01992-00519 Abs(X) returns 0.0 if X is a string or blob
   167        ** that cannot be converted to a numeric value.
   168        */
   169        double rVal = sqlite3_value_double(argv[0]);
   170        if( rVal<0 ) rVal = -rVal;
   171        sqlite3_result_double(context, rVal);
   172        break;
   173      }
   174    }
   175  }
   176  
   177  /*
   178  ** Implementation of the instr() function.
   179  **
   180  ** instr(haystack,needle) finds the first occurrence of needle
   181  ** in haystack and returns the number of previous characters plus 1,
   182  ** or 0 if needle does not occur within haystack.
   183  **
   184  ** If both haystack and needle are BLOBs, then the result is one more than
   185  ** the number of bytes in haystack prior to the first occurrence of needle,
   186  ** or 0 if needle never occurs in haystack.
   187  */
   188  static void instrFunc(
   189    sqlite3_context *context,
   190    int argc,
   191    sqlite3_value **argv
   192  ){
   193    const unsigned char *zHaystack;
   194    const unsigned char *zNeedle;
   195    int nHaystack;
   196    int nNeedle;
   197    int typeHaystack, typeNeedle;
   198    int N = 1;
   199    int isText;
   200  
   201    UNUSED_PARAMETER(argc);
   202    typeHaystack = sqlite3_value_type(argv[0]);
   203    typeNeedle = sqlite3_value_type(argv[1]);
   204    if( typeHaystack==SQLITE_NULL || typeNeedle==SQLITE_NULL ) return;
   205    nHaystack = sqlite3_value_bytes(argv[0]);
   206    nNeedle = sqlite3_value_bytes(argv[1]);
   207    if( nNeedle>0 ){
   208      if( typeHaystack==SQLITE_BLOB && typeNeedle==SQLITE_BLOB ){
   209        zHaystack = sqlite3_value_blob(argv[0]);
   210        zNeedle = sqlite3_value_blob(argv[1]);
   211        isText = 0;
   212      }else{
   213        zHaystack = sqlite3_value_text(argv[0]);
   214        zNeedle = sqlite3_value_text(argv[1]);
   215        isText = 1;
   216      }
   217      if( zNeedle==0 || (nHaystack && zHaystack==0) ) return;
   218      while( nNeedle<=nHaystack && memcmp(zHaystack, zNeedle, nNeedle)!=0 ){
   219        N++;
   220        do{
   221          nHaystack--;
   222          zHaystack++;
   223        }while( isText && (zHaystack[0]&0xc0)==0x80 );
   224      }
   225      if( nNeedle>nHaystack ) N = 0;
   226    }
   227    sqlite3_result_int(context, N);
   228  }
   229  
   230  /*
   231  ** Implementation of the printf() function.
   232  */
   233  static void printfFunc(
   234    sqlite3_context *context,
   235    int argc,
   236    sqlite3_value **argv
   237  ){
   238    PrintfArguments x;
   239    StrAccum str;
   240    const char *zFormat;
   241    int n;
   242    sqlite3 *db = sqlite3_context_db_handle(context);
   243  
   244    if( argc>=1 && (zFormat = (const char*)sqlite3_value_text(argv[0]))!=0 ){
   245      x.nArg = argc-1;
   246      x.nUsed = 0;
   247      x.apArg = argv+1;
   248      sqlite3StrAccumInit(&str, db, 0, 0, db->aLimit[SQLITE_LIMIT_LENGTH]);
   249      str.printfFlags = SQLITE_PRINTF_SQLFUNC;
   250      sqlite3XPrintf(&str, zFormat, &x);
   251      n = str.nChar;
   252      sqlite3_result_text(context, sqlite3StrAccumFinish(&str), n,
   253                          SQLITE_DYNAMIC);
   254    }
   255  }
   256  
   257  /*
   258  ** Implementation of the substr() function.
   259  **
   260  ** substr(x,p1,p2)  returns p2 characters of x[] beginning with p1.
   261  ** p1 is 1-indexed.  So substr(x,1,1) returns the first character
   262  ** of x.  If x is text, then we actually count UTF-8 characters.
   263  ** If x is a blob, then we count bytes.
   264  **
   265  ** If p1 is negative, then we begin abs(p1) from the end of x[].
   266  **
   267  ** If p2 is negative, return the p2 characters preceding p1.
   268  */
   269  static void substrFunc(
   270    sqlite3_context *context,
   271    int argc,
   272    sqlite3_value **argv
   273  ){
   274    const unsigned char *z;
   275    const unsigned char *z2;
   276    int len;
   277    int p0type;
   278    i64 p1, p2;
   279    int negP2 = 0;
   280  
   281    assert( argc==3 || argc==2 );
   282    if( sqlite3_value_type(argv[1])==SQLITE_NULL
   283     || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL)
   284    ){
   285      return;
   286    }
   287    p0type = sqlite3_value_type(argv[0]);
   288    p1 = sqlite3_value_int(argv[1]);
   289    if( p0type==SQLITE_BLOB ){
   290      len = sqlite3_value_bytes(argv[0]);
   291      z = sqlite3_value_blob(argv[0]);
   292      if( z==0 ) return;
   293      assert( len==sqlite3_value_bytes(argv[0]) );
   294    }else{
   295      z = sqlite3_value_text(argv[0]);
   296      if( z==0 ) return;
   297      len = 0;
   298      if( p1<0 ){
   299        for(z2=z; *z2; len++){
   300          SQLITE_SKIP_UTF8(z2);
   301        }
   302      }
   303    }
   304  #ifdef SQLITE_SUBSTR_COMPATIBILITY
   305    /* If SUBSTR_COMPATIBILITY is defined then substr(X,0,N) work the same as
   306    ** as substr(X,1,N) - it returns the first N characters of X.  This
   307    ** is essentially a back-out of the bug-fix in check-in [5fc125d362df4b8]
   308    ** from 2009-02-02 for compatibility of applications that exploited the
   309    ** old buggy behavior. */
   310    if( p1==0 ) p1 = 1; /* <rdar://problem/6778339> */
   311  #endif
   312    if( argc==3 ){
   313      p2 = sqlite3_value_int(argv[2]);
   314      if( p2<0 ){
   315        p2 = -p2;
   316        negP2 = 1;
   317      }
   318    }else{
   319      p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH];
   320    }
   321    if( p1<0 ){
   322      p1 += len;
   323      if( p1<0 ){
   324        p2 += p1;
   325        if( p2<0 ) p2 = 0;
   326        p1 = 0;
   327      }
   328    }else if( p1>0 ){
   329      p1--;
   330    }else if( p2>0 ){
   331      p2--;
   332    }
   333    if( negP2 ){
   334      p1 -= p2;
   335      if( p1<0 ){
   336        p2 += p1;
   337        p1 = 0;
   338      }
   339    }
   340    assert( p1>=0 && p2>=0 );
   341    if( p0type!=SQLITE_BLOB ){
   342      while( *z && p1 ){
   343        SQLITE_SKIP_UTF8(z);
   344        p1--;
   345      }
   346      for(z2=z; *z2 && p2; p2--){
   347        SQLITE_SKIP_UTF8(z2);
   348      }
   349      sqlite3_result_text64(context, (char*)z, z2-z, SQLITE_TRANSIENT,
   350                            SQLITE_UTF8);
   351    }else{
   352      if( p1+p2>len ){
   353        p2 = len-p1;
   354        if( p2<0 ) p2 = 0;
   355      }
   356      sqlite3_result_blob64(context, (char*)&z[p1], (u64)p2, SQLITE_TRANSIENT);
   357    }
   358  }
   359  
   360  /*
   361  ** Implementation of the round() function
   362  */
   363  #ifndef SQLITE_OMIT_FLOATING_POINT
   364  static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
   365    int n = 0;
   366    double r;
   367    char *zBuf;
   368    assert( argc==1 || argc==2 );
   369    if( argc==2 ){
   370      if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
   371      n = sqlite3_value_int(argv[1]);
   372      if( n>30 ) n = 30;
   373      if( n<0 ) n = 0;
   374    }
   375    if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
   376    r = sqlite3_value_double(argv[0]);
   377    /* If Y==0 and X will fit in a 64-bit int,
   378    ** handle the rounding directly,
   379    ** otherwise use printf.
   380    */
   381    if( n==0 && r>=0 && r<LARGEST_INT64-1 ){
   382      r = (double)((sqlite_int64)(r+0.5));
   383    }else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){
   384      r = -(double)((sqlite_int64)((-r)+0.5));
   385    }else{
   386      zBuf = sqlite3_mprintf("%.*f",n,r);
   387      if( zBuf==0 ){
   388        sqlite3_result_error_nomem(context);
   389        return;
   390      }
   391      sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8);
   392      sqlite3_free(zBuf);
   393    }
   394    sqlite3_result_double(context, r);
   395  }
   396  #endif
   397  
   398  /*
   399  ** Allocate nByte bytes of space using sqlite3Malloc(). If the
   400  ** allocation fails, call sqlite3_result_error_nomem() to notify
   401  ** the database handle that malloc() has failed and return NULL.
   402  ** If nByte is larger than the maximum string or blob length, then
   403  ** raise an SQLITE_TOOBIG exception and return NULL.
   404  */
   405  static void *contextMalloc(sqlite3_context *context, i64 nByte){
   406    char *z;
   407    sqlite3 *db = sqlite3_context_db_handle(context);
   408    assert( nByte>0 );
   409    testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] );
   410    testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
   411    if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
   412      sqlite3_result_error_toobig(context);
   413      z = 0;
   414    }else{
   415      z = sqlite3Malloc(nByte);
   416      if( !z ){
   417        sqlite3_result_error_nomem(context);
   418      }
   419    }
   420    return z;
   421  }
   422  
   423  /*
   424  ** Implementation of the upper() and lower() SQL functions.
   425  */
   426  static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
   427    char *z1;
   428    const char *z2;
   429    int i, n;
   430    UNUSED_PARAMETER(argc);
   431    z2 = (char*)sqlite3_value_text(argv[0]);
   432    n = sqlite3_value_bytes(argv[0]);
   433    /* Verify that the call to _bytes() does not invalidate the _text() pointer */
   434    assert( z2==(char*)sqlite3_value_text(argv[0]) );
   435    if( z2 ){
   436      z1 = contextMalloc(context, ((i64)n)+1);
   437      if( z1 ){
   438        for(i=0; i<n; i++){
   439          z1[i] = (char)sqlite3Toupper(z2[i]);
   440        }
   441        sqlite3_result_text(context, z1, n, sqlite3_free);
   442      }
   443    }
   444  }
   445  static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
   446    char *z1;
   447    const char *z2;
   448    int i, n;
   449    UNUSED_PARAMETER(argc);
   450    z2 = (char*)sqlite3_value_text(argv[0]);
   451    n = sqlite3_value_bytes(argv[0]);
   452    /* Verify that the call to _bytes() does not invalidate the _text() pointer */
   453    assert( z2==(char*)sqlite3_value_text(argv[0]) );
   454    if( z2 ){
   455      z1 = contextMalloc(context, ((i64)n)+1);
   456      if( z1 ){
   457        for(i=0; i<n; i++){
   458          z1[i] = sqlite3Tolower(z2[i]);
   459        }
   460        sqlite3_result_text(context, z1, n, sqlite3_free);
   461      }
   462    }
   463  }
   464  
   465  /*
   466  ** Some functions like COALESCE() and IFNULL() and UNLIKELY() are implemented
   467  ** as VDBE code so that unused argument values do not have to be computed.
   468  ** However, we still need some kind of function implementation for this
   469  ** routines in the function table.  The noopFunc macro provides this.
   470  ** noopFunc will never be called so it doesn't matter what the implementation
   471  ** is.  We might as well use the "version()" function as a substitute.
   472  */
   473  #define noopFunc versionFunc   /* Substitute function - never called */
   474  
   475  /*
   476  ** Implementation of random().  Return a random integer.  
   477  */
   478  static void randomFunc(
   479    sqlite3_context *context,
   480    int NotUsed,
   481    sqlite3_value **NotUsed2
   482  ){
   483    sqlite_int64 r;
   484    UNUSED_PARAMETER2(NotUsed, NotUsed2);
   485    sqlite3_randomness(sizeof(r), &r);
   486    if( r<0 ){
   487      /* We need to prevent a random number of 0x8000000000000000 
   488      ** (or -9223372036854775808) since when you do abs() of that
   489      ** number of you get the same value back again.  To do this
   490      ** in a way that is testable, mask the sign bit off of negative
   491      ** values, resulting in a positive value.  Then take the 
   492      ** 2s complement of that positive value.  The end result can
   493      ** therefore be no less than -9223372036854775807.
   494      */
   495      r = -(r & LARGEST_INT64);
   496    }
   497    sqlite3_result_int64(context, r);
   498  }
   499  
   500  /*
   501  ** Implementation of randomblob(N).  Return a random blob
   502  ** that is N bytes long.
   503  */
   504  static void randomBlob(
   505    sqlite3_context *context,
   506    int argc,
   507    sqlite3_value **argv
   508  ){
   509    int n;
   510    unsigned char *p;
   511    assert( argc==1 );
   512    UNUSED_PARAMETER(argc);
   513    n = sqlite3_value_int(argv[0]);
   514    if( n<1 ){
   515      n = 1;
   516    }
   517    p = contextMalloc(context, n);
   518    if( p ){
   519      sqlite3_randomness(n, p);
   520      sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
   521    }
   522  }
   523  
   524  /*
   525  ** Implementation of the last_insert_rowid() SQL function.  The return
   526  ** value is the same as the sqlite3_last_insert_rowid() API function.
   527  */
   528  static void last_insert_rowid(
   529    sqlite3_context *context, 
   530    int NotUsed, 
   531    sqlite3_value **NotUsed2
   532  ){
   533    sqlite3 *db = sqlite3_context_db_handle(context);
   534    UNUSED_PARAMETER2(NotUsed, NotUsed2);
   535    /* IMP: R-51513-12026 The last_insert_rowid() SQL function is a
   536    ** wrapper around the sqlite3_last_insert_rowid() C/C++ interface
   537    ** function. */
   538    sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
   539  }
   540  
   541  /*
   542  ** Implementation of the changes() SQL function.
   543  **
   544  ** IMP: R-62073-11209 The changes() SQL function is a wrapper
   545  ** around the sqlite3_changes() C/C++ function and hence follows the same
   546  ** rules for counting changes.
   547  */
   548  static void changes(
   549    sqlite3_context *context,
   550    int NotUsed,
   551    sqlite3_value **NotUsed2
   552  ){
   553    sqlite3 *db = sqlite3_context_db_handle(context);
   554    UNUSED_PARAMETER2(NotUsed, NotUsed2);
   555    sqlite3_result_int(context, sqlite3_changes(db));
   556  }
   557  
   558  /*
   559  ** Implementation of the total_changes() SQL function.  The return value is
   560  ** the same as the sqlite3_total_changes() API function.
   561  */
   562  static void total_changes(
   563    sqlite3_context *context,
   564    int NotUsed,
   565    sqlite3_value **NotUsed2
   566  ){
   567    sqlite3 *db = sqlite3_context_db_handle(context);
   568    UNUSED_PARAMETER2(NotUsed, NotUsed2);
   569    /* IMP: R-52756-41993 This function is a wrapper around the
   570    ** sqlite3_total_changes() C/C++ interface. */
   571    sqlite3_result_int(context, sqlite3_total_changes(db));
   572  }
   573  
   574  /*
   575  ** A structure defining how to do GLOB-style comparisons.
   576  */
   577  struct compareInfo {
   578    u8 matchAll;          /* "*" or "%" */
   579    u8 matchOne;          /* "?" or "_" */
   580    u8 matchSet;          /* "[" or 0 */
   581    u8 noCase;            /* true to ignore case differences */
   582  };
   583  
   584  /*
   585  ** For LIKE and GLOB matching on EBCDIC machines, assume that every
   586  ** character is exactly one byte in size.  Also, provde the Utf8Read()
   587  ** macro for fast reading of the next character in the common case where
   588  ** the next character is ASCII.
   589  */
   590  #if defined(SQLITE_EBCDIC)
   591  # define sqlite3Utf8Read(A)        (*((*A)++))
   592  # define Utf8Read(A)               (*(A++))
   593  #else
   594  # define Utf8Read(A)               (A[0]<0x80?*(A++):sqlite3Utf8Read(&A))
   595  #endif
   596  
   597  static const struct compareInfo globInfo = { '*', '?', '[', 0 };
   598  /* The correct SQL-92 behavior is for the LIKE operator to ignore
   599  ** case.  Thus  'a' LIKE 'A' would be true. */
   600  static const struct compareInfo likeInfoNorm = { '%', '_',   0, 1 };
   601  /* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
   602  ** is case sensitive causing 'a' LIKE 'A' to be false */
   603  static const struct compareInfo likeInfoAlt = { '%', '_',   0, 0 };
   604  
   605  /*
   606  ** Possible error returns from patternMatch()
   607  */
   608  #define SQLITE_MATCH             0
   609  #define SQLITE_NOMATCH           1
   610  #define SQLITE_NOWILDCARDMATCH   2
   611  
   612  /*
   613  ** Compare two UTF-8 strings for equality where the first string is
   614  ** a GLOB or LIKE expression.  Return values:
   615  **
   616  **    SQLITE_MATCH:            Match
   617  **    SQLITE_NOMATCH:          No match
   618  **    SQLITE_NOWILDCARDMATCH:  No match in spite of having * or % wildcards.
   619  **
   620  ** Globbing rules:
   621  **
   622  **      '*'       Matches any sequence of zero or more characters.
   623  **
   624  **      '?'       Matches exactly one character.
   625  **
   626  **     [...]      Matches one character from the enclosed list of
   627  **                characters.
   628  **
   629  **     [^...]     Matches one character not in the enclosed list.
   630  **
   631  ** With the [...] and [^...] matching, a ']' character can be included
   632  ** in the list by making it the first character after '[' or '^'.  A
   633  ** range of characters can be specified using '-'.  Example:
   634  ** "[a-z]" matches any single lower-case letter.  To match a '-', make
   635  ** it the last character in the list.
   636  **
   637  ** Like matching rules:
   638  ** 
   639  **      '%'       Matches any sequence of zero or more characters
   640  **
   641  ***     '_'       Matches any one character
   642  **
   643  **      Ec        Where E is the "esc" character and c is any other
   644  **                character, including '%', '_', and esc, match exactly c.
   645  **
   646  ** The comments within this routine usually assume glob matching.
   647  **
   648  ** This routine is usually quick, but can be N**2 in the worst case.
   649  */
   650  static int patternCompare(
   651    const u8 *zPattern,              /* The glob pattern */
   652    const u8 *zString,               /* The string to compare against the glob */
   653    const struct compareInfo *pInfo, /* Information about how to do the compare */
   654    u32 matchOther                   /* The escape char (LIKE) or '[' (GLOB) */
   655  ){
   656    u32 c, c2;                       /* Next pattern and input string chars */
   657    u32 matchOne = pInfo->matchOne;  /* "?" or "_" */
   658    u32 matchAll = pInfo->matchAll;  /* "*" or "%" */
   659    u8 noCase = pInfo->noCase;       /* True if uppercase==lowercase */
   660    const u8 *zEscaped = 0;          /* One past the last escaped input char */
   661    
   662    while( (c = Utf8Read(zPattern))!=0 ){
   663      if( c==matchAll ){  /* Match "*" */
   664        /* Skip over multiple "*" characters in the pattern.  If there
   665        ** are also "?" characters, skip those as well, but consume a
   666        ** single character of the input string for each "?" skipped */
   667        while( (c=Utf8Read(zPattern)) == matchAll || c == matchOne ){
   668          if( c==matchOne && sqlite3Utf8Read(&zString)==0 ){
   669            return SQLITE_NOWILDCARDMATCH;
   670          }
   671        }
   672        if( c==0 ){
   673          return SQLITE_MATCH;   /* "*" at the end of the pattern matches */
   674        }else if( c==matchOther ){
   675          if( pInfo->matchSet==0 ){
   676            c = sqlite3Utf8Read(&zPattern);
   677            if( c==0 ) return SQLITE_NOWILDCARDMATCH;
   678          }else{
   679            /* "[...]" immediately follows the "*".  We have to do a slow
   680            ** recursive search in this case, but it is an unusual case. */
   681            assert( matchOther<0x80 );  /* '[' is a single-byte character */
   682            while( *zString ){
   683              int bMatch = patternCompare(&zPattern[-1],zString,pInfo,matchOther);
   684              if( bMatch!=SQLITE_NOMATCH ) return bMatch;
   685              SQLITE_SKIP_UTF8(zString);
   686            }
   687            return SQLITE_NOWILDCARDMATCH;
   688          }
   689        }
   690  
   691        /* At this point variable c contains the first character of the
   692        ** pattern string past the "*".  Search in the input string for the
   693        ** first matching character and recursively continue the match from
   694        ** that point.
   695        **
   696        ** For a case-insensitive search, set variable cx to be the same as
   697        ** c but in the other case and search the input string for either
   698        ** c or cx.
   699        */
   700        if( c<=0x80 ){
   701          u32 cx;
   702          int bMatch;
   703          if( noCase ){
   704            cx = sqlite3Toupper(c);
   705            c = sqlite3Tolower(c);
   706          }else{
   707            cx = c;
   708          }
   709          while( (c2 = *(zString++))!=0 ){
   710            if( c2!=c && c2!=cx ) continue;
   711            bMatch = patternCompare(zPattern,zString,pInfo,matchOther);
   712            if( bMatch!=SQLITE_NOMATCH ) return bMatch;
   713          }
   714        }else{
   715          int bMatch;
   716          while( (c2 = Utf8Read(zString))!=0 ){
   717            if( c2!=c ) continue;
   718            bMatch = patternCompare(zPattern,zString,pInfo,matchOther);
   719            if( bMatch!=SQLITE_NOMATCH ) return bMatch;
   720          }
   721        }
   722        return SQLITE_NOWILDCARDMATCH;
   723      }
   724      if( c==matchOther ){
   725        if( pInfo->matchSet==0 ){
   726          c = sqlite3Utf8Read(&zPattern);
   727          if( c==0 ) return SQLITE_NOMATCH;
   728          zEscaped = zPattern;
   729        }else{
   730          u32 prior_c = 0;
   731          int seen = 0;
   732          int invert = 0;
   733          c = sqlite3Utf8Read(&zString);
   734          if( c==0 ) return SQLITE_NOMATCH;
   735          c2 = sqlite3Utf8Read(&zPattern);
   736          if( c2=='^' ){
   737            invert = 1;
   738            c2 = sqlite3Utf8Read(&zPattern);
   739          }
   740          if( c2==']' ){
   741            if( c==']' ) seen = 1;
   742            c2 = sqlite3Utf8Read(&zPattern);
   743          }
   744          while( c2 && c2!=']' ){
   745            if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
   746              c2 = sqlite3Utf8Read(&zPattern);
   747              if( c>=prior_c && c<=c2 ) seen = 1;
   748              prior_c = 0;
   749            }else{
   750              if( c==c2 ){
   751                seen = 1;
   752              }
   753              prior_c = c2;
   754            }
   755            c2 = sqlite3Utf8Read(&zPattern);
   756          }
   757          if( c2==0 || (seen ^ invert)==0 ){
   758            return SQLITE_NOMATCH;
   759          }
   760          continue;
   761        }
   762      }
   763      c2 = Utf8Read(zString);
   764      if( c==c2 ) continue;
   765      if( noCase  && sqlite3Tolower(c)==sqlite3Tolower(c2) && c<0x80 && c2<0x80 ){
   766        continue;
   767      }
   768      if( c==matchOne && zPattern!=zEscaped && c2!=0 ) continue;
   769      return SQLITE_NOMATCH;
   770    }
   771    return *zString==0 ? SQLITE_MATCH : SQLITE_NOMATCH;
   772  }
   773  
   774  /*
   775  ** The sqlite3_strglob() interface.  Return 0 on a match (like strcmp()) and
   776  ** non-zero if there is no match.
   777  */
   778  int sqlite3_strglob(const char *zGlobPattern, const char *zString){
   779    return patternCompare((u8*)zGlobPattern, (u8*)zString, &globInfo, '[');
   780  }
   781  
   782  /*
   783  ** The sqlite3_strlike() interface.  Return 0 on a match and non-zero for
   784  ** a miss - like strcmp().
   785  */
   786  int sqlite3_strlike(const char *zPattern, const char *zStr, unsigned int esc){
   787    return patternCompare((u8*)zPattern, (u8*)zStr, &likeInfoNorm, esc);
   788  }
   789  
   790  /*
   791  ** Count the number of times that the LIKE operator (or GLOB which is
   792  ** just a variation of LIKE) gets called.  This is used for testing
   793  ** only.
   794  */
   795  #ifdef SQLITE_TEST
   796  int sqlite3_like_count = 0;
   797  #endif
   798  
   799  
   800  /*
   801  ** Implementation of the like() SQL function.  This function implements
   802  ** the build-in LIKE operator.  The first argument to the function is the
   803  ** pattern and the second argument is the string.  So, the SQL statements:
   804  **
   805  **       A LIKE B
   806  **
   807  ** is implemented as like(B,A).
   808  **
   809  ** This same function (with a different compareInfo structure) computes
   810  ** the GLOB operator.
   811  */
   812  static void likeFunc(
   813    sqlite3_context *context, 
   814    int argc, 
   815    sqlite3_value **argv
   816  ){
   817    const unsigned char *zA, *zB;
   818    u32 escape;
   819    int nPat;
   820    sqlite3 *db = sqlite3_context_db_handle(context);
   821    struct compareInfo *pInfo = sqlite3_user_data(context);
   822  
   823  #ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS
   824    if( sqlite3_value_type(argv[0])==SQLITE_BLOB
   825     || sqlite3_value_type(argv[1])==SQLITE_BLOB
   826    ){
   827  #ifdef SQLITE_TEST
   828      sqlite3_like_count++;
   829  #endif
   830      sqlite3_result_int(context, 0);
   831      return;
   832    }
   833  #endif
   834    zB = sqlite3_value_text(argv[0]);
   835    zA = sqlite3_value_text(argv[1]);
   836  
   837    /* Limit the length of the LIKE or GLOB pattern to avoid problems
   838    ** of deep recursion and N*N behavior in patternCompare().
   839    */
   840    nPat = sqlite3_value_bytes(argv[0]);
   841    testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );
   842    testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );
   843    if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
   844      sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
   845      return;
   846    }
   847    assert( zB==sqlite3_value_text(argv[0]) );  /* Encoding did not change */
   848  
   849    if( argc==3 ){
   850      /* The escape character string must consist of a single UTF-8 character.
   851      ** Otherwise, return an error.
   852      */
   853      const unsigned char *zEsc = sqlite3_value_text(argv[2]);
   854      if( zEsc==0 ) return;
   855      if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
   856        sqlite3_result_error(context, 
   857            "ESCAPE expression must be a single character", -1);
   858        return;
   859      }
   860      escape = sqlite3Utf8Read(&zEsc);
   861    }else{
   862      escape = pInfo->matchSet;
   863    }
   864    if( zA && zB ){
   865  #ifdef SQLITE_TEST
   866      sqlite3_like_count++;
   867  #endif
   868      sqlite3_result_int(context,
   869                        patternCompare(zB, zA, pInfo, escape)==SQLITE_MATCH);
   870    }
   871  }
   872  
   873  /*
   874  ** Implementation of the NULLIF(x,y) function.  The result is the first
   875  ** argument if the arguments are different.  The result is NULL if the
   876  ** arguments are equal to each other.
   877  */
   878  static void nullifFunc(
   879    sqlite3_context *context,
   880    int NotUsed,
   881    sqlite3_value **argv
   882  ){
   883    CollSeq *pColl = sqlite3GetFuncCollSeq(context);
   884    UNUSED_PARAMETER(NotUsed);
   885    if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
   886      sqlite3_result_value(context, argv[0]);
   887    }
   888  }
   889  
   890  /*
   891  ** Implementation of the sqlite_version() function.  The result is the version
   892  ** of the SQLite library that is running.
   893  */
   894  static void versionFunc(
   895    sqlite3_context *context,
   896    int NotUsed,
   897    sqlite3_value **NotUsed2
   898  ){
   899    UNUSED_PARAMETER2(NotUsed, NotUsed2);
   900    /* IMP: R-48699-48617 This function is an SQL wrapper around the
   901    ** sqlite3_libversion() C-interface. */
   902    sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC);
   903  }
   904  
   905  /*
   906  ** Implementation of the sqlite_source_id() function. The result is a string
   907  ** that identifies the particular version of the source code used to build
   908  ** SQLite.
   909  */
   910  static void sourceidFunc(
   911    sqlite3_context *context,
   912    int NotUsed,
   913    sqlite3_value **NotUsed2
   914  ){
   915    UNUSED_PARAMETER2(NotUsed, NotUsed2);
   916    /* IMP: R-24470-31136 This function is an SQL wrapper around the
   917    ** sqlite3_sourceid() C interface. */
   918    sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC);
   919  }
   920  
   921  /*
   922  ** Implementation of the sqlite_log() function.  This is a wrapper around
   923  ** sqlite3_log().  The return value is NULL.  The function exists purely for
   924  ** its side-effects.
   925  */
   926  static void errlogFunc(
   927    sqlite3_context *context,
   928    int argc,
   929    sqlite3_value **argv
   930  ){
   931    UNUSED_PARAMETER(argc);
   932    UNUSED_PARAMETER(context);
   933    sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1]));
   934  }
   935  
   936  /*
   937  ** Implementation of the sqlite_compileoption_used() function.
   938  ** The result is an integer that identifies if the compiler option
   939  ** was used to build SQLite.
   940  */
   941  #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
   942  static void compileoptionusedFunc(
   943    sqlite3_context *context,
   944    int argc,
   945    sqlite3_value **argv
   946  ){
   947    const char *zOptName;
   948    assert( argc==1 );
   949    UNUSED_PARAMETER(argc);
   950    /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL
   951    ** function is a wrapper around the sqlite3_compileoption_used() C/C++
   952    ** function.
   953    */
   954    if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){
   955      sqlite3_result_int(context, sqlite3_compileoption_used(zOptName));
   956    }
   957  }
   958  #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
   959  
   960  /*
   961  ** Implementation of the sqlite_compileoption_get() function. 
   962  ** The result is a string that identifies the compiler options 
   963  ** used to build SQLite.
   964  */
   965  #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
   966  static void compileoptiongetFunc(
   967    sqlite3_context *context,
   968    int argc,
   969    sqlite3_value **argv
   970  ){
   971    int n;
   972    assert( argc==1 );
   973    UNUSED_PARAMETER(argc);
   974    /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function
   975    ** is a wrapper around the sqlite3_compileoption_get() C/C++ function.
   976    */
   977    n = sqlite3_value_int(argv[0]);
   978    sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC);
   979  }
   980  #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
   981  
   982  /* Array for converting from half-bytes (nybbles) into ASCII hex
   983  ** digits. */
   984  static const char hexdigits[] = {
   985    '0', '1', '2', '3', '4', '5', '6', '7',
   986    '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' 
   987  };
   988  
   989  /*
   990  ** Implementation of the QUOTE() function.  This function takes a single
   991  ** argument.  If the argument is numeric, the return value is the same as
   992  ** the argument.  If the argument is NULL, the return value is the string
   993  ** "NULL".  Otherwise, the argument is enclosed in single quotes with
   994  ** single-quote escapes.
   995  */
   996  static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
   997    assert( argc==1 );
   998    UNUSED_PARAMETER(argc);
   999    switch( sqlite3_value_type(argv[0]) ){
  1000      case SQLITE_FLOAT: {
  1001        double r1, r2;
  1002        char zBuf[50];
  1003        r1 = sqlite3_value_double(argv[0]);
  1004        sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.15g", r1);
  1005        sqlite3AtoF(zBuf, &r2, 20, SQLITE_UTF8);
  1006        if( r1!=r2 ){
  1007          sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.20e", r1);
  1008        }
  1009        sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
  1010        break;
  1011      }
  1012      case SQLITE_INTEGER: {
  1013        sqlite3_result_value(context, argv[0]);
  1014        break;
  1015      }
  1016      case SQLITE_BLOB: {
  1017        char *zText = 0;
  1018        char const *zBlob = sqlite3_value_blob(argv[0]);
  1019        int nBlob = sqlite3_value_bytes(argv[0]);
  1020        assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
  1021        zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4); 
  1022        if( zText ){
  1023          int i;
  1024          for(i=0; i<nBlob; i++){
  1025            zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
  1026            zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
  1027          }
  1028          zText[(nBlob*2)+2] = '\'';
  1029          zText[(nBlob*2)+3] = '\0';
  1030          zText[0] = 'X';
  1031          zText[1] = '\'';
  1032          sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
  1033          sqlite3_free(zText);
  1034        }
  1035        break;
  1036      }
  1037      case SQLITE_TEXT: {
  1038        int i,j;
  1039        u64 n;
  1040        const unsigned char *zArg = sqlite3_value_text(argv[0]);
  1041        char *z;
  1042  
  1043        if( zArg==0 ) return;
  1044        for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
  1045        z = contextMalloc(context, ((i64)i)+((i64)n)+3);
  1046        if( z ){
  1047          z[0] = '\'';
  1048          for(i=0, j=1; zArg[i]; i++){
  1049            z[j++] = zArg[i];
  1050            if( zArg[i]=='\'' ){
  1051              z[j++] = '\'';
  1052            }
  1053          }
  1054          z[j++] = '\'';
  1055          z[j] = 0;
  1056          sqlite3_result_text(context, z, j, sqlite3_free);
  1057        }
  1058        break;
  1059      }
  1060      default: {
  1061        assert( sqlite3_value_type(argv[0])==SQLITE_NULL );
  1062        sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
  1063        break;
  1064      }
  1065    }
  1066  }
  1067  
  1068  /*
  1069  ** The unicode() function.  Return the integer unicode code-point value
  1070  ** for the first character of the input string. 
  1071  */
  1072  static void unicodeFunc(
  1073    sqlite3_context *context,
  1074    int argc,
  1075    sqlite3_value **argv
  1076  ){
  1077    const unsigned char *z = sqlite3_value_text(argv[0]);
  1078    (void)argc;
  1079    if( z && z[0] ) sqlite3_result_int(context, sqlite3Utf8Read(&z));
  1080  }
  1081  
  1082  /*
  1083  ** The char() function takes zero or more arguments, each of which is
  1084  ** an integer.  It constructs a string where each character of the string
  1085  ** is the unicode character for the corresponding integer argument.
  1086  */
  1087  static void charFunc(
  1088    sqlite3_context *context,
  1089    int argc,
  1090    sqlite3_value **argv
  1091  ){
  1092    unsigned char *z, *zOut;
  1093    int i;
  1094    zOut = z = sqlite3_malloc64( argc*4+1 );
  1095    if( z==0 ){
  1096      sqlite3_result_error_nomem(context);
  1097      return;
  1098    }
  1099    for(i=0; i<argc; i++){
  1100      sqlite3_int64 x;
  1101      unsigned c;
  1102      x = sqlite3_value_int64(argv[i]);
  1103      if( x<0 || x>0x10ffff ) x = 0xfffd;
  1104      c = (unsigned)(x & 0x1fffff);
  1105      if( c<0x00080 ){
  1106        *zOut++ = (u8)(c&0xFF);
  1107      }else if( c<0x00800 ){
  1108        *zOut++ = 0xC0 + (u8)((c>>6)&0x1F);
  1109        *zOut++ = 0x80 + (u8)(c & 0x3F);
  1110      }else if( c<0x10000 ){
  1111        *zOut++ = 0xE0 + (u8)((c>>12)&0x0F);
  1112        *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
  1113        *zOut++ = 0x80 + (u8)(c & 0x3F);
  1114      }else{
  1115        *zOut++ = 0xF0 + (u8)((c>>18) & 0x07);
  1116        *zOut++ = 0x80 + (u8)((c>>12) & 0x3F);
  1117        *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
  1118        *zOut++ = 0x80 + (u8)(c & 0x3F);
  1119      }                                                    \
  1120    }
  1121    sqlite3_result_text64(context, (char*)z, zOut-z, sqlite3_free, SQLITE_UTF8);
  1122  }
  1123  
  1124  /*
  1125  ** The hex() function.  Interpret the argument as a blob.  Return
  1126  ** a hexadecimal rendering as text.
  1127  */
  1128  static void hexFunc(
  1129    sqlite3_context *context,
  1130    int argc,
  1131    sqlite3_value **argv
  1132  ){
  1133    int i, n;
  1134    const unsigned char *pBlob;
  1135    char *zHex, *z;
  1136    assert( argc==1 );
  1137    UNUSED_PARAMETER(argc);
  1138    pBlob = sqlite3_value_blob(argv[0]);
  1139    n = sqlite3_value_bytes(argv[0]);
  1140    assert( pBlob==sqlite3_value_blob(argv[0]) );  /* No encoding change */
  1141    z = zHex = contextMalloc(context, ((i64)n)*2 + 1);
  1142    if( zHex ){
  1143      for(i=0; i<n; i++, pBlob++){
  1144        unsigned char c = *pBlob;
  1145        *(z++) = hexdigits[(c>>4)&0xf];
  1146        *(z++) = hexdigits[c&0xf];
  1147      }
  1148      *z = 0;
  1149      sqlite3_result_text(context, zHex, n*2, sqlite3_free);
  1150    }
  1151  }
  1152  
  1153  /*
  1154  ** The zeroblob(N) function returns a zero-filled blob of size N bytes.
  1155  */
  1156  static void zeroblobFunc(
  1157    sqlite3_context *context,
  1158    int argc,
  1159    sqlite3_value **argv
  1160  ){
  1161    i64 n;
  1162    int rc;
  1163    assert( argc==1 );
  1164    UNUSED_PARAMETER(argc);
  1165    n = sqlite3_value_int64(argv[0]);
  1166    if( n<0 ) n = 0;
  1167    rc = sqlite3_result_zeroblob64(context, n); /* IMP: R-00293-64994 */
  1168    if( rc ){
  1169      sqlite3_result_error_code(context, rc);
  1170    }
  1171  }
  1172  
  1173  /*
  1174  ** The replace() function.  Three arguments are all strings: call
  1175  ** them A, B, and C. The result is also a string which is derived
  1176  ** from A by replacing every occurrence of B with C.  The match
  1177  ** must be exact.  Collating sequences are not used.
  1178  */
  1179  static void replaceFunc(
  1180    sqlite3_context *context,
  1181    int argc,
  1182    sqlite3_value **argv
  1183  ){
  1184    const unsigned char *zStr;        /* The input string A */
  1185    const unsigned char *zPattern;    /* The pattern string B */
  1186    const unsigned char *zRep;        /* The replacement string C */
  1187    unsigned char *zOut;              /* The output */
  1188    int nStr;                /* Size of zStr */
  1189    int nPattern;            /* Size of zPattern */
  1190    int nRep;                /* Size of zRep */
  1191    i64 nOut;                /* Maximum size of zOut */
  1192    int loopLimit;           /* Last zStr[] that might match zPattern[] */
  1193    int i, j;                /* Loop counters */
  1194  
  1195    assert( argc==3 );
  1196    UNUSED_PARAMETER(argc);
  1197    zStr = sqlite3_value_text(argv[0]);
  1198    if( zStr==0 ) return;
  1199    nStr = sqlite3_value_bytes(argv[0]);
  1200    assert( zStr==sqlite3_value_text(argv[0]) );  /* No encoding change */
  1201    zPattern = sqlite3_value_text(argv[1]);
  1202    if( zPattern==0 ){
  1203      assert( sqlite3_value_type(argv[1])==SQLITE_NULL
  1204              || sqlite3_context_db_handle(context)->mallocFailed );
  1205      return;
  1206    }
  1207    if( zPattern[0]==0 ){
  1208      assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
  1209      sqlite3_result_value(context, argv[0]);
  1210      return;
  1211    }
  1212    nPattern = sqlite3_value_bytes(argv[1]);
  1213    assert( zPattern==sqlite3_value_text(argv[1]) );  /* No encoding change */
  1214    zRep = sqlite3_value_text(argv[2]);
  1215    if( zRep==0 ) return;
  1216    nRep = sqlite3_value_bytes(argv[2]);
  1217    assert( zRep==sqlite3_value_text(argv[2]) );
  1218    nOut = nStr + 1;
  1219    assert( nOut<SQLITE_MAX_LENGTH );
  1220    zOut = contextMalloc(context, (i64)nOut);
  1221    if( zOut==0 ){
  1222      return;
  1223    }
  1224    loopLimit = nStr - nPattern;  
  1225    for(i=j=0; i<=loopLimit; i++){
  1226      if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
  1227        zOut[j++] = zStr[i];
  1228      }else{
  1229        u8 *zOld;
  1230        sqlite3 *db = sqlite3_context_db_handle(context);
  1231        nOut += nRep - nPattern;
  1232        testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
  1233        testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
  1234        if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
  1235          sqlite3_result_error_toobig(context);
  1236          sqlite3_free(zOut);
  1237          return;
  1238        }
  1239        zOld = zOut;
  1240        zOut = sqlite3_realloc64(zOut, (int)nOut);
  1241        if( zOut==0 ){
  1242          sqlite3_result_error_nomem(context);
  1243          sqlite3_free(zOld);
  1244          return;
  1245        }
  1246        memcpy(&zOut[j], zRep, nRep);
  1247        j += nRep;
  1248        i += nPattern-1;
  1249      }
  1250    }
  1251    assert( j+nStr-i+1==nOut );
  1252    memcpy(&zOut[j], &zStr[i], nStr-i);
  1253    j += nStr - i;
  1254    assert( j<=nOut );
  1255    zOut[j] = 0;
  1256    sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
  1257  }
  1258  
  1259  /*
  1260  ** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
  1261  ** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
  1262  */
  1263  static void trimFunc(
  1264    sqlite3_context *context,
  1265    int argc,
  1266    sqlite3_value **argv
  1267  ){
  1268    const unsigned char *zIn;         /* Input string */
  1269    const unsigned char *zCharSet;    /* Set of characters to trim */
  1270    int nIn;                          /* Number of bytes in input */
  1271    int flags;                        /* 1: trimleft  2: trimright  3: trim */
  1272    int i;                            /* Loop counter */
  1273    unsigned char *aLen = 0;          /* Length of each character in zCharSet */
  1274    unsigned char **azChar = 0;       /* Individual characters in zCharSet */
  1275    int nChar;                        /* Number of characters in zCharSet */
  1276  
  1277    if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
  1278      return;
  1279    }
  1280    zIn = sqlite3_value_text(argv[0]);
  1281    if( zIn==0 ) return;
  1282    nIn = sqlite3_value_bytes(argv[0]);
  1283    assert( zIn==sqlite3_value_text(argv[0]) );
  1284    if( argc==1 ){
  1285      static const unsigned char lenOne[] = { 1 };
  1286      static unsigned char * const azOne[] = { (u8*)" " };
  1287      nChar = 1;
  1288      aLen = (u8*)lenOne;
  1289      azChar = (unsigned char **)azOne;
  1290      zCharSet = 0;
  1291    }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
  1292      return;
  1293    }else{
  1294      const unsigned char *z;
  1295      for(z=zCharSet, nChar=0; *z; nChar++){
  1296        SQLITE_SKIP_UTF8(z);
  1297      }
  1298      if( nChar>0 ){
  1299        azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));
  1300        if( azChar==0 ){
  1301          return;
  1302        }
  1303        aLen = (unsigned char*)&azChar[nChar];
  1304        for(z=zCharSet, nChar=0; *z; nChar++){
  1305          azChar[nChar] = (unsigned char *)z;
  1306          SQLITE_SKIP_UTF8(z);
  1307          aLen[nChar] = (u8)(z - azChar[nChar]);
  1308        }
  1309      }
  1310    }
  1311    if( nChar>0 ){
  1312      flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
  1313      if( flags & 1 ){
  1314        while( nIn>0 ){
  1315          int len = 0;
  1316          for(i=0; i<nChar; i++){
  1317            len = aLen[i];
  1318            if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
  1319          }
  1320          if( i>=nChar ) break;
  1321          zIn += len;
  1322          nIn -= len;
  1323        }
  1324      }
  1325      if( flags & 2 ){
  1326        while( nIn>0 ){
  1327          int len = 0;
  1328          for(i=0; i<nChar; i++){
  1329            len = aLen[i];
  1330            if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
  1331          }
  1332          if( i>=nChar ) break;
  1333          nIn -= len;
  1334        }
  1335      }
  1336      if( zCharSet ){
  1337        sqlite3_free(azChar);
  1338      }
  1339    }
  1340    sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
  1341  }
  1342  
  1343  
  1344  #ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
  1345  /*
  1346  ** The "unknown" function is automatically substituted in place of
  1347  ** any unrecognized function name when doing an EXPLAIN or EXPLAIN QUERY PLAN
  1348  ** when the SQLITE_ENABLE_UNKNOWN_FUNCTION compile-time option is used.
  1349  ** When the "sqlite3" command-line shell is built using this functionality,
  1350  ** that allows an EXPLAIN or EXPLAIN QUERY PLAN for complex queries
  1351  ** involving application-defined functions to be examined in a generic
  1352  ** sqlite3 shell.
  1353  */
  1354  static void unknownFunc(
  1355    sqlite3_context *context,
  1356    int argc,
  1357    sqlite3_value **argv
  1358  ){
  1359    /* no-op */
  1360  }
  1361  #endif /*SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION*/
  1362  
  1363  
  1364  /* IMP: R-25361-16150 This function is omitted from SQLite by default. It
  1365  ** is only available if the SQLITE_SOUNDEX compile-time option is used
  1366  ** when SQLite is built.
  1367  */
  1368  #ifdef SQLITE_SOUNDEX
  1369  /*
  1370  ** Compute the soundex encoding of a word.
  1371  **
  1372  ** IMP: R-59782-00072 The soundex(X) function returns a string that is the
  1373  ** soundex encoding of the string X. 
  1374  */
  1375  static void soundexFunc(
  1376    sqlite3_context *context,
  1377    int argc,
  1378    sqlite3_value **argv
  1379  ){
  1380    char zResult[8];
  1381    const u8 *zIn;
  1382    int i, j;
  1383    static const unsigned char iCode[] = {
  1384      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  1385      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  1386      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  1387      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  1388      0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
  1389      1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
  1390      0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
  1391      1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
  1392    };
  1393    assert( argc==1 );
  1394    zIn = (u8*)sqlite3_value_text(argv[0]);
  1395    if( zIn==0 ) zIn = (u8*)"";
  1396    for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
  1397    if( zIn[i] ){
  1398      u8 prevcode = iCode[zIn[i]&0x7f];
  1399      zResult[0] = sqlite3Toupper(zIn[i]);
  1400      for(j=1; j<4 && zIn[i]; i++){
  1401        int code = iCode[zIn[i]&0x7f];
  1402        if( code>0 ){
  1403          if( code!=prevcode ){
  1404            prevcode = code;
  1405            zResult[j++] = code + '0';
  1406          }
  1407        }else{
  1408          prevcode = 0;
  1409        }
  1410      }
  1411      while( j<4 ){
  1412        zResult[j++] = '0';
  1413      }
  1414      zResult[j] = 0;
  1415      sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
  1416    }else{
  1417      /* IMP: R-64894-50321 The string "?000" is returned if the argument
  1418      ** is NULL or contains no ASCII alphabetic characters. */
  1419      sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
  1420    }
  1421  }
  1422  #endif /* SQLITE_SOUNDEX */
  1423  
  1424  #ifndef SQLITE_OMIT_LOAD_EXTENSION
  1425  /*
  1426  ** A function that loads a shared-library extension then returns NULL.
  1427  */
  1428  static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
  1429    const char *zFile = (const char *)sqlite3_value_text(argv[0]);
  1430    const char *zProc;
  1431    sqlite3 *db = sqlite3_context_db_handle(context);
  1432    char *zErrMsg = 0;
  1433  
  1434    /* Disallow the load_extension() SQL function unless the SQLITE_LoadExtFunc
  1435    ** flag is set.  See the sqlite3_enable_load_extension() API.
  1436    */
  1437    if( (db->flags & SQLITE_LoadExtFunc)==0 ){
  1438      sqlite3_result_error(context, "not authorized", -1);
  1439      return;
  1440    }
  1441  
  1442    if( argc==2 ){
  1443      zProc = (const char *)sqlite3_value_text(argv[1]);
  1444    }else{
  1445      zProc = 0;
  1446    }
  1447    if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
  1448      sqlite3_result_error(context, zErrMsg, -1);
  1449      sqlite3_free(zErrMsg);
  1450    }
  1451  }
  1452  #endif
  1453  
  1454  
  1455  /*
  1456  ** An instance of the following structure holds the context of a
  1457  ** sum() or avg() aggregate computation.
  1458  */
  1459  typedef struct SumCtx SumCtx;
  1460  struct SumCtx {
  1461    double rSum;      /* Floating point sum */
  1462    i64 iSum;         /* Integer sum */   
  1463    i64 cnt;          /* Number of elements summed */
  1464    u8 overflow;      /* True if integer overflow seen */
  1465    u8 approx;        /* True if non-integer value was input to the sum */
  1466  };
  1467  
  1468  /*
  1469  ** Routines used to compute the sum, average, and total.
  1470  **
  1471  ** The SUM() function follows the (broken) SQL standard which means
  1472  ** that it returns NULL if it sums over no inputs.  TOTAL returns
  1473  ** 0.0 in that case.  In addition, TOTAL always returns a float where
  1474  ** SUM might return an integer if it never encounters a floating point
  1475  ** value.  TOTAL never fails, but SUM might through an exception if
  1476  ** it overflows an integer.
  1477  */
  1478  static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
  1479    SumCtx *p;
  1480    int type;
  1481    assert( argc==1 );
  1482    UNUSED_PARAMETER(argc);
  1483    p = sqlite3_aggregate_context(context, sizeof(*p));
  1484    type = sqlite3_value_numeric_type(argv[0]);
  1485    if( p && type!=SQLITE_NULL ){
  1486      p->cnt++;
  1487      if( type==SQLITE_INTEGER ){
  1488        i64 v = sqlite3_value_int64(argv[0]);
  1489        p->rSum += v;
  1490        if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){
  1491          p->overflow = 1;
  1492        }
  1493      }else{
  1494        p->rSum += sqlite3_value_double(argv[0]);
  1495        p->approx = 1;
  1496      }
  1497    }
  1498  }
  1499  static void sumFinalize(sqlite3_context *context){
  1500    SumCtx *p;
  1501    p = sqlite3_aggregate_context(context, 0);
  1502    if( p && p->cnt>0 ){
  1503      if( p->overflow ){
  1504        sqlite3_result_error(context,"integer overflow",-1);
  1505      }else if( p->approx ){
  1506        sqlite3_result_double(context, p->rSum);
  1507      }else{
  1508        sqlite3_result_int64(context, p->iSum);
  1509      }
  1510    }
  1511  }
  1512  static void avgFinalize(sqlite3_context *context){
  1513    SumCtx *p;
  1514    p = sqlite3_aggregate_context(context, 0);
  1515    if( p && p->cnt>0 ){
  1516      sqlite3_result_double(context, p->rSum/(double)p->cnt);
  1517    }
  1518  }
  1519  static void totalFinalize(sqlite3_context *context){
  1520    SumCtx *p;
  1521    p = sqlite3_aggregate_context(context, 0);
  1522    /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
  1523    sqlite3_result_double(context, p ? p->rSum : (double)0);
  1524  }
  1525  
  1526  /*
  1527  ** The following structure keeps track of state information for the
  1528  ** count() aggregate function.
  1529  */
  1530  typedef struct CountCtx CountCtx;
  1531  struct CountCtx {
  1532    i64 n;
  1533  };
  1534  
  1535  /*
  1536  ** Routines to implement the count() aggregate function.
  1537  */
  1538  static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
  1539    CountCtx *p;
  1540    p = sqlite3_aggregate_context(context, sizeof(*p));
  1541    if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
  1542      p->n++;
  1543    }
  1544  
  1545  #ifndef SQLITE_OMIT_DEPRECATED
  1546    /* The sqlite3_aggregate_count() function is deprecated.  But just to make
  1547    ** sure it still operates correctly, verify that its count agrees with our 
  1548    ** internal count when using count(*) and when the total count can be
  1549    ** expressed as a 32-bit integer. */
  1550    assert( argc==1 || p==0 || p->n>0x7fffffff
  1551            || p->n==sqlite3_aggregate_count(context) );
  1552  #endif
  1553  }   
  1554  static void countFinalize(sqlite3_context *context){
  1555    CountCtx *p;
  1556    p = sqlite3_aggregate_context(context, 0);
  1557    sqlite3_result_int64(context, p ? p->n : 0);
  1558  }
  1559  
  1560  /*
  1561  ** Routines to implement min() and max() aggregate functions.
  1562  */
  1563  static void minmaxStep(
  1564    sqlite3_context *context, 
  1565    int NotUsed, 
  1566    sqlite3_value **argv
  1567  ){
  1568    Mem *pArg  = (Mem *)argv[0];
  1569    Mem *pBest;
  1570    UNUSED_PARAMETER(NotUsed);
  1571  
  1572    pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
  1573    if( !pBest ) return;
  1574  
  1575    if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
  1576      if( pBest->flags ) sqlite3SkipAccumulatorLoad(context);
  1577    }else if( pBest->flags ){
  1578      int max;
  1579      int cmp;
  1580      CollSeq *pColl = sqlite3GetFuncCollSeq(context);
  1581      /* This step function is used for both the min() and max() aggregates,
  1582      ** the only difference between the two being that the sense of the
  1583      ** comparison is inverted. For the max() aggregate, the
  1584      ** sqlite3_user_data() function returns (void *)-1. For min() it
  1585      ** returns (void *)db, where db is the sqlite3* database pointer.
  1586      ** Therefore the next statement sets variable 'max' to 1 for the max()
  1587      ** aggregate, or 0 for min().
  1588      */
  1589      max = sqlite3_user_data(context)!=0;
  1590      cmp = sqlite3MemCompare(pBest, pArg, pColl);
  1591      if( (max && cmp<0) || (!max && cmp>0) ){
  1592        sqlite3VdbeMemCopy(pBest, pArg);
  1593      }else{
  1594        sqlite3SkipAccumulatorLoad(context);
  1595      }
  1596    }else{
  1597      pBest->db = sqlite3_context_db_handle(context);
  1598      sqlite3VdbeMemCopy(pBest, pArg);
  1599    }
  1600  }
  1601  static void minMaxFinalize(sqlite3_context *context){
  1602    sqlite3_value *pRes;
  1603    pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
  1604    if( pRes ){
  1605      if( pRes->flags ){
  1606        sqlite3_result_value(context, pRes);
  1607      }
  1608      sqlite3VdbeMemRelease(pRes);
  1609    }
  1610  }
  1611  
  1612  /*
  1613  ** group_concat(EXPR, ?SEPARATOR?)
  1614  */
  1615  static void groupConcatStep(
  1616    sqlite3_context *context,
  1617    int argc,
  1618    sqlite3_value **argv
  1619  ){
  1620    const char *zVal;
  1621    StrAccum *pAccum;
  1622    const char *zSep;
  1623    int nVal, nSep;
  1624    assert( argc==1 || argc==2 );
  1625    if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
  1626    pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
  1627  
  1628    if( pAccum ){
  1629      sqlite3 *db = sqlite3_context_db_handle(context);
  1630      int firstTerm = pAccum->mxAlloc==0;
  1631      pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
  1632      if( !firstTerm ){
  1633        if( argc==2 ){
  1634          zSep = (char*)sqlite3_value_text(argv[1]);
  1635          nSep = sqlite3_value_bytes(argv[1]);
  1636        }else{
  1637          zSep = ",";
  1638          nSep = 1;
  1639        }
  1640        if( zSep ) sqlite3StrAccumAppend(pAccum, zSep, nSep);
  1641      }
  1642      zVal = (char*)sqlite3_value_text(argv[0]);
  1643      nVal = sqlite3_value_bytes(argv[0]);
  1644      if( zVal ) sqlite3StrAccumAppend(pAccum, zVal, nVal);
  1645    }
  1646  }
  1647  static void groupConcatFinalize(sqlite3_context *context){
  1648    StrAccum *pAccum;
  1649    pAccum = sqlite3_aggregate_context(context, 0);
  1650    if( pAccum ){
  1651      if( pAccum->accError==STRACCUM_TOOBIG ){
  1652        sqlite3_result_error_toobig(context);
  1653      }else if( pAccum->accError==STRACCUM_NOMEM ){
  1654        sqlite3_result_error_nomem(context);
  1655      }else{    
  1656        sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1, 
  1657                            sqlite3_free);
  1658      }
  1659    }
  1660  }
  1661  
  1662  /*
  1663  ** This routine does per-connection function registration.  Most
  1664  ** of the built-in functions above are part of the global function set.
  1665  ** This routine only deals with those that are not global.
  1666  */
  1667  void sqlite3RegisterPerConnectionBuiltinFunctions(sqlite3 *db){
  1668    int rc = sqlite3_overload_function(db, "MATCH", 2);
  1669    assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
  1670    if( rc==SQLITE_NOMEM ){
  1671      sqlite3OomFault(db);
  1672    }
  1673  }
  1674  
  1675  /*
  1676  ** Set the LIKEOPT flag on the 2-argument function with the given name.
  1677  */
  1678  static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
  1679    FuncDef *pDef;
  1680    pDef = sqlite3FindFunction(db, zName, 2, SQLITE_UTF8, 0);
  1681    if( ALWAYS(pDef) ){
  1682      pDef->funcFlags |= flagVal;
  1683    }
  1684  }
  1685  
  1686  /*
  1687  ** Register the built-in LIKE and GLOB functions.  The caseSensitive
  1688  ** parameter determines whether or not the LIKE operator is case
  1689  ** sensitive.  GLOB is always case sensitive.
  1690  */
  1691  void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
  1692    struct compareInfo *pInfo;
  1693    if( caseSensitive ){
  1694      pInfo = (struct compareInfo*)&likeInfoAlt;
  1695    }else{
  1696      pInfo = (struct compareInfo*)&likeInfoNorm;
  1697    }
  1698    sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
  1699    sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
  1700    sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8, 
  1701        (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0);
  1702    setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
  1703    setLikeOptFlag(db, "like", 
  1704        caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
  1705  }
  1706  
  1707  /*
  1708  ** pExpr points to an expression which implements a function.  If
  1709  ** it is appropriate to apply the LIKE optimization to that function
  1710  ** then set aWc[0] through aWc[2] to the wildcard characters and the
  1711  ** escape character and then return TRUE.  If the function is not a 
  1712  ** LIKE-style function then return FALSE.
  1713  **
  1714  ** The expression "a LIKE b ESCAPE c" is only considered a valid LIKE
  1715  ** operator if c is a string literal that is exactly one byte in length.
  1716  ** That one byte is stored in aWc[3].  aWc[3] is set to zero if there is
  1717  ** no ESCAPE clause.
  1718  **
  1719  ** *pIsNocase is set to true if uppercase and lowercase are equivalent for
  1720  ** the function (default for LIKE).  If the function makes the distinction
  1721  ** between uppercase and lowercase (as does GLOB) then *pIsNocase is set to
  1722  ** false.
  1723  */
  1724  int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
  1725    FuncDef *pDef;
  1726    int nExpr;
  1727    if( pExpr->op!=TK_FUNCTION || !pExpr->x.pList ){
  1728      return 0;
  1729    }
  1730    assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
  1731    nExpr = pExpr->x.pList->nExpr;
  1732    pDef = sqlite3FindFunction(db, pExpr->u.zToken, nExpr, SQLITE_UTF8, 0);
  1733    if( NEVER(pDef==0) || (pDef->funcFlags & SQLITE_FUNC_LIKE)==0 ){
  1734      return 0;
  1735    }
  1736    if( nExpr<3 ){
  1737      aWc[3] = 0;
  1738    }else{
  1739      Expr *pEscape = pExpr->x.pList->a[2].pExpr;
  1740      char *zEscape;
  1741      if( pEscape->op!=TK_STRING ) return 0;
  1742      zEscape = pEscape->u.zToken;
  1743      if( zEscape[0]==0 || zEscape[1]!=0 ) return 0;
  1744      aWc[3] = zEscape[0];
  1745    }
  1746  
  1747    /* The memcpy() statement assumes that the wildcard characters are
  1748    ** the first three statements in the compareInfo structure.  The
  1749    ** asserts() that follow verify that assumption
  1750    */
  1751    memcpy(aWc, pDef->pUserData, 3);
  1752    assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
  1753    assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
  1754    assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
  1755    *pIsNocase = (pDef->funcFlags & SQLITE_FUNC_CASE)==0;
  1756    return 1;
  1757  }
  1758  
  1759  /*
  1760  ** All of the FuncDef structures in the aBuiltinFunc[] array above
  1761  ** to the global function hash table.  This occurs at start-time (as
  1762  ** a consequence of calling sqlite3_initialize()).
  1763  **
  1764  ** After this routine runs
  1765  */
  1766  void sqlite3RegisterBuiltinFunctions(void){
  1767    /*
  1768    ** The following array holds FuncDef structures for all of the functions
  1769    ** defined in this file.
  1770    **
  1771    ** The array cannot be constant since changes are made to the
  1772    ** FuncDef.pHash elements at start-time.  The elements of this array
  1773    ** are read-only after initialization is complete.
  1774    **
  1775    ** For peak efficiency, put the most frequently used function last.
  1776    */
  1777    static FuncDef aBuiltinFunc[] = {
  1778  #ifdef SQLITE_SOUNDEX
  1779      FUNCTION(soundex,            1, 0, 0, soundexFunc      ),
  1780  #endif
  1781  #ifndef SQLITE_OMIT_LOAD_EXTENSION
  1782      VFUNCTION(load_extension,    1, 0, 0, loadExt          ),
  1783      VFUNCTION(load_extension,    2, 0, 0, loadExt          ),
  1784  #endif
  1785  #if SQLITE_USER_AUTHENTICATION
  1786      FUNCTION(sqlite_crypt,       2, 0, 0, sqlite3CryptFunc ),
  1787  #endif
  1788  #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
  1789      DFUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc  ),
  1790      DFUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc  ),
  1791  #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
  1792      FUNCTION2(unlikely,          1, 0, 0, noopFunc,  SQLITE_FUNC_UNLIKELY),
  1793      FUNCTION2(likelihood,        2, 0, 0, noopFunc,  SQLITE_FUNC_UNLIKELY),
  1794      FUNCTION2(likely,            1, 0, 0, noopFunc,  SQLITE_FUNC_UNLIKELY),
  1795  #ifdef SQLITE_DEBUG
  1796      FUNCTION2(affinity,          1, 0, 0, noopFunc,  SQLITE_FUNC_AFFINITY),
  1797  #endif
  1798      FUNCTION(ltrim,              1, 1, 0, trimFunc         ),
  1799      FUNCTION(ltrim,              2, 1, 0, trimFunc         ),
  1800      FUNCTION(rtrim,              1, 2, 0, trimFunc         ),
  1801      FUNCTION(rtrim,              2, 2, 0, trimFunc         ),
  1802      FUNCTION(trim,               1, 3, 0, trimFunc         ),
  1803      FUNCTION(trim,               2, 3, 0, trimFunc         ),
  1804      FUNCTION(min,               -1, 0, 1, minmaxFunc       ),
  1805      FUNCTION(min,                0, 0, 1, 0                ),
  1806      AGGREGATE2(min,              1, 0, 1, minmaxStep,      minMaxFinalize,
  1807                                            SQLITE_FUNC_MINMAX ),
  1808      FUNCTION(max,               -1, 1, 1, minmaxFunc       ),
  1809      FUNCTION(max,                0, 1, 1, 0                ),
  1810      AGGREGATE2(max,              1, 1, 1, minmaxStep,      minMaxFinalize,
  1811                                            SQLITE_FUNC_MINMAX ),
  1812      FUNCTION2(typeof,            1, 0, 0, typeofFunc,  SQLITE_FUNC_TYPEOF),
  1813      FUNCTION2(length,            1, 0, 0, lengthFunc,  SQLITE_FUNC_LENGTH),
  1814      FUNCTION(instr,              2, 0, 0, instrFunc        ),
  1815      FUNCTION(printf,            -1, 0, 0, printfFunc       ),
  1816      FUNCTION(unicode,            1, 0, 0, unicodeFunc      ),
  1817      FUNCTION(char,              -1, 0, 0, charFunc         ),
  1818      FUNCTION(abs,                1, 0, 0, absFunc          ),
  1819  #ifndef SQLITE_OMIT_FLOATING_POINT
  1820      FUNCTION(round,              1, 0, 0, roundFunc        ),
  1821      FUNCTION(round,              2, 0, 0, roundFunc        ),
  1822  #endif
  1823      FUNCTION(upper,              1, 0, 0, upperFunc        ),
  1824      FUNCTION(lower,              1, 0, 0, lowerFunc        ),
  1825      FUNCTION(hex,                1, 0, 0, hexFunc          ),
  1826      FUNCTION2(ifnull,            2, 0, 0, noopFunc,  SQLITE_FUNC_COALESCE),
  1827      VFUNCTION(random,            0, 0, 0, randomFunc       ),
  1828      VFUNCTION(randomblob,        1, 0, 0, randomBlob       ),
  1829      FUNCTION(nullif,             2, 0, 1, nullifFunc       ),
  1830      DFUNCTION(sqlite_version,    0, 0, 0, versionFunc      ),
  1831      DFUNCTION(sqlite_source_id,  0, 0, 0, sourceidFunc     ),
  1832      FUNCTION(sqlite_log,         2, 0, 0, errlogFunc       ),
  1833      FUNCTION(quote,              1, 0, 0, quoteFunc        ),
  1834      VFUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid),
  1835      VFUNCTION(changes,           0, 0, 0, changes          ),
  1836      VFUNCTION(total_changes,     0, 0, 0, total_changes    ),
  1837      FUNCTION(replace,            3, 0, 0, replaceFunc      ),
  1838      FUNCTION(zeroblob,           1, 0, 0, zeroblobFunc     ),
  1839      FUNCTION(substr,             2, 0, 0, substrFunc       ),
  1840      FUNCTION(substr,             3, 0, 0, substrFunc       ),
  1841      AGGREGATE(sum,               1, 0, 0, sumStep,         sumFinalize    ),
  1842      AGGREGATE(total,             1, 0, 0, sumStep,         totalFinalize    ),
  1843      AGGREGATE(avg,               1, 0, 0, sumStep,         avgFinalize    ),
  1844      AGGREGATE2(count,            0, 0, 0, countStep,       countFinalize,
  1845                 SQLITE_FUNC_COUNT  ),
  1846      AGGREGATE(count,             1, 0, 0, countStep,       countFinalize  ),
  1847      AGGREGATE(group_concat,      1, 0, 0, groupConcatStep, groupConcatFinalize),
  1848      AGGREGATE(group_concat,      2, 0, 0, groupConcatStep, groupConcatFinalize),
  1849    
  1850      LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
  1851  #ifdef SQLITE_CASE_SENSITIVE_LIKE
  1852      LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
  1853      LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
  1854  #else
  1855      LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
  1856      LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
  1857  #endif
  1858  #ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
  1859      FUNCTION(unknown,           -1, 0, 0, unknownFunc      ),
  1860  #endif
  1861      FUNCTION(coalesce,           1, 0, 0, 0                ),
  1862      FUNCTION(coalesce,           0, 0, 0, 0                ),
  1863      FUNCTION2(coalesce,         -1, 0, 0, noopFunc,  SQLITE_FUNC_COALESCE),
  1864    };
  1865  #ifndef SQLITE_OMIT_ALTERTABLE
  1866    sqlite3AlterFunctions();
  1867  #endif
  1868  #if defined(SQLITE_ENABLE_STAT3) || defined(SQLITE_ENABLE_STAT4)
  1869    sqlite3AnalyzeFunctions();
  1870  #endif
  1871    sqlite3RegisterDateTimeFunctions();
  1872    sqlite3InsertBuiltinFuncs(aBuiltinFunc, ArraySize(aBuiltinFunc));
  1873  
  1874  #if 0  /* Enable to print out how the built-in functions are hashed */
  1875    {
  1876      int i;
  1877      FuncDef *p;
  1878      for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){
  1879        printf("FUNC-HASH %02d:", i);
  1880        for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash){
  1881          int n = sqlite3Strlen30(p->zName);
  1882          int h = p->zName[0] + n;
  1883          printf(" %s(%d)", p->zName, h);
  1884        }
  1885        printf("\n");
  1886      }
  1887    }
  1888  #endif
  1889  }