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

     1  /*
     2  ** 2004 May 26
     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  **
    13  ** This file contains code use to manipulate "Mem" structure.  A "Mem"
    14  ** stores a single value in the VDBE.  Mem is an opaque structure visible
    15  ** only within the VDBE.  Interface routines refer to a Mem using the
    16  ** name sqlite_value
    17  */
    18  #include "sqliteInt.h"
    19  #include "vdbeInt.h"
    20  
    21  #ifdef SQLITE_DEBUG
    22  /*
    23  ** Check invariants on a Mem object.
    24  **
    25  ** This routine is intended for use inside of assert() statements, like
    26  ** this:    assert( sqlite3VdbeCheckMemInvariants(pMem) );
    27  */
    28  int sqlite3VdbeCheckMemInvariants(Mem *p){
    29    /* If MEM_Dyn is set then Mem.xDel!=0.  
    30    ** Mem.xDel might not be initialized if MEM_Dyn is clear.
    31    */
    32    assert( (p->flags & MEM_Dyn)==0 || p->xDel!=0 );
    33  
    34    /* MEM_Dyn may only be set if Mem.szMalloc==0.  In this way we
    35    ** ensure that if Mem.szMalloc>0 then it is safe to do
    36    ** Mem.z = Mem.zMalloc without having to check Mem.flags&MEM_Dyn.
    37    ** That saves a few cycles in inner loops. */
    38    assert( (p->flags & MEM_Dyn)==0 || p->szMalloc==0 );
    39  
    40    /* Cannot be both MEM_Int and MEM_Real at the same time */
    41    assert( (p->flags & (MEM_Int|MEM_Real))!=(MEM_Int|MEM_Real) );
    42  
    43    if( p->flags & MEM_Null ){
    44      /* Cannot be both MEM_Null and some other type */
    45      assert( (p->flags & (MEM_Int|MEM_Real|MEM_Str|MEM_Blob
    46                           |MEM_RowSet|MEM_Frame|MEM_Agg|MEM_Zero))==0 );
    47  
    48      /* If MEM_Null is set, then either the value is a pure NULL (the usual
    49      ** case) or it is a pointer set using sqlite3_bind_pointer() or
    50      ** sqlite3_result_pointer().  If a pointer, then MEM_Term must also be
    51      ** set.
    52      */
    53      if( (p->flags & (MEM_Term|MEM_Subtype))==(MEM_Term|MEM_Subtype) ){
    54        /* This is a pointer type.  There may be a flag to indicate what to
    55        ** do with the pointer. */
    56        assert( ((p->flags&MEM_Dyn)!=0 ? 1 : 0) +
    57                ((p->flags&MEM_Ephem)!=0 ? 1 : 0) +
    58                ((p->flags&MEM_Static)!=0 ? 1 : 0) <= 1 );
    59  
    60        /* No other bits set */
    61        assert( (p->flags & ~(MEM_Null|MEM_Term|MEM_Subtype
    62                             |MEM_Dyn|MEM_Ephem|MEM_Static))==0 );
    63      }else{
    64        /* A pure NULL might have other flags, such as MEM_Static, MEM_Dyn,
    65        ** MEM_Ephem, MEM_Cleared, or MEM_Subtype */
    66      }
    67    }else{
    68      /* The MEM_Cleared bit is only allowed on NULLs */
    69      assert( (p->flags & MEM_Cleared)==0 );
    70    }
    71  
    72    /* The szMalloc field holds the correct memory allocation size */
    73    assert( p->szMalloc==0
    74         || p->szMalloc==sqlite3DbMallocSize(p->db,p->zMalloc) );
    75  
    76    /* If p holds a string or blob, the Mem.z must point to exactly
    77    ** one of the following:
    78    **
    79    **   (1) Memory in Mem.zMalloc and managed by the Mem object
    80    **   (2) Memory to be freed using Mem.xDel
    81    **   (3) An ephemeral string or blob
    82    **   (4) A static string or blob
    83    */
    84    if( (p->flags & (MEM_Str|MEM_Blob)) && p->n>0 ){
    85      assert( 
    86        ((p->szMalloc>0 && p->z==p->zMalloc)? 1 : 0) +
    87        ((p->flags&MEM_Dyn)!=0 ? 1 : 0) +
    88        ((p->flags&MEM_Ephem)!=0 ? 1 : 0) +
    89        ((p->flags&MEM_Static)!=0 ? 1 : 0) == 1
    90      );
    91    }
    92    return 1;
    93  }
    94  #endif
    95  
    96  
    97  /*
    98  ** If pMem is an object with a valid string representation, this routine
    99  ** ensures the internal encoding for the string representation is
   100  ** 'desiredEnc', one of SQLITE_UTF8, SQLITE_UTF16LE or SQLITE_UTF16BE.
   101  **
   102  ** If pMem is not a string object, or the encoding of the string
   103  ** representation is already stored using the requested encoding, then this
   104  ** routine is a no-op.
   105  **
   106  ** SQLITE_OK is returned if the conversion is successful (or not required).
   107  ** SQLITE_NOMEM may be returned if a malloc() fails during conversion
   108  ** between formats.
   109  */
   110  int sqlite3VdbeChangeEncoding(Mem *pMem, int desiredEnc){
   111  #ifndef SQLITE_OMIT_UTF16
   112    int rc;
   113  #endif
   114    assert( (pMem->flags&MEM_RowSet)==0 );
   115    assert( desiredEnc==SQLITE_UTF8 || desiredEnc==SQLITE_UTF16LE
   116             || desiredEnc==SQLITE_UTF16BE );
   117    if( !(pMem->flags&MEM_Str) || pMem->enc==desiredEnc ){
   118      return SQLITE_OK;
   119    }
   120    assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
   121  #ifdef SQLITE_OMIT_UTF16
   122    return SQLITE_ERROR;
   123  #else
   124  
   125    /* MemTranslate() may return SQLITE_OK or SQLITE_NOMEM. If NOMEM is returned,
   126    ** then the encoding of the value may not have changed.
   127    */
   128    rc = sqlite3VdbeMemTranslate(pMem, (u8)desiredEnc);
   129    assert(rc==SQLITE_OK    || rc==SQLITE_NOMEM);
   130    assert(rc==SQLITE_OK    || pMem->enc!=desiredEnc);
   131    assert(rc==SQLITE_NOMEM || pMem->enc==desiredEnc);
   132    return rc;
   133  #endif
   134  }
   135  
   136  /*
   137  ** Make sure pMem->z points to a writable allocation of at least 
   138  ** min(n,32) bytes.
   139  **
   140  ** If the bPreserve argument is true, then copy of the content of
   141  ** pMem->z into the new allocation.  pMem must be either a string or
   142  ** blob if bPreserve is true.  If bPreserve is false, any prior content
   143  ** in pMem->z is discarded.
   144  */
   145  SQLITE_NOINLINE int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPreserve){
   146    assert( sqlite3VdbeCheckMemInvariants(pMem) );
   147    assert( (pMem->flags&MEM_RowSet)==0 );
   148    testcase( pMem->db==0 );
   149  
   150    /* If the bPreserve flag is set to true, then the memory cell must already
   151    ** contain a valid string or blob value.  */
   152    assert( bPreserve==0 || pMem->flags&(MEM_Blob|MEM_Str) );
   153    testcase( bPreserve && pMem->z==0 );
   154  
   155    assert( pMem->szMalloc==0
   156         || pMem->szMalloc==sqlite3DbMallocSize(pMem->db, pMem->zMalloc) );
   157    if( n<32 ) n = 32;
   158    if( pMem->szMalloc>0 && bPreserve && pMem->z==pMem->zMalloc ){
   159      pMem->z = pMem->zMalloc = sqlite3DbReallocOrFree(pMem->db, pMem->z, n);
   160      bPreserve = 0;
   161    }else{
   162      if( pMem->szMalloc>0 ) sqlite3DbFreeNN(pMem->db, pMem->zMalloc);
   163      pMem->zMalloc = sqlite3DbMallocRaw(pMem->db, n);
   164    }
   165    if( pMem->zMalloc==0 ){
   166      sqlite3VdbeMemSetNull(pMem);
   167      pMem->z = 0;
   168      pMem->szMalloc = 0;
   169      return SQLITE_NOMEM_BKPT;
   170    }else{
   171      pMem->szMalloc = sqlite3DbMallocSize(pMem->db, pMem->zMalloc);
   172    }
   173  
   174    if( bPreserve && pMem->z ){
   175      assert( pMem->z!=pMem->zMalloc );
   176      memcpy(pMem->zMalloc, pMem->z, pMem->n);
   177    }
   178    if( (pMem->flags&MEM_Dyn)!=0 ){
   179      assert( pMem->xDel!=0 && pMem->xDel!=SQLITE_DYNAMIC );
   180      pMem->xDel((void *)(pMem->z));
   181    }
   182  
   183    pMem->z = pMem->zMalloc;
   184    pMem->flags &= ~(MEM_Dyn|MEM_Ephem|MEM_Static);
   185    return SQLITE_OK;
   186  }
   187  
   188  /*
   189  ** Change the pMem->zMalloc allocation to be at least szNew bytes.
   190  ** If pMem->zMalloc already meets or exceeds the requested size, this
   191  ** routine is a no-op.
   192  **
   193  ** Any prior string or blob content in the pMem object may be discarded.
   194  ** The pMem->xDel destructor is called, if it exists.  Though MEM_Str
   195  ** and MEM_Blob values may be discarded, MEM_Int, MEM_Real, and MEM_Null
   196  ** values are preserved.
   197  **
   198  ** Return SQLITE_OK on success or an error code (probably SQLITE_NOMEM)
   199  ** if unable to complete the resizing.
   200  */
   201  int sqlite3VdbeMemClearAndResize(Mem *pMem, int szNew){
   202    assert( szNew>0 );
   203    assert( (pMem->flags & MEM_Dyn)==0 || pMem->szMalloc==0 );
   204    if( pMem->szMalloc<szNew ){
   205      return sqlite3VdbeMemGrow(pMem, szNew, 0);
   206    }
   207    assert( (pMem->flags & MEM_Dyn)==0 );
   208    pMem->z = pMem->zMalloc;
   209    pMem->flags &= (MEM_Null|MEM_Int|MEM_Real);
   210    return SQLITE_OK;
   211  }
   212  
   213  /*
   214  ** It is already known that pMem contains an unterminated string.
   215  ** Add the zero terminator.
   216  */
   217  static SQLITE_NOINLINE int vdbeMemAddTerminator(Mem *pMem){
   218    if( sqlite3VdbeMemGrow(pMem, pMem->n+2, 1) ){
   219      return SQLITE_NOMEM_BKPT;
   220    }
   221    pMem->z[pMem->n] = 0;
   222    pMem->z[pMem->n+1] = 0;
   223    pMem->flags |= MEM_Term;
   224    return SQLITE_OK;
   225  }
   226  
   227  /*
   228  ** Change pMem so that its MEM_Str or MEM_Blob value is stored in
   229  ** MEM.zMalloc, where it can be safely written.
   230  **
   231  ** Return SQLITE_OK on success or SQLITE_NOMEM if malloc fails.
   232  */
   233  int sqlite3VdbeMemMakeWriteable(Mem *pMem){
   234    assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
   235    assert( (pMem->flags&MEM_RowSet)==0 );
   236    if( (pMem->flags & (MEM_Str|MEM_Blob))!=0 ){
   237      if( ExpandBlob(pMem) ) return SQLITE_NOMEM;
   238      if( pMem->szMalloc==0 || pMem->z!=pMem->zMalloc ){
   239        int rc = vdbeMemAddTerminator(pMem);
   240        if( rc ) return rc;
   241      }
   242    }
   243    pMem->flags &= ~MEM_Ephem;
   244  #ifdef SQLITE_DEBUG
   245    pMem->pScopyFrom = 0;
   246  #endif
   247  
   248    return SQLITE_OK;
   249  }
   250  
   251  /*
   252  ** If the given Mem* has a zero-filled tail, turn it into an ordinary
   253  ** blob stored in dynamically allocated space.
   254  */
   255  #ifndef SQLITE_OMIT_INCRBLOB
   256  int sqlite3VdbeMemExpandBlob(Mem *pMem){
   257    int nByte;
   258    assert( pMem->flags & MEM_Zero );
   259    assert( pMem->flags&MEM_Blob );
   260    assert( (pMem->flags&MEM_RowSet)==0 );
   261    assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
   262  
   263    /* Set nByte to the number of bytes required to store the expanded blob. */
   264    nByte = pMem->n + pMem->u.nZero;
   265    if( nByte<=0 ){
   266      nByte = 1;
   267    }
   268    if( sqlite3VdbeMemGrow(pMem, nByte, 1) ){
   269      return SQLITE_NOMEM_BKPT;
   270    }
   271  
   272    memset(&pMem->z[pMem->n], 0, pMem->u.nZero);
   273    pMem->n += pMem->u.nZero;
   274    pMem->flags &= ~(MEM_Zero|MEM_Term);
   275    return SQLITE_OK;
   276  }
   277  #endif
   278  
   279  /*
   280  ** Make sure the given Mem is \u0000 terminated.
   281  */
   282  int sqlite3VdbeMemNulTerminate(Mem *pMem){
   283    assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
   284    testcase( (pMem->flags & (MEM_Term|MEM_Str))==(MEM_Term|MEM_Str) );
   285    testcase( (pMem->flags & (MEM_Term|MEM_Str))==0 );
   286    if( (pMem->flags & (MEM_Term|MEM_Str))!=MEM_Str ){
   287      return SQLITE_OK;   /* Nothing to do */
   288    }else{
   289      return vdbeMemAddTerminator(pMem);
   290    }
   291  }
   292  
   293  /*
   294  ** Add MEM_Str to the set of representations for the given Mem.  Numbers
   295  ** are converted using sqlite3_snprintf().  Converting a BLOB to a string
   296  ** is a no-op.
   297  **
   298  ** Existing representations MEM_Int and MEM_Real are invalidated if
   299  ** bForce is true but are retained if bForce is false.
   300  **
   301  ** A MEM_Null value will never be passed to this function. This function is
   302  ** used for converting values to text for returning to the user (i.e. via
   303  ** sqlite3_value_text()), or for ensuring that values to be used as btree
   304  ** keys are strings. In the former case a NULL pointer is returned the
   305  ** user and the latter is an internal programming error.
   306  */
   307  int sqlite3VdbeMemStringify(Mem *pMem, u8 enc, u8 bForce){
   308    int fg = pMem->flags;
   309    const int nByte = 32;
   310  
   311    assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
   312    assert( !(fg&MEM_Zero) );
   313    assert( !(fg&(MEM_Str|MEM_Blob)) );
   314    assert( fg&(MEM_Int|MEM_Real) );
   315    assert( (pMem->flags&MEM_RowSet)==0 );
   316    assert( EIGHT_BYTE_ALIGNMENT(pMem) );
   317  
   318  
   319    if( sqlite3VdbeMemClearAndResize(pMem, nByte) ){
   320      pMem->enc = 0;
   321      return SQLITE_NOMEM_BKPT;
   322    }
   323  
   324    /* For a Real or Integer, use sqlite3_snprintf() to produce the UTF-8
   325    ** string representation of the value. Then, if the required encoding
   326    ** is UTF-16le or UTF-16be do a translation.
   327    ** 
   328    ** FIX ME: It would be better if sqlite3_snprintf() could do UTF-16.
   329    */
   330    if( fg & MEM_Int ){
   331      sqlite3_snprintf(nByte, pMem->z, "%lld", pMem->u.i);
   332    }else{
   333      assert( fg & MEM_Real );
   334      sqlite3_snprintf(nByte, pMem->z, "%!.15g", pMem->u.r);
   335    }
   336    pMem->n = sqlite3Strlen30(pMem->z);
   337    pMem->enc = SQLITE_UTF8;
   338    pMem->flags |= MEM_Str|MEM_Term;
   339    if( bForce ) pMem->flags &= ~(MEM_Int|MEM_Real);
   340    sqlite3VdbeChangeEncoding(pMem, enc);
   341    return SQLITE_OK;
   342  }
   343  
   344  /*
   345  ** Memory cell pMem contains the context of an aggregate function.
   346  ** This routine calls the finalize method for that function.  The
   347  ** result of the aggregate is stored back into pMem.
   348  **
   349  ** Return SQLITE_ERROR if the finalizer reports an error.  SQLITE_OK
   350  ** otherwise.
   351  */
   352  int sqlite3VdbeMemFinalize(Mem *pMem, FuncDef *pFunc){
   353    int rc = SQLITE_OK;
   354    if( ALWAYS(pFunc && pFunc->xFinalize) ){
   355      sqlite3_context ctx;
   356      Mem t;
   357      assert( (pMem->flags & MEM_Null)!=0 || pFunc==pMem->u.pDef );
   358      assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
   359      memset(&ctx, 0, sizeof(ctx));
   360      memset(&t, 0, sizeof(t));
   361      t.flags = MEM_Null;
   362      t.db = pMem->db;
   363      ctx.pOut = &t;
   364      ctx.pMem = pMem;
   365      ctx.pFunc = pFunc;
   366      pFunc->xFinalize(&ctx); /* IMP: R-24505-23230 */
   367      assert( (pMem->flags & MEM_Dyn)==0 );
   368      if( pMem->szMalloc>0 ) sqlite3DbFreeNN(pMem->db, pMem->zMalloc);
   369      memcpy(pMem, &t, sizeof(t));
   370      rc = ctx.isError;
   371    }
   372    return rc;
   373  }
   374  
   375  /*
   376  ** If the memory cell contains a value that must be freed by
   377  ** invoking the external callback in Mem.xDel, then this routine
   378  ** will free that value.  It also sets Mem.flags to MEM_Null.
   379  **
   380  ** This is a helper routine for sqlite3VdbeMemSetNull() and
   381  ** for sqlite3VdbeMemRelease().  Use those other routines as the
   382  ** entry point for releasing Mem resources.
   383  */
   384  static SQLITE_NOINLINE void vdbeMemClearExternAndSetNull(Mem *p){
   385    assert( p->db==0 || sqlite3_mutex_held(p->db->mutex) );
   386    assert( VdbeMemDynamic(p) );
   387    if( p->flags&MEM_Agg ){
   388      sqlite3VdbeMemFinalize(p, p->u.pDef);
   389      assert( (p->flags & MEM_Agg)==0 );
   390      testcase( p->flags & MEM_Dyn );
   391    }
   392    if( p->flags&MEM_Dyn ){
   393      assert( (p->flags&MEM_RowSet)==0 );
   394      assert( p->xDel!=SQLITE_DYNAMIC && p->xDel!=0 );
   395      p->xDel((void *)p->z);
   396    }else if( p->flags&MEM_RowSet ){
   397      sqlite3RowSetClear(p->u.pRowSet);
   398    }else if( p->flags&MEM_Frame ){
   399      VdbeFrame *pFrame = p->u.pFrame;
   400      pFrame->pParent = pFrame->v->pDelFrame;
   401      pFrame->v->pDelFrame = pFrame;
   402    }
   403    p->flags = MEM_Null;
   404  }
   405  
   406  /*
   407  ** Release memory held by the Mem p, both external memory cleared
   408  ** by p->xDel and memory in p->zMalloc.
   409  **
   410  ** This is a helper routine invoked by sqlite3VdbeMemRelease() in
   411  ** the unusual case where there really is memory in p that needs
   412  ** to be freed.
   413  */
   414  static SQLITE_NOINLINE void vdbeMemClear(Mem *p){
   415    if( VdbeMemDynamic(p) ){
   416      vdbeMemClearExternAndSetNull(p);
   417    }
   418    if( p->szMalloc ){
   419      sqlite3DbFreeNN(p->db, p->zMalloc);
   420      p->szMalloc = 0;
   421    }
   422    p->z = 0;
   423  }
   424  
   425  /*
   426  ** Release any memory resources held by the Mem.  Both the memory that is
   427  ** free by Mem.xDel and the Mem.zMalloc allocation are freed.
   428  **
   429  ** Use this routine prior to clean up prior to abandoning a Mem, or to
   430  ** reset a Mem back to its minimum memory utilization.
   431  **
   432  ** Use sqlite3VdbeMemSetNull() to release just the Mem.xDel space
   433  ** prior to inserting new content into the Mem.
   434  */
   435  void sqlite3VdbeMemRelease(Mem *p){
   436    assert( sqlite3VdbeCheckMemInvariants(p) );
   437    if( VdbeMemDynamic(p) || p->szMalloc ){
   438      vdbeMemClear(p);
   439    }
   440  }
   441  
   442  /*
   443  ** Convert a 64-bit IEEE double into a 64-bit signed integer.
   444  ** If the double is out of range of a 64-bit signed integer then
   445  ** return the closest available 64-bit signed integer.
   446  */
   447  static SQLITE_NOINLINE i64 doubleToInt64(double r){
   448  #ifdef SQLITE_OMIT_FLOATING_POINT
   449    /* When floating-point is omitted, double and int64 are the same thing */
   450    return r;
   451  #else
   452    /*
   453    ** Many compilers we encounter do not define constants for the
   454    ** minimum and maximum 64-bit integers, or they define them
   455    ** inconsistently.  And many do not understand the "LL" notation.
   456    ** So we define our own static constants here using nothing
   457    ** larger than a 32-bit integer constant.
   458    */
   459    static const i64 maxInt = LARGEST_INT64;
   460    static const i64 minInt = SMALLEST_INT64;
   461  
   462    if( r<=(double)minInt ){
   463      return minInt;
   464    }else if( r>=(double)maxInt ){
   465      return maxInt;
   466    }else{
   467      return (i64)r;
   468    }
   469  #endif
   470  }
   471  
   472  /*
   473  ** Return some kind of integer value which is the best we can do
   474  ** at representing the value that *pMem describes as an integer.
   475  ** If pMem is an integer, then the value is exact.  If pMem is
   476  ** a floating-point then the value returned is the integer part.
   477  ** If pMem is a string or blob, then we make an attempt to convert
   478  ** it into an integer and return that.  If pMem represents an
   479  ** an SQL-NULL value, return 0.
   480  **
   481  ** If pMem represents a string value, its encoding might be changed.
   482  */
   483  static SQLITE_NOINLINE i64 memIntValue(Mem *pMem){
   484    i64 value = 0;
   485    sqlite3Atoi64(pMem->z, &value, pMem->n, pMem->enc);
   486    return value;
   487  }
   488  i64 sqlite3VdbeIntValue(Mem *pMem){
   489    int flags;
   490    assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
   491    assert( EIGHT_BYTE_ALIGNMENT(pMem) );
   492    flags = pMem->flags;
   493    if( flags & MEM_Int ){
   494      return pMem->u.i;
   495    }else if( flags & MEM_Real ){
   496      return doubleToInt64(pMem->u.r);
   497    }else if( flags & (MEM_Str|MEM_Blob) ){
   498      assert( pMem->z || pMem->n==0 );
   499      return memIntValue(pMem);
   500    }else{
   501      return 0;
   502    }
   503  }
   504  
   505  /*
   506  ** Return the best representation of pMem that we can get into a
   507  ** double.  If pMem is already a double or an integer, return its
   508  ** value.  If it is a string or blob, try to convert it to a double.
   509  ** If it is a NULL, return 0.0.
   510  */
   511  static SQLITE_NOINLINE double memRealValue(Mem *pMem){
   512    /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
   513    double val = (double)0;
   514    sqlite3AtoF(pMem->z, &val, pMem->n, pMem->enc);
   515    return val;
   516  }
   517  double sqlite3VdbeRealValue(Mem *pMem){
   518    assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
   519    assert( EIGHT_BYTE_ALIGNMENT(pMem) );
   520    if( pMem->flags & MEM_Real ){
   521      return pMem->u.r;
   522    }else if( pMem->flags & MEM_Int ){
   523      return (double)pMem->u.i;
   524    }else if( pMem->flags & (MEM_Str|MEM_Blob) ){
   525      return memRealValue(pMem);
   526    }else{
   527      /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
   528      return (double)0;
   529    }
   530  }
   531  
   532  /*
   533  ** The MEM structure is already a MEM_Real.  Try to also make it a
   534  ** MEM_Int if we can.
   535  */
   536  void sqlite3VdbeIntegerAffinity(Mem *pMem){
   537    i64 ix;
   538    assert( pMem->flags & MEM_Real );
   539    assert( (pMem->flags & MEM_RowSet)==0 );
   540    assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
   541    assert( EIGHT_BYTE_ALIGNMENT(pMem) );
   542  
   543    ix = doubleToInt64(pMem->u.r);
   544  
   545    /* Only mark the value as an integer if
   546    **
   547    **    (1) the round-trip conversion real->int->real is a no-op, and
   548    **    (2) The integer is neither the largest nor the smallest
   549    **        possible integer (ticket #3922)
   550    **
   551    ** The second and third terms in the following conditional enforces
   552    ** the second condition under the assumption that addition overflow causes
   553    ** values to wrap around.
   554    */
   555    if( pMem->u.r==ix && ix>SMALLEST_INT64 && ix<LARGEST_INT64 ){
   556      pMem->u.i = ix;
   557      MemSetTypeFlag(pMem, MEM_Int);
   558    }
   559  }
   560  
   561  /*
   562  ** Convert pMem to type integer.  Invalidate any prior representations.
   563  */
   564  int sqlite3VdbeMemIntegerify(Mem *pMem){
   565    assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
   566    assert( (pMem->flags & MEM_RowSet)==0 );
   567    assert( EIGHT_BYTE_ALIGNMENT(pMem) );
   568  
   569    pMem->u.i = sqlite3VdbeIntValue(pMem);
   570    MemSetTypeFlag(pMem, MEM_Int);
   571    return SQLITE_OK;
   572  }
   573  
   574  /*
   575  ** Convert pMem so that it is of type MEM_Real.
   576  ** Invalidate any prior representations.
   577  */
   578  int sqlite3VdbeMemRealify(Mem *pMem){
   579    assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
   580    assert( EIGHT_BYTE_ALIGNMENT(pMem) );
   581  
   582    pMem->u.r = sqlite3VdbeRealValue(pMem);
   583    MemSetTypeFlag(pMem, MEM_Real);
   584    return SQLITE_OK;
   585  }
   586  
   587  /*
   588  ** Convert pMem so that it has types MEM_Real or MEM_Int or both.
   589  ** Invalidate any prior representations.
   590  **
   591  ** Every effort is made to force the conversion, even if the input
   592  ** is a string that does not look completely like a number.  Convert
   593  ** as much of the string as we can and ignore the rest.
   594  */
   595  int sqlite3VdbeMemNumerify(Mem *pMem){
   596    if( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))==0 ){
   597      int rc;
   598      assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 );
   599      assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
   600      rc = sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc);
   601      if( rc==0 ){
   602        MemSetTypeFlag(pMem, MEM_Int);
   603      }else{
   604        i64 i = pMem->u.i;
   605        sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc);
   606        if( rc==1 && pMem->u.r==(double)i ){
   607          pMem->u.i = i;
   608          MemSetTypeFlag(pMem, MEM_Int);
   609        }else{
   610          MemSetTypeFlag(pMem, MEM_Real);
   611        }
   612      }
   613    }
   614    assert( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))!=0 );
   615    pMem->flags &= ~(MEM_Str|MEM_Blob|MEM_Zero);
   616    return SQLITE_OK;
   617  }
   618  
   619  /*
   620  ** Cast the datatype of the value in pMem according to the affinity
   621  ** "aff".  Casting is different from applying affinity in that a cast
   622  ** is forced.  In other words, the value is converted into the desired
   623  ** affinity even if that results in loss of data.  This routine is
   624  ** used (for example) to implement the SQL "cast()" operator.
   625  */
   626  void sqlite3VdbeMemCast(Mem *pMem, u8 aff, u8 encoding){
   627    if( pMem->flags & MEM_Null ) return;
   628    switch( aff ){
   629      case SQLITE_AFF_BLOB: {   /* Really a cast to BLOB */
   630        if( (pMem->flags & MEM_Blob)==0 ){
   631          sqlite3ValueApplyAffinity(pMem, SQLITE_AFF_TEXT, encoding);
   632          assert( pMem->flags & MEM_Str || pMem->db->mallocFailed );
   633          if( pMem->flags & MEM_Str ) MemSetTypeFlag(pMem, MEM_Blob);
   634        }else{
   635          pMem->flags &= ~(MEM_TypeMask&~MEM_Blob);
   636        }
   637        break;
   638      }
   639      case SQLITE_AFF_NUMERIC: {
   640        sqlite3VdbeMemNumerify(pMem);
   641        break;
   642      }
   643      case SQLITE_AFF_INTEGER: {
   644        sqlite3VdbeMemIntegerify(pMem);
   645        break;
   646      }
   647      case SQLITE_AFF_REAL: {
   648        sqlite3VdbeMemRealify(pMem);
   649        break;
   650      }
   651      default: {
   652        assert( aff==SQLITE_AFF_TEXT );
   653        assert( MEM_Str==(MEM_Blob>>3) );
   654        pMem->flags |= (pMem->flags&MEM_Blob)>>3;
   655        sqlite3ValueApplyAffinity(pMem, SQLITE_AFF_TEXT, encoding);
   656        assert( pMem->flags & MEM_Str || pMem->db->mallocFailed );
   657        pMem->flags &= ~(MEM_Int|MEM_Real|MEM_Blob|MEM_Zero);
   658        break;
   659      }
   660    }
   661  }
   662  
   663  /*
   664  ** Initialize bulk memory to be a consistent Mem object.
   665  **
   666  ** The minimum amount of initialization feasible is performed.
   667  */
   668  void sqlite3VdbeMemInit(Mem *pMem, sqlite3 *db, u16 flags){
   669    assert( (flags & ~MEM_TypeMask)==0 );
   670    pMem->flags = flags;
   671    pMem->db = db;
   672    pMem->szMalloc = 0;
   673  }
   674  
   675  
   676  /*
   677  ** Delete any previous value and set the value stored in *pMem to NULL.
   678  **
   679  ** This routine calls the Mem.xDel destructor to dispose of values that
   680  ** require the destructor.  But it preserves the Mem.zMalloc memory allocation.
   681  ** To free all resources, use sqlite3VdbeMemRelease(), which both calls this
   682  ** routine to invoke the destructor and deallocates Mem.zMalloc.
   683  **
   684  ** Use this routine to reset the Mem prior to insert a new value.
   685  **
   686  ** Use sqlite3VdbeMemRelease() to complete erase the Mem prior to abandoning it.
   687  */
   688  void sqlite3VdbeMemSetNull(Mem *pMem){
   689    if( VdbeMemDynamic(pMem) ){
   690      vdbeMemClearExternAndSetNull(pMem);
   691    }else{
   692      pMem->flags = MEM_Null;
   693    }
   694  }
   695  void sqlite3ValueSetNull(sqlite3_value *p){
   696    sqlite3VdbeMemSetNull((Mem*)p); 
   697  }
   698  
   699  /*
   700  ** Delete any previous value and set the value to be a BLOB of length
   701  ** n containing all zeros.
   702  */
   703  void sqlite3VdbeMemSetZeroBlob(Mem *pMem, int n){
   704    sqlite3VdbeMemRelease(pMem);
   705    pMem->flags = MEM_Blob|MEM_Zero;
   706    pMem->n = 0;
   707    if( n<0 ) n = 0;
   708    pMem->u.nZero = n;
   709    pMem->enc = SQLITE_UTF8;
   710    pMem->z = 0;
   711  }
   712  
   713  /*
   714  ** The pMem is known to contain content that needs to be destroyed prior
   715  ** to a value change.  So invoke the destructor, then set the value to
   716  ** a 64-bit integer.
   717  */
   718  static SQLITE_NOINLINE void vdbeReleaseAndSetInt64(Mem *pMem, i64 val){
   719    sqlite3VdbeMemSetNull(pMem);
   720    pMem->u.i = val;
   721    pMem->flags = MEM_Int;
   722  }
   723  
   724  /*
   725  ** Delete any previous value and set the value stored in *pMem to val,
   726  ** manifest type INTEGER.
   727  */
   728  void sqlite3VdbeMemSetInt64(Mem *pMem, i64 val){
   729    if( VdbeMemDynamic(pMem) ){
   730      vdbeReleaseAndSetInt64(pMem, val);
   731    }else{
   732      pMem->u.i = val;
   733      pMem->flags = MEM_Int;
   734    }
   735  }
   736  
   737  /* A no-op destructor */
   738  static void sqlite3NoopDestructor(void *p){ UNUSED_PARAMETER(p); }
   739  
   740  /*
   741  ** Set the value stored in *pMem should already be a NULL.
   742  ** Also store a pointer to go with it.
   743  */
   744  void sqlite3VdbeMemSetPointer(
   745    Mem *pMem,
   746    void *pPtr,
   747    const char *zPType,
   748    void (*xDestructor)(void*)
   749  ){
   750    assert( pMem->flags==MEM_Null );
   751    pMem->u.zPType = zPType ? zPType : "";
   752    pMem->z = pPtr;
   753    pMem->flags = MEM_Null|MEM_Dyn|MEM_Subtype|MEM_Term;
   754    pMem->eSubtype = 'p';
   755    pMem->xDel = xDestructor ? xDestructor : sqlite3NoopDestructor;
   756  }
   757  
   758  #ifndef SQLITE_OMIT_FLOATING_POINT
   759  /*
   760  ** Delete any previous value and set the value stored in *pMem to val,
   761  ** manifest type REAL.
   762  */
   763  void sqlite3VdbeMemSetDouble(Mem *pMem, double val){
   764    sqlite3VdbeMemSetNull(pMem);
   765    if( !sqlite3IsNaN(val) ){
   766      pMem->u.r = val;
   767      pMem->flags = MEM_Real;
   768    }
   769  }
   770  #endif
   771  
   772  /*
   773  ** Delete any previous value and set the value of pMem to be an
   774  ** empty boolean index.
   775  */
   776  void sqlite3VdbeMemSetRowSet(Mem *pMem){
   777    sqlite3 *db = pMem->db;
   778    assert( db!=0 );
   779    assert( (pMem->flags & MEM_RowSet)==0 );
   780    sqlite3VdbeMemRelease(pMem);
   781    pMem->zMalloc = sqlite3DbMallocRawNN(db, 64);
   782    if( db->mallocFailed ){
   783      pMem->flags = MEM_Null;
   784      pMem->szMalloc = 0;
   785    }else{
   786      assert( pMem->zMalloc );
   787      pMem->szMalloc = sqlite3DbMallocSize(db, pMem->zMalloc);
   788      pMem->u.pRowSet = sqlite3RowSetInit(db, pMem->zMalloc, pMem->szMalloc);
   789      assert( pMem->u.pRowSet!=0 );
   790      pMem->flags = MEM_RowSet;
   791    }
   792  }
   793  
   794  /*
   795  ** Return true if the Mem object contains a TEXT or BLOB that is
   796  ** too large - whose size exceeds SQLITE_MAX_LENGTH.
   797  */
   798  int sqlite3VdbeMemTooBig(Mem *p){
   799    assert( p->db!=0 );
   800    if( p->flags & (MEM_Str|MEM_Blob) ){
   801      int n = p->n;
   802      if( p->flags & MEM_Zero ){
   803        n += p->u.nZero;
   804      }
   805      return n>p->db->aLimit[SQLITE_LIMIT_LENGTH];
   806    }
   807    return 0; 
   808  }
   809  
   810  #ifdef SQLITE_DEBUG
   811  /*
   812  ** This routine prepares a memory cell for modification by breaking
   813  ** its link to a shallow copy and by marking any current shallow
   814  ** copies of this cell as invalid.
   815  **
   816  ** This is used for testing and debugging only - to make sure shallow
   817  ** copies are not misused.
   818  */
   819  void sqlite3VdbeMemAboutToChange(Vdbe *pVdbe, Mem *pMem){
   820    int i;
   821    Mem *pX;
   822    for(i=0, pX=pVdbe->aMem; i<pVdbe->nMem; i++, pX++){
   823      if( pX->pScopyFrom==pMem ){
   824        pX->flags |= MEM_Undefined;
   825        pX->pScopyFrom = 0;
   826      }
   827    }
   828    pMem->pScopyFrom = 0;
   829  }
   830  #endif /* SQLITE_DEBUG */
   831  
   832  
   833  /*
   834  ** Make an shallow copy of pFrom into pTo.  Prior contents of
   835  ** pTo are freed.  The pFrom->z field is not duplicated.  If
   836  ** pFrom->z is used, then pTo->z points to the same thing as pFrom->z
   837  ** and flags gets srcType (either MEM_Ephem or MEM_Static).
   838  */
   839  static SQLITE_NOINLINE void vdbeClrCopy(Mem *pTo, const Mem *pFrom, int eType){
   840    vdbeMemClearExternAndSetNull(pTo);
   841    assert( !VdbeMemDynamic(pTo) );
   842    sqlite3VdbeMemShallowCopy(pTo, pFrom, eType);
   843  }
   844  void sqlite3VdbeMemShallowCopy(Mem *pTo, const Mem *pFrom, int srcType){
   845    assert( (pFrom->flags & MEM_RowSet)==0 );
   846    assert( pTo->db==pFrom->db );
   847    if( VdbeMemDynamic(pTo) ){ vdbeClrCopy(pTo,pFrom,srcType); return; }
   848    memcpy(pTo, pFrom, MEMCELLSIZE);
   849    if( (pFrom->flags&MEM_Static)==0 ){
   850      pTo->flags &= ~(MEM_Dyn|MEM_Static|MEM_Ephem);
   851      assert( srcType==MEM_Ephem || srcType==MEM_Static );
   852      pTo->flags |= srcType;
   853    }
   854  }
   855  
   856  /*
   857  ** Make a full copy of pFrom into pTo.  Prior contents of pTo are
   858  ** freed before the copy is made.
   859  */
   860  int sqlite3VdbeMemCopy(Mem *pTo, const Mem *pFrom){
   861    int rc = SQLITE_OK;
   862  
   863    assert( (pFrom->flags & MEM_RowSet)==0 );
   864    if( VdbeMemDynamic(pTo) ) vdbeMemClearExternAndSetNull(pTo);
   865    memcpy(pTo, pFrom, MEMCELLSIZE);
   866    pTo->flags &= ~MEM_Dyn;
   867    if( pTo->flags&(MEM_Str|MEM_Blob) ){
   868      if( 0==(pFrom->flags&MEM_Static) ){
   869        pTo->flags |= MEM_Ephem;
   870        rc = sqlite3VdbeMemMakeWriteable(pTo);
   871      }
   872    }
   873  
   874    return rc;
   875  }
   876  
   877  /*
   878  ** Transfer the contents of pFrom to pTo. Any existing value in pTo is
   879  ** freed. If pFrom contains ephemeral data, a copy is made.
   880  **
   881  ** pFrom contains an SQL NULL when this routine returns.
   882  */
   883  void sqlite3VdbeMemMove(Mem *pTo, Mem *pFrom){
   884    assert( pFrom->db==0 || sqlite3_mutex_held(pFrom->db->mutex) );
   885    assert( pTo->db==0 || sqlite3_mutex_held(pTo->db->mutex) );
   886    assert( pFrom->db==0 || pTo->db==0 || pFrom->db==pTo->db );
   887  
   888    sqlite3VdbeMemRelease(pTo);
   889    memcpy(pTo, pFrom, sizeof(Mem));
   890    pFrom->flags = MEM_Null;
   891    pFrom->szMalloc = 0;
   892  }
   893  
   894  /*
   895  ** Change the value of a Mem to be a string or a BLOB.
   896  **
   897  ** The memory management strategy depends on the value of the xDel
   898  ** parameter. If the value passed is SQLITE_TRANSIENT, then the 
   899  ** string is copied into a (possibly existing) buffer managed by the 
   900  ** Mem structure. Otherwise, any existing buffer is freed and the
   901  ** pointer copied.
   902  **
   903  ** If the string is too large (if it exceeds the SQLITE_LIMIT_LENGTH
   904  ** size limit) then no memory allocation occurs.  If the string can be
   905  ** stored without allocating memory, then it is.  If a memory allocation
   906  ** is required to store the string, then value of pMem is unchanged.  In
   907  ** either case, SQLITE_TOOBIG is returned.
   908  */
   909  int sqlite3VdbeMemSetStr(
   910    Mem *pMem,          /* Memory cell to set to string value */
   911    const char *z,      /* String pointer */
   912    int n,              /* Bytes in string, or negative */
   913    u8 enc,             /* Encoding of z.  0 for BLOBs */
   914    void (*xDel)(void*) /* Destructor function */
   915  ){
   916    int nByte = n;      /* New value for pMem->n */
   917    int iLimit;         /* Maximum allowed string or blob size */
   918    u16 flags = 0;      /* New value for pMem->flags */
   919  
   920    assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
   921    assert( (pMem->flags & MEM_RowSet)==0 );
   922  
   923    /* If z is a NULL pointer, set pMem to contain an SQL NULL. */
   924    if( !z ){
   925      sqlite3VdbeMemSetNull(pMem);
   926      return SQLITE_OK;
   927    }
   928  
   929    if( pMem->db ){
   930      iLimit = pMem->db->aLimit[SQLITE_LIMIT_LENGTH];
   931    }else{
   932      iLimit = SQLITE_MAX_LENGTH;
   933    }
   934    flags = (enc==0?MEM_Blob:MEM_Str);
   935    if( nByte<0 ){
   936      assert( enc!=0 );
   937      if( enc==SQLITE_UTF8 ){
   938        nByte = 0x7fffffff & (int)strlen(z);
   939        if( nByte>iLimit ) nByte = iLimit+1;
   940      }else{
   941        for(nByte=0; nByte<=iLimit && (z[nByte] | z[nByte+1]); nByte+=2){}
   942      }
   943      flags |= MEM_Term;
   944    }
   945  
   946    /* The following block sets the new values of Mem.z and Mem.xDel. It
   947    ** also sets a flag in local variable "flags" to indicate the memory
   948    ** management (one of MEM_Dyn or MEM_Static).
   949    */
   950    if( xDel==SQLITE_TRANSIENT ){
   951      int nAlloc = nByte;
   952      if( flags&MEM_Term ){
   953        nAlloc += (enc==SQLITE_UTF8?1:2);
   954      }
   955      if( nByte>iLimit ){
   956        return SQLITE_TOOBIG;
   957      }
   958      testcase( nAlloc==0 );
   959      testcase( nAlloc==31 );
   960      testcase( nAlloc==32 );
   961      if( sqlite3VdbeMemClearAndResize(pMem, MAX(nAlloc,32)) ){
   962        return SQLITE_NOMEM_BKPT;
   963      }
   964      memcpy(pMem->z, z, nAlloc);
   965    }else if( xDel==SQLITE_DYNAMIC ){
   966      sqlite3VdbeMemRelease(pMem);
   967      pMem->zMalloc = pMem->z = (char *)z;
   968      pMem->szMalloc = sqlite3DbMallocSize(pMem->db, pMem->zMalloc);
   969    }else{
   970      sqlite3VdbeMemRelease(pMem);
   971      pMem->z = (char *)z;
   972      pMem->xDel = xDel;
   973      flags |= ((xDel==SQLITE_STATIC)?MEM_Static:MEM_Dyn);
   974    }
   975  
   976    pMem->n = nByte;
   977    pMem->flags = flags;
   978    pMem->enc = (enc==0 ? SQLITE_UTF8 : enc);
   979  
   980  #ifndef SQLITE_OMIT_UTF16
   981    if( pMem->enc!=SQLITE_UTF8 && sqlite3VdbeMemHandleBom(pMem) ){
   982      return SQLITE_NOMEM_BKPT;
   983    }
   984  #endif
   985  
   986    if( nByte>iLimit ){
   987      return SQLITE_TOOBIG;
   988    }
   989  
   990    return SQLITE_OK;
   991  }
   992  
   993  /*
   994  ** Move data out of a btree key or data field and into a Mem structure.
   995  ** The data is payload from the entry that pCur is currently pointing
   996  ** to.  offset and amt determine what portion of the data or key to retrieve.
   997  ** The result is written into the pMem element.
   998  **
   999  ** The pMem object must have been initialized.  This routine will use
  1000  ** pMem->zMalloc to hold the content from the btree, if possible.  New
  1001  ** pMem->zMalloc space will be allocated if necessary.  The calling routine
  1002  ** is responsible for making sure that the pMem object is eventually
  1003  ** destroyed.
  1004  **
  1005  ** If this routine fails for any reason (malloc returns NULL or unable
  1006  ** to read from the disk) then the pMem is left in an inconsistent state.
  1007  */
  1008  static SQLITE_NOINLINE int vdbeMemFromBtreeResize(
  1009    BtCursor *pCur,   /* Cursor pointing at record to retrieve. */
  1010    u32 offset,       /* Offset from the start of data to return bytes from. */
  1011    u32 amt,          /* Number of bytes to return. */
  1012    Mem *pMem         /* OUT: Return data in this Mem structure. */
  1013  ){
  1014    int rc;
  1015    pMem->flags = MEM_Null;
  1016    if( SQLITE_OK==(rc = sqlite3VdbeMemClearAndResize(pMem, amt+1)) ){
  1017      rc = sqlite3BtreePayload(pCur, offset, amt, pMem->z);
  1018      if( rc==SQLITE_OK ){
  1019        pMem->z[amt] = 0;   /* Overrun area used when reading malformed records */
  1020        pMem->flags = MEM_Blob;
  1021        pMem->n = (int)amt;
  1022      }else{
  1023        sqlite3VdbeMemRelease(pMem);
  1024      }
  1025    }
  1026    return rc;
  1027  }
  1028  int sqlite3VdbeMemFromBtree(
  1029    BtCursor *pCur,   /* Cursor pointing at record to retrieve. */
  1030    u32 offset,       /* Offset from the start of data to return bytes from. */
  1031    u32 amt,          /* Number of bytes to return. */
  1032    Mem *pMem         /* OUT: Return data in this Mem structure. */
  1033  ){
  1034    char *zData;        /* Data from the btree layer */
  1035    u32 available = 0;  /* Number of bytes available on the local btree page */
  1036    int rc = SQLITE_OK; /* Return code */
  1037  
  1038    assert( sqlite3BtreeCursorIsValid(pCur) );
  1039    assert( !VdbeMemDynamic(pMem) );
  1040  
  1041    /* Note: the calls to BtreeKeyFetch() and DataFetch() below assert() 
  1042    ** that both the BtShared and database handle mutexes are held. */
  1043    assert( (pMem->flags & MEM_RowSet)==0 );
  1044    zData = (char *)sqlite3BtreePayloadFetch(pCur, &available);
  1045    assert( zData!=0 );
  1046  
  1047    if( offset+amt<=available ){
  1048      pMem->z = &zData[offset];
  1049      pMem->flags = MEM_Blob|MEM_Ephem;
  1050      pMem->n = (int)amt;
  1051    }else{
  1052      rc = vdbeMemFromBtreeResize(pCur, offset, amt, pMem);
  1053    }
  1054  
  1055    return rc;
  1056  }
  1057  
  1058  /*
  1059  ** The pVal argument is known to be a value other than NULL.
  1060  ** Convert it into a string with encoding enc and return a pointer
  1061  ** to a zero-terminated version of that string.
  1062  */
  1063  static SQLITE_NOINLINE const void *valueToText(sqlite3_value* pVal, u8 enc){
  1064    assert( pVal!=0 );
  1065    assert( pVal->db==0 || sqlite3_mutex_held(pVal->db->mutex) );
  1066    assert( (enc&3)==(enc&~SQLITE_UTF16_ALIGNED) );
  1067    assert( (pVal->flags & MEM_RowSet)==0 );
  1068    assert( (pVal->flags & (MEM_Null))==0 );
  1069    if( pVal->flags & (MEM_Blob|MEM_Str) ){
  1070      if( ExpandBlob(pVal) ) return 0;
  1071      pVal->flags |= MEM_Str;
  1072      if( pVal->enc != (enc & ~SQLITE_UTF16_ALIGNED) ){
  1073        sqlite3VdbeChangeEncoding(pVal, enc & ~SQLITE_UTF16_ALIGNED);
  1074      }
  1075      if( (enc & SQLITE_UTF16_ALIGNED)!=0 && 1==(1&SQLITE_PTR_TO_INT(pVal->z)) ){
  1076        assert( (pVal->flags & (MEM_Ephem|MEM_Static))!=0 );
  1077        if( sqlite3VdbeMemMakeWriteable(pVal)!=SQLITE_OK ){
  1078          return 0;
  1079        }
  1080      }
  1081      sqlite3VdbeMemNulTerminate(pVal); /* IMP: R-31275-44060 */
  1082    }else{
  1083      sqlite3VdbeMemStringify(pVal, enc, 0);
  1084      assert( 0==(1&SQLITE_PTR_TO_INT(pVal->z)) );
  1085    }
  1086    assert(pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) || pVal->db==0
  1087                || pVal->db->mallocFailed );
  1088    if( pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) ){
  1089      return pVal->z;
  1090    }else{
  1091      return 0;
  1092    }
  1093  }
  1094  
  1095  /* This function is only available internally, it is not part of the
  1096  ** external API. It works in a similar way to sqlite3_value_text(),
  1097  ** except the data returned is in the encoding specified by the second
  1098  ** parameter, which must be one of SQLITE_UTF16BE, SQLITE_UTF16LE or
  1099  ** SQLITE_UTF8.
  1100  **
  1101  ** (2006-02-16:)  The enc value can be or-ed with SQLITE_UTF16_ALIGNED.
  1102  ** If that is the case, then the result must be aligned on an even byte
  1103  ** boundary.
  1104  */
  1105  const void *sqlite3ValueText(sqlite3_value* pVal, u8 enc){
  1106    if( !pVal ) return 0;
  1107    assert( pVal->db==0 || sqlite3_mutex_held(pVal->db->mutex) );
  1108    assert( (enc&3)==(enc&~SQLITE_UTF16_ALIGNED) );
  1109    assert( (pVal->flags & MEM_RowSet)==0 );
  1110    if( (pVal->flags&(MEM_Str|MEM_Term))==(MEM_Str|MEM_Term) && pVal->enc==enc ){
  1111      return pVal->z;
  1112    }
  1113    if( pVal->flags&MEM_Null ){
  1114      return 0;
  1115    }
  1116    return valueToText(pVal, enc);
  1117  }
  1118  
  1119  /*
  1120  ** Create a new sqlite3_value object.
  1121  */
  1122  sqlite3_value *sqlite3ValueNew(sqlite3 *db){
  1123    Mem *p = sqlite3DbMallocZero(db, sizeof(*p));
  1124    if( p ){
  1125      p->flags = MEM_Null;
  1126      p->db = db;
  1127    }
  1128    return p;
  1129  }
  1130  
  1131  /*
  1132  ** Context object passed by sqlite3Stat4ProbeSetValue() through to 
  1133  ** valueNew(). See comments above valueNew() for details.
  1134  */
  1135  struct ValueNewStat4Ctx {
  1136    Parse *pParse;
  1137    Index *pIdx;
  1138    UnpackedRecord **ppRec;
  1139    int iVal;
  1140  };
  1141  
  1142  /*
  1143  ** Allocate and return a pointer to a new sqlite3_value object. If
  1144  ** the second argument to this function is NULL, the object is allocated
  1145  ** by calling sqlite3ValueNew().
  1146  **
  1147  ** Otherwise, if the second argument is non-zero, then this function is 
  1148  ** being called indirectly by sqlite3Stat4ProbeSetValue(). If it has not
  1149  ** already been allocated, allocate the UnpackedRecord structure that 
  1150  ** that function will return to its caller here. Then return a pointer to
  1151  ** an sqlite3_value within the UnpackedRecord.a[] array.
  1152  */
  1153  static sqlite3_value *valueNew(sqlite3 *db, struct ValueNewStat4Ctx *p){
  1154  #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
  1155    if( p ){
  1156      UnpackedRecord *pRec = p->ppRec[0];
  1157  
  1158      if( pRec==0 ){
  1159        Index *pIdx = p->pIdx;      /* Index being probed */
  1160        int nByte;                  /* Bytes of space to allocate */
  1161        int i;                      /* Counter variable */
  1162        int nCol = pIdx->nColumn;   /* Number of index columns including rowid */
  1163    
  1164        nByte = sizeof(Mem) * nCol + ROUND8(sizeof(UnpackedRecord));
  1165        pRec = (UnpackedRecord*)sqlite3DbMallocZero(db, nByte);
  1166        if( pRec ){
  1167          pRec->pKeyInfo = sqlite3KeyInfoOfIndex(p->pParse, pIdx);
  1168          if( pRec->pKeyInfo ){
  1169            assert( pRec->pKeyInfo->nAllField==nCol );
  1170            assert( pRec->pKeyInfo->enc==ENC(db) );
  1171            pRec->aMem = (Mem *)((u8*)pRec + ROUND8(sizeof(UnpackedRecord)));
  1172            for(i=0; i<nCol; i++){
  1173              pRec->aMem[i].flags = MEM_Null;
  1174              pRec->aMem[i].db = db;
  1175            }
  1176          }else{
  1177            sqlite3DbFreeNN(db, pRec);
  1178            pRec = 0;
  1179          }
  1180        }
  1181        if( pRec==0 ) return 0;
  1182        p->ppRec[0] = pRec;
  1183      }
  1184    
  1185      pRec->nField = p->iVal+1;
  1186      return &pRec->aMem[p->iVal];
  1187    }
  1188  #else
  1189    UNUSED_PARAMETER(p);
  1190  #endif /* defined(SQLITE_ENABLE_STAT3_OR_STAT4) */
  1191    return sqlite3ValueNew(db);
  1192  }
  1193  
  1194  /*
  1195  ** The expression object indicated by the second argument is guaranteed
  1196  ** to be a scalar SQL function. If
  1197  **
  1198  **   * all function arguments are SQL literals,
  1199  **   * one of the SQLITE_FUNC_CONSTANT or _SLOCHNG function flags is set, and
  1200  **   * the SQLITE_FUNC_NEEDCOLL function flag is not set,
  1201  **
  1202  ** then this routine attempts to invoke the SQL function. Assuming no
  1203  ** error occurs, output parameter (*ppVal) is set to point to a value 
  1204  ** object containing the result before returning SQLITE_OK.
  1205  **
  1206  ** Affinity aff is applied to the result of the function before returning.
  1207  ** If the result is a text value, the sqlite3_value object uses encoding 
  1208  ** enc.
  1209  **
  1210  ** If the conditions above are not met, this function returns SQLITE_OK
  1211  ** and sets (*ppVal) to NULL. Or, if an error occurs, (*ppVal) is set to
  1212  ** NULL and an SQLite error code returned.
  1213  */
  1214  #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
  1215  static int valueFromFunction(
  1216    sqlite3 *db,                    /* The database connection */
  1217    Expr *p,                        /* The expression to evaluate */
  1218    u8 enc,                         /* Encoding to use */
  1219    u8 aff,                         /* Affinity to use */
  1220    sqlite3_value **ppVal,          /* Write the new value here */
  1221    struct ValueNewStat4Ctx *pCtx   /* Second argument for valueNew() */
  1222  ){
  1223    sqlite3_context ctx;            /* Context object for function invocation */
  1224    sqlite3_value **apVal = 0;      /* Function arguments */
  1225    int nVal = 0;                   /* Size of apVal[] array */
  1226    FuncDef *pFunc = 0;             /* Function definition */
  1227    sqlite3_value *pVal = 0;        /* New value */
  1228    int rc = SQLITE_OK;             /* Return code */
  1229    ExprList *pList = 0;            /* Function arguments */
  1230    int i;                          /* Iterator variable */
  1231  
  1232    assert( pCtx!=0 );
  1233    assert( (p->flags & EP_TokenOnly)==0 );
  1234    pList = p->x.pList;
  1235    if( pList ) nVal = pList->nExpr;
  1236    pFunc = sqlite3FindFunction(db, p->u.zToken, nVal, enc, 0);
  1237    assert( pFunc );
  1238    if( (pFunc->funcFlags & (SQLITE_FUNC_CONSTANT|SQLITE_FUNC_SLOCHNG))==0 
  1239     || (pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL)
  1240    ){
  1241      return SQLITE_OK;
  1242    }
  1243  
  1244    if( pList ){
  1245      apVal = (sqlite3_value**)sqlite3DbMallocZero(db, sizeof(apVal[0]) * nVal);
  1246      if( apVal==0 ){
  1247        rc = SQLITE_NOMEM_BKPT;
  1248        goto value_from_function_out;
  1249      }
  1250      for(i=0; i<nVal; i++){
  1251        rc = sqlite3ValueFromExpr(db, pList->a[i].pExpr, enc, aff, &apVal[i]);
  1252        if( apVal[i]==0 || rc!=SQLITE_OK ) goto value_from_function_out;
  1253      }
  1254    }
  1255  
  1256    pVal = valueNew(db, pCtx);
  1257    if( pVal==0 ){
  1258      rc = SQLITE_NOMEM_BKPT;
  1259      goto value_from_function_out;
  1260    }
  1261  
  1262    assert( pCtx->pParse->rc==SQLITE_OK );
  1263    memset(&ctx, 0, sizeof(ctx));
  1264    ctx.pOut = pVal;
  1265    ctx.pFunc = pFunc;
  1266    pFunc->xSFunc(&ctx, nVal, apVal);
  1267    if( ctx.isError ){
  1268      rc = ctx.isError;
  1269      sqlite3ErrorMsg(pCtx->pParse, "%s", sqlite3_value_text(pVal));
  1270    }else{
  1271      sqlite3ValueApplyAffinity(pVal, aff, SQLITE_UTF8);
  1272      assert( rc==SQLITE_OK );
  1273      rc = sqlite3VdbeChangeEncoding(pVal, enc);
  1274      if( rc==SQLITE_OK && sqlite3VdbeMemTooBig(pVal) ){
  1275        rc = SQLITE_TOOBIG;
  1276        pCtx->pParse->nErr++;
  1277      }
  1278    }
  1279    pCtx->pParse->rc = rc;
  1280  
  1281   value_from_function_out:
  1282    if( rc!=SQLITE_OK ){
  1283      pVal = 0;
  1284    }
  1285    if( apVal ){
  1286      for(i=0; i<nVal; i++){
  1287        sqlite3ValueFree(apVal[i]);
  1288      }
  1289      sqlite3DbFreeNN(db, apVal);
  1290    }
  1291  
  1292    *ppVal = pVal;
  1293    return rc;
  1294  }
  1295  #else
  1296  # define valueFromFunction(a,b,c,d,e,f) SQLITE_OK
  1297  #endif /* defined(SQLITE_ENABLE_STAT3_OR_STAT4) */
  1298  
  1299  /*
  1300  ** Extract a value from the supplied expression in the manner described
  1301  ** above sqlite3ValueFromExpr(). Allocate the sqlite3_value object
  1302  ** using valueNew().
  1303  **
  1304  ** If pCtx is NULL and an error occurs after the sqlite3_value object
  1305  ** has been allocated, it is freed before returning. Or, if pCtx is not
  1306  ** NULL, it is assumed that the caller will free any allocated object
  1307  ** in all cases.
  1308  */
  1309  static int valueFromExpr(
  1310    sqlite3 *db,                    /* The database connection */
  1311    Expr *pExpr,                    /* The expression to evaluate */
  1312    u8 enc,                         /* Encoding to use */
  1313    u8 affinity,                    /* Affinity to use */
  1314    sqlite3_value **ppVal,          /* Write the new value here */
  1315    struct ValueNewStat4Ctx *pCtx   /* Second argument for valueNew() */
  1316  ){
  1317    int op;
  1318    char *zVal = 0;
  1319    sqlite3_value *pVal = 0;
  1320    int negInt = 1;
  1321    const char *zNeg = "";
  1322    int rc = SQLITE_OK;
  1323  
  1324    assert( pExpr!=0 );
  1325    while( (op = pExpr->op)==TK_UPLUS || op==TK_SPAN ) pExpr = pExpr->pLeft;
  1326    if( NEVER(op==TK_REGISTER) ) op = pExpr->op2;
  1327  
  1328    /* Compressed expressions only appear when parsing the DEFAULT clause
  1329    ** on a table column definition, and hence only when pCtx==0.  This
  1330    ** check ensures that an EP_TokenOnly expression is never passed down
  1331    ** into valueFromFunction(). */
  1332    assert( (pExpr->flags & EP_TokenOnly)==0 || pCtx==0 );
  1333  
  1334    if( op==TK_CAST ){
  1335      u8 aff = sqlite3AffinityType(pExpr->u.zToken,0);
  1336      rc = valueFromExpr(db, pExpr->pLeft, enc, aff, ppVal, pCtx);
  1337      testcase( rc!=SQLITE_OK );
  1338      if( *ppVal ){
  1339        sqlite3VdbeMemCast(*ppVal, aff, SQLITE_UTF8);
  1340        sqlite3ValueApplyAffinity(*ppVal, affinity, SQLITE_UTF8);
  1341      }
  1342      return rc;
  1343    }
  1344  
  1345    /* Handle negative integers in a single step.  This is needed in the
  1346    ** case when the value is -9223372036854775808.
  1347    */
  1348    if( op==TK_UMINUS
  1349     && (pExpr->pLeft->op==TK_INTEGER || pExpr->pLeft->op==TK_FLOAT) ){
  1350      pExpr = pExpr->pLeft;
  1351      op = pExpr->op;
  1352      negInt = -1;
  1353      zNeg = "-";
  1354    }
  1355  
  1356    if( op==TK_STRING || op==TK_FLOAT || op==TK_INTEGER ){
  1357      pVal = valueNew(db, pCtx);
  1358      if( pVal==0 ) goto no_mem;
  1359      if( ExprHasProperty(pExpr, EP_IntValue) ){
  1360        sqlite3VdbeMemSetInt64(pVal, (i64)pExpr->u.iValue*negInt);
  1361      }else{
  1362        zVal = sqlite3MPrintf(db, "%s%s", zNeg, pExpr->u.zToken);
  1363        if( zVal==0 ) goto no_mem;
  1364        sqlite3ValueSetStr(pVal, -1, zVal, SQLITE_UTF8, SQLITE_DYNAMIC);
  1365      }
  1366      if( (op==TK_INTEGER || op==TK_FLOAT ) && affinity==SQLITE_AFF_BLOB ){
  1367        sqlite3ValueApplyAffinity(pVal, SQLITE_AFF_NUMERIC, SQLITE_UTF8);
  1368      }else{
  1369        sqlite3ValueApplyAffinity(pVal, affinity, SQLITE_UTF8);
  1370      }
  1371      if( pVal->flags & (MEM_Int|MEM_Real) ) pVal->flags &= ~MEM_Str;
  1372      if( enc!=SQLITE_UTF8 ){
  1373        rc = sqlite3VdbeChangeEncoding(pVal, enc);
  1374      }
  1375    }else if( op==TK_UMINUS ) {
  1376      /* This branch happens for multiple negative signs.  Ex: -(-5) */
  1377      if( SQLITE_OK==valueFromExpr(db,pExpr->pLeft,enc,affinity,&pVal,pCtx) 
  1378       && pVal!=0
  1379      ){
  1380        sqlite3VdbeMemNumerify(pVal);
  1381        if( pVal->flags & MEM_Real ){
  1382          pVal->u.r = -pVal->u.r;
  1383        }else if( pVal->u.i==SMALLEST_INT64 ){
  1384          pVal->u.r = -(double)SMALLEST_INT64;
  1385          MemSetTypeFlag(pVal, MEM_Real);
  1386        }else{
  1387          pVal->u.i = -pVal->u.i;
  1388        }
  1389        sqlite3ValueApplyAffinity(pVal, affinity, enc);
  1390      }
  1391    }else if( op==TK_NULL ){
  1392      pVal = valueNew(db, pCtx);
  1393      if( pVal==0 ) goto no_mem;
  1394      sqlite3VdbeMemNumerify(pVal);
  1395    }
  1396  #ifndef SQLITE_OMIT_BLOB_LITERAL
  1397    else if( op==TK_BLOB ){
  1398      int nVal;
  1399      assert( pExpr->u.zToken[0]=='x' || pExpr->u.zToken[0]=='X' );
  1400      assert( pExpr->u.zToken[1]=='\'' );
  1401      pVal = valueNew(db, pCtx);
  1402      if( !pVal ) goto no_mem;
  1403      zVal = &pExpr->u.zToken[2];
  1404      nVal = sqlite3Strlen30(zVal)-1;
  1405      assert( zVal[nVal]=='\'' );
  1406      sqlite3VdbeMemSetStr(pVal, sqlite3HexToBlob(db, zVal, nVal), nVal/2,
  1407                           0, SQLITE_DYNAMIC);
  1408    }
  1409  #endif
  1410  
  1411  #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
  1412    else if( op==TK_FUNCTION && pCtx!=0 ){
  1413      rc = valueFromFunction(db, pExpr, enc, affinity, &pVal, pCtx);
  1414    }
  1415  #endif
  1416  
  1417    *ppVal = pVal;
  1418    return rc;
  1419  
  1420  no_mem:
  1421    sqlite3OomFault(db);
  1422    sqlite3DbFree(db, zVal);
  1423    assert( *ppVal==0 );
  1424  #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
  1425    if( pCtx==0 ) sqlite3ValueFree(pVal);
  1426  #else
  1427    assert( pCtx==0 ); sqlite3ValueFree(pVal);
  1428  #endif
  1429    return SQLITE_NOMEM_BKPT;
  1430  }
  1431  
  1432  /*
  1433  ** Create a new sqlite3_value object, containing the value of pExpr.
  1434  **
  1435  ** This only works for very simple expressions that consist of one constant
  1436  ** token (i.e. "5", "5.1", "'a string'"). If the expression can
  1437  ** be converted directly into a value, then the value is allocated and
  1438  ** a pointer written to *ppVal. The caller is responsible for deallocating
  1439  ** the value by passing it to sqlite3ValueFree() later on. If the expression
  1440  ** cannot be converted to a value, then *ppVal is set to NULL.
  1441  */
  1442  int sqlite3ValueFromExpr(
  1443    sqlite3 *db,              /* The database connection */
  1444    Expr *pExpr,              /* The expression to evaluate */
  1445    u8 enc,                   /* Encoding to use */
  1446    u8 affinity,              /* Affinity to use */
  1447    sqlite3_value **ppVal     /* Write the new value here */
  1448  ){
  1449    return pExpr ? valueFromExpr(db, pExpr, enc, affinity, ppVal, 0) : 0;
  1450  }
  1451  
  1452  #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
  1453  /*
  1454  ** The implementation of the sqlite_record() function. This function accepts
  1455  ** a single argument of any type. The return value is a formatted database 
  1456  ** record (a blob) containing the argument value.
  1457  **
  1458  ** This is used to convert the value stored in the 'sample' column of the
  1459  ** sqlite_stat3 table to the record format SQLite uses internally.
  1460  */
  1461  static void recordFunc(
  1462    sqlite3_context *context,
  1463    int argc,
  1464    sqlite3_value **argv
  1465  ){
  1466    const int file_format = 1;
  1467    u32 iSerial;                    /* Serial type */
  1468    int nSerial;                    /* Bytes of space for iSerial as varint */
  1469    u32 nVal;                       /* Bytes of space required for argv[0] */
  1470    int nRet;
  1471    sqlite3 *db;
  1472    u8 *aRet;
  1473  
  1474    UNUSED_PARAMETER( argc );
  1475    iSerial = sqlite3VdbeSerialType(argv[0], file_format, &nVal);
  1476    nSerial = sqlite3VarintLen(iSerial);
  1477    db = sqlite3_context_db_handle(context);
  1478  
  1479    nRet = 1 + nSerial + nVal;
  1480    aRet = sqlite3DbMallocRawNN(db, nRet);
  1481    if( aRet==0 ){
  1482      sqlite3_result_error_nomem(context);
  1483    }else{
  1484      aRet[0] = nSerial+1;
  1485      putVarint32(&aRet[1], iSerial);
  1486      sqlite3VdbeSerialPut(&aRet[1+nSerial], argv[0], iSerial);
  1487      sqlite3_result_blob(context, aRet, nRet, SQLITE_TRANSIENT);
  1488      sqlite3DbFreeNN(db, aRet);
  1489    }
  1490  }
  1491  
  1492  /*
  1493  ** Register built-in functions used to help read ANALYZE data.
  1494  */
  1495  void sqlite3AnalyzeFunctions(void){
  1496    static FuncDef aAnalyzeTableFuncs[] = {
  1497      FUNCTION(sqlite_record,   1, 0, 0, recordFunc),
  1498    };
  1499    sqlite3InsertBuiltinFuncs(aAnalyzeTableFuncs, ArraySize(aAnalyzeTableFuncs));
  1500  }
  1501  
  1502  /*
  1503  ** Attempt to extract a value from pExpr and use it to construct *ppVal.
  1504  **
  1505  ** If pAlloc is not NULL, then an UnpackedRecord object is created for
  1506  ** pAlloc if one does not exist and the new value is added to the
  1507  ** UnpackedRecord object.
  1508  **
  1509  ** A value is extracted in the following cases:
  1510  **
  1511  **  * (pExpr==0). In this case the value is assumed to be an SQL NULL,
  1512  **
  1513  **  * The expression is a bound variable, and this is a reprepare, or
  1514  **
  1515  **  * The expression is a literal value.
  1516  **
  1517  ** On success, *ppVal is made to point to the extracted value.  The caller
  1518  ** is responsible for ensuring that the value is eventually freed.
  1519  */
  1520  static int stat4ValueFromExpr(
  1521    Parse *pParse,                  /* Parse context */
  1522    Expr *pExpr,                    /* The expression to extract a value from */
  1523    u8 affinity,                    /* Affinity to use */
  1524    struct ValueNewStat4Ctx *pAlloc,/* How to allocate space.  Or NULL */
  1525    sqlite3_value **ppVal           /* OUT: New value object (or NULL) */
  1526  ){
  1527    int rc = SQLITE_OK;
  1528    sqlite3_value *pVal = 0;
  1529    sqlite3 *db = pParse->db;
  1530  
  1531    /* Skip over any TK_COLLATE nodes */
  1532    pExpr = sqlite3ExprSkipCollate(pExpr);
  1533  
  1534    assert( pExpr==0 || pExpr->op!=TK_REGISTER || pExpr->op2!=TK_VARIABLE );
  1535    if( !pExpr ){
  1536      pVal = valueNew(db, pAlloc);
  1537      if( pVal ){
  1538        sqlite3VdbeMemSetNull((Mem*)pVal);
  1539      }
  1540    }else if( pExpr->op==TK_VARIABLE && (db->flags & SQLITE_EnableQPSG)==0 ){
  1541      Vdbe *v;
  1542      int iBindVar = pExpr->iColumn;
  1543      sqlite3VdbeSetVarmask(pParse->pVdbe, iBindVar);
  1544      if( (v = pParse->pReprepare)!=0 ){
  1545        pVal = valueNew(db, pAlloc);
  1546        if( pVal ){
  1547          rc = sqlite3VdbeMemCopy((Mem*)pVal, &v->aVar[iBindVar-1]);
  1548          sqlite3ValueApplyAffinity(pVal, affinity, ENC(db));
  1549          pVal->db = pParse->db;
  1550        }
  1551      }
  1552    }else{
  1553      rc = valueFromExpr(db, pExpr, ENC(db), affinity, &pVal, pAlloc);
  1554    }
  1555  
  1556    assert( pVal==0 || pVal->db==db );
  1557    *ppVal = pVal;
  1558    return rc;
  1559  }
  1560  
  1561  /*
  1562  ** This function is used to allocate and populate UnpackedRecord 
  1563  ** structures intended to be compared against sample index keys stored 
  1564  ** in the sqlite_stat4 table.
  1565  **
  1566  ** A single call to this function populates zero or more fields of the
  1567  ** record starting with field iVal (fields are numbered from left to
  1568  ** right starting with 0). A single field is populated if:
  1569  **
  1570  **  * (pExpr==0). In this case the value is assumed to be an SQL NULL,
  1571  **
  1572  **  * The expression is a bound variable, and this is a reprepare, or
  1573  **
  1574  **  * The sqlite3ValueFromExpr() function is able to extract a value 
  1575  **    from the expression (i.e. the expression is a literal value).
  1576  **
  1577  ** Or, if pExpr is a TK_VECTOR, one field is populated for each of the
  1578  ** vector components that match either of the two latter criteria listed
  1579  ** above.
  1580  **
  1581  ** Before any value is appended to the record, the affinity of the 
  1582  ** corresponding column within index pIdx is applied to it. Before
  1583  ** this function returns, output parameter *pnExtract is set to the
  1584  ** number of values appended to the record.
  1585  **
  1586  ** When this function is called, *ppRec must either point to an object
  1587  ** allocated by an earlier call to this function, or must be NULL. If it
  1588  ** is NULL and a value can be successfully extracted, a new UnpackedRecord
  1589  ** is allocated (and *ppRec set to point to it) before returning.
  1590  **
  1591  ** Unless an error is encountered, SQLITE_OK is returned. It is not an
  1592  ** error if a value cannot be extracted from pExpr. If an error does
  1593  ** occur, an SQLite error code is returned.
  1594  */
  1595  int sqlite3Stat4ProbeSetValue(
  1596    Parse *pParse,                  /* Parse context */
  1597    Index *pIdx,                    /* Index being probed */
  1598    UnpackedRecord **ppRec,         /* IN/OUT: Probe record */
  1599    Expr *pExpr,                    /* The expression to extract a value from */
  1600    int nElem,                      /* Maximum number of values to append */
  1601    int iVal,                       /* Array element to populate */
  1602    int *pnExtract                  /* OUT: Values appended to the record */
  1603  ){
  1604    int rc = SQLITE_OK;
  1605    int nExtract = 0;
  1606  
  1607    if( pExpr==0 || pExpr->op!=TK_SELECT ){
  1608      int i;
  1609      struct ValueNewStat4Ctx alloc;
  1610  
  1611      alloc.pParse = pParse;
  1612      alloc.pIdx = pIdx;
  1613      alloc.ppRec = ppRec;
  1614  
  1615      for(i=0; i<nElem; i++){
  1616        sqlite3_value *pVal = 0;
  1617        Expr *pElem = (pExpr ? sqlite3VectorFieldSubexpr(pExpr, i) : 0);
  1618        u8 aff = sqlite3IndexColumnAffinity(pParse->db, pIdx, iVal+i);
  1619        alloc.iVal = iVal+i;
  1620        rc = stat4ValueFromExpr(pParse, pElem, aff, &alloc, &pVal);
  1621        if( !pVal ) break;
  1622        nExtract++;
  1623      }
  1624    }
  1625  
  1626    *pnExtract = nExtract;
  1627    return rc;
  1628  }
  1629  
  1630  /*
  1631  ** Attempt to extract a value from expression pExpr using the methods
  1632  ** as described for sqlite3Stat4ProbeSetValue() above. 
  1633  **
  1634  ** If successful, set *ppVal to point to a new value object and return 
  1635  ** SQLITE_OK. If no value can be extracted, but no other error occurs
  1636  ** (e.g. OOM), return SQLITE_OK and set *ppVal to NULL. Or, if an error
  1637  ** does occur, return an SQLite error code. The final value of *ppVal
  1638  ** is undefined in this case.
  1639  */
  1640  int sqlite3Stat4ValueFromExpr(
  1641    Parse *pParse,                  /* Parse context */
  1642    Expr *pExpr,                    /* The expression to extract a value from */
  1643    u8 affinity,                    /* Affinity to use */
  1644    sqlite3_value **ppVal           /* OUT: New value object (or NULL) */
  1645  ){
  1646    return stat4ValueFromExpr(pParse, pExpr, affinity, 0, ppVal);
  1647  }
  1648  
  1649  /*
  1650  ** Extract the iCol-th column from the nRec-byte record in pRec.  Write
  1651  ** the column value into *ppVal.  If *ppVal is initially NULL then a new
  1652  ** sqlite3_value object is allocated.
  1653  **
  1654  ** If *ppVal is initially NULL then the caller is responsible for 
  1655  ** ensuring that the value written into *ppVal is eventually freed.
  1656  */
  1657  int sqlite3Stat4Column(
  1658    sqlite3 *db,                    /* Database handle */
  1659    const void *pRec,               /* Pointer to buffer containing record */
  1660    int nRec,                       /* Size of buffer pRec in bytes */
  1661    int iCol,                       /* Column to extract */
  1662    sqlite3_value **ppVal           /* OUT: Extracted value */
  1663  ){
  1664    u32 t;                          /* a column type code */
  1665    int nHdr;                       /* Size of the header in the record */
  1666    int iHdr;                       /* Next unread header byte */
  1667    int iField;                     /* Next unread data byte */
  1668    int szField;                    /* Size of the current data field */
  1669    int i;                          /* Column index */
  1670    u8 *a = (u8*)pRec;              /* Typecast byte array */
  1671    Mem *pMem = *ppVal;             /* Write result into this Mem object */
  1672  
  1673    assert( iCol>0 );
  1674    iHdr = getVarint32(a, nHdr);
  1675    if( nHdr>nRec || iHdr>=nHdr ) return SQLITE_CORRUPT_BKPT;
  1676    iField = nHdr;
  1677    for(i=0; i<=iCol; i++){
  1678      iHdr += getVarint32(&a[iHdr], t);
  1679      testcase( iHdr==nHdr );
  1680      testcase( iHdr==nHdr+1 );
  1681      if( iHdr>nHdr ) return SQLITE_CORRUPT_BKPT;
  1682      szField = sqlite3VdbeSerialTypeLen(t);
  1683      iField += szField;
  1684    }
  1685    testcase( iField==nRec );
  1686    testcase( iField==nRec+1 );
  1687    if( iField>nRec ) return SQLITE_CORRUPT_BKPT;
  1688    if( pMem==0 ){
  1689      pMem = *ppVal = sqlite3ValueNew(db);
  1690      if( pMem==0 ) return SQLITE_NOMEM_BKPT;
  1691    }
  1692    sqlite3VdbeSerialGet(&a[iField-szField], t, pMem);
  1693    pMem->enc = ENC(db);
  1694    return SQLITE_OK;
  1695  }
  1696  
  1697  /*
  1698  ** Unless it is NULL, the argument must be an UnpackedRecord object returned
  1699  ** by an earlier call to sqlite3Stat4ProbeSetValue(). This call deletes
  1700  ** the object.
  1701  */
  1702  void sqlite3Stat4ProbeFree(UnpackedRecord *pRec){
  1703    if( pRec ){
  1704      int i;
  1705      int nCol = pRec->pKeyInfo->nAllField;
  1706      Mem *aMem = pRec->aMem;
  1707      sqlite3 *db = aMem[0].db;
  1708      for(i=0; i<nCol; i++){
  1709        sqlite3VdbeMemRelease(&aMem[i]);
  1710      }
  1711      sqlite3KeyInfoUnref(pRec->pKeyInfo);
  1712      sqlite3DbFreeNN(db, pRec);
  1713    }
  1714  }
  1715  #endif /* ifdef SQLITE_ENABLE_STAT4 */
  1716  
  1717  /*
  1718  ** Change the string value of an sqlite3_value object
  1719  */
  1720  void sqlite3ValueSetStr(
  1721    sqlite3_value *v,     /* Value to be set */
  1722    int n,                /* Length of string z */
  1723    const void *z,        /* Text of the new string */
  1724    u8 enc,               /* Encoding to use */
  1725    void (*xDel)(void*)   /* Destructor for the string */
  1726  ){
  1727    if( v ) sqlite3VdbeMemSetStr((Mem *)v, z, n, enc, xDel);
  1728  }
  1729  
  1730  /*
  1731  ** Free an sqlite3_value object
  1732  */
  1733  void sqlite3ValueFree(sqlite3_value *v){
  1734    if( !v ) return;
  1735    sqlite3VdbeMemRelease((Mem *)v);
  1736    sqlite3DbFreeNN(((Mem*)v)->db, v);
  1737  }
  1738  
  1739  /*
  1740  ** The sqlite3ValueBytes() routine returns the number of bytes in the
  1741  ** sqlite3_value object assuming that it uses the encoding "enc".
  1742  ** The valueBytes() routine is a helper function.
  1743  */
  1744  static SQLITE_NOINLINE int valueBytes(sqlite3_value *pVal, u8 enc){
  1745    return valueToText(pVal, enc)!=0 ? pVal->n : 0;
  1746  }
  1747  int sqlite3ValueBytes(sqlite3_value *pVal, u8 enc){
  1748    Mem *p = (Mem*)pVal;
  1749    assert( (p->flags & MEM_Null)==0 || (p->flags & (MEM_Str|MEM_Blob))==0 );
  1750    if( (p->flags & MEM_Str)!=0 && pVal->enc==enc ){
  1751      return p->n;
  1752    }
  1753    if( (p->flags & MEM_Blob)!=0 ){
  1754      if( p->flags & MEM_Zero ){
  1755        return p->n + p->u.nZero;
  1756      }else{
  1757        return p->n;
  1758      }
  1759    }
  1760    if( p->flags & MEM_Null ) return 0;
  1761    return valueBytes(pVal, enc);
  1762  }